
import sys
import marshal
import imp
import zlib

source = open(sys.argv[1]).read()
code = marshal.dumps(compile(source,'','exec'))

l = 0
while True:
    unpacksrc = """
import marshal
import zlib
f=file(__file__,'rb')
f.seek(%d)
exec marshal.loads(zlib.decompress(f.read()))
""" % (l+8)
    unpackcode = marshal.dumps(compile(unpacksrc,'','exec'))
    print "unpackcode: %d" % len(unpackcode)
    if len(unpackcode) == l:
        break
    l = len(unpackcode)

compressed=zlib.compress(code,9)
se = open("se_"+sys.argv[1], 'wb')
se.write(imp.get_magic())
se.write('\0\0\0\0')
se.write(unpackcode)
se.write(compressed)
se.close()

print "Source: ", len(source)
print "Compiled: ", len(code)
print "Compressed: ", len(compressed)
print "With loader: ", 8+len(unpackcode)+len(compressed)
