diff options
Diffstat (limited to 'src/python/package.py')
-rw-r--r-- | src/python/package.py | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/src/python/package.py b/src/python/package.py deleted file mode 100644 index 2e6ad559..00000000 --- a/src/python/package.py +++ /dev/null @@ -1,176 +0,0 @@ -import os -import sys -import optparse -import zipfile -import tarfile -import tempfile -import time -import py_compile - -def zip_library(f, extra_files = []): - lib = "%s/lib/python%s/"%(sys.prefix,sys.version[:3]) - - zf = zipfile.ZipFile(f, "w", zipfile.ZIP_DEFLATED) - - for root, _, files in os.walk(lib): - arcroot = os.path.relpath(root, lib) - for f in files: - _, ext = os.path.splitext(f) - if ext in ['.py']: - zf.write(os.path.join(root,f), os.path.join(arcroot, f)) - - for s, r in extra_files: - zf.write( s, r ) - - zf.close() - -def add_python_lib(tf, lib_dir, lib, mtime): - - _, prefix = os.path.split(lib) - - for root, _, files in os.walk(lib): - - relpath = os.path.relpath(root, lib) - - if '.hg' in relpath.split('/'): - continue - - if relpath=='.': - arcroot = lib_dir - else: - arcroot = os.path.join( lib_dir, os.path.relpath(root, lib) ) - - arcroot = os.path.join(arcroot, prefix) - - add_dir(tf, arcroot, mtime) - - for f in files: - _, ext = os.path.splitext(f) - if ext in ['.py', '.so']: - add_file( tf, os.path.join(root,f), os.path.join(arcroot, f), 0666, mtime) - -def add_dir(tf, dir, mtime): - ti = tarfile.TarInfo(dir) - ti.mode = 0777 - ti.mtime = mtime - ti.type = tarfile.DIRTYPE - - tf.addfile(ti) - -def add_fileobj(tf, f, arcname, mode, mtime): - ti = tarfile.TarInfo(arcname) - ti.mode = mode - ti.mtime = mtime - - f.seek(0, os.SEEK_END) - ti.size = f.tell() - - f.seek(0, os.SEEK_SET) - tf.addfile(ti, f) - -def add_file(tf, fname, arcname, mode, mtime): - print "\t adding %s as %s"%(fname, arcname) - - with open(fname, "rb") as f: - add_fileobj(tf, f, arcname, mode, mtime) - -def package(pyabc_dir, extra_bin, extra_lib, extra_files, abc_exe, abc_sh, pyabc, ofname, scripts_dir, use_sys): - - mtime = time.time() - - tf = tarfile.open(ofname, "w:gz") - - add_dir(tf, "%s"%pyabc_dir, mtime) - - add_dir(tf, "%s/bin"%pyabc_dir, mtime) - - add_file(tf, abc_exe, "%s/bin/abc_exe"%pyabc_dir, 0777, mtime) - add_file(tf, abc_sh, "%s/bin/abc"%pyabc_dir, 0777, mtime) - - if scripts_dir: - for fn in os.listdir(scripts_dir): - if fn.startswith('.'): - continue - fullname = os.path.join(scripts_dir, fn) - if os.path.isfile(fullname): - fnroot, fnext = os.path.splitext(fn) - if fnext==".sh": - add_file( tf, fullname, os.path.join("%s/bin"%pyabc_dir, fnroot), 0777, mtime) - elif fnext not in ( '.pyc', '.pyo'): - add_file( tf, fullname, os.path.join("%s/scripts"%pyabc_dir, fn), 0666, mtime) - - for bin in extra_bin: - add_file( tf, bin, os.path.join("%s/bin"%pyabc_dir, os.path.basename(bin)), 0777, mtime) - - lib_dir = "%s/lib"%pyabc_dir - - add_dir(tf, lib_dir, mtime) - - for lib in extra_lib: - add_python_lib( tf, lib_dir, lib, mtime) - - for file, dest in extra_files: - add_file(tf, file, '%s/%s'%(pyabc_dir, dest), 0666, mtime) - - for entry in os.listdir(pyabc): - if entry.endswith('.py'): - add_file( tf, os.path.join(pyabc, entry), os.path.join("%s/lib"%pyabc_dir, entry), 0666, mtime) - - if not use_sys: - # ZIP standard library - zf = tempfile.NamedTemporaryFile("w+b") - #zip_library(zf, [(pyabc, "pyabc.py")]) - zip_library(zf, []) - zf.flush() - - add_fileobj(tf, zf, "%s/lib/python_library.zip"%pyabc_dir, 0666, mtime) - - zf.close() - - # add all extensions - - lib_dynload = os.path.join(sys.exec_prefix,"lib", "python%s"%sys.version[:3], "lib-dynload") - - for fn in os.listdir(lib_dynload): - fullname = os.path.join(lib_dynload, fn) - if os.path.isfile(fullname): - add_file( tf, fullname, os.path.join("%s/lib"%pyabc_dir, fn), 0666, mtime) - - tf.close() - - -def main(args): - - usage = "usage: %prog [options]" - - parser = optparse.OptionParser(usage) - - parser.add_option("-d", "--pyabc_dir", dest="pyabc_dir", help="name of generated directory" ) - parser.add_option("-b", "--extra_bin", dest="extra_bin", help="extra binaries to pack" ) - parser.add_option("-l", "--extra_lib", dest="extra_lib", help="extra directories in lib to pack" ) - parser.add_option("-f", "--extra_files", dest="extra_files", help="additional files (comma separated pairs of file:dest" ) - parser.add_option("-a", "--abc", dest="abc", help="location of the ABC exeutable") - parser.add_option("-s", "--abc_sh", dest="abc_sh", help="location of the ABC setup script") - parser.add_option("-p", "--pyabc", dest="pyabc", help="location of pyabc.py") - parser.add_option("-o", "--out", dest="out", help="location of output tar gzipped file") - parser.add_option("-x", "--scripts", dest="scripts", default="scripts", help="location of scripts") - parser.add_option("-S", "--system", action="store_false", dest="sys", default=True, help="use default python installation") - - options, args = parser.parse_args(args) - - if len(args) > 1: - parser.print_help() - return 1 - - if not options.pyabc_dir or not options.abc or not options.abc_sh or not options.pyabc or not options.out: - parser.print_help() - return 1 - - extra_bin = options.extra_bin.split(',') if options.extra_bin else [] - extra_lib = options.extra_lib.split(',') if options.extra_lib else [] - extra_files = [ s.split(':') for s in options.extra_files.split(',')] if options.extra_files else [] - - return package(options.pyabc_dir, extra_bin, extra_lib, extra_files, options.abc, options.abc_sh, options.pyabc, options.out, options.scripts, options.sys) - -if __name__=="__main__": - main(sys.argv) |