summaryrefslogtreecommitdiffstats
path: root/src/python/package.py
diff options
context:
space:
mode:
authorBaruch Sterin <baruchs@gmail.com>2013-10-08 12:04:07 -0700
committerBaruch Sterin <baruchs@gmail.com>2013-10-08 12:04:07 -0700
commitcbc718d701c26e7ef0e243a44ed420bacbe0056a (patch)
tree21b1c439571739fe59bb457ce7ef44e324f519d4 /src/python/package.py
parent7a1c4ee86759bf8f6ba8e78126a7c296bd905f36 (diff)
downloadabc-cbc718d701c26e7ef0e243a44ed420bacbe0056a.tar.gz
abc-cbc718d701c26e7ef0e243a44ed420bacbe0056a.tar.bz2
abc-cbc718d701c26e7ef0e243a44ed420bacbe0056a.zip
pyabc changes for HWMCC13
Diffstat (limited to 'src/python/package.py')
-rw-r--r--src/python/package.py65
1 files changed, 47 insertions, 18 deletions
diff --git a/src/python/package.py b/src/python/package.py
index 1764ab6f..ab464e0a 100644
--- a/src/python/package.py
+++ b/src/python/package.py
@@ -5,6 +5,7 @@ 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])
@@ -15,13 +16,25 @@ def zip_library(f, extra_files = []):
arcroot = os.path.relpath(root, lib)
for f in files:
_, ext = os.path.splitext(f)
- if ext in ['.py', '.pyo', '.pyc']:
+ 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):
+
+ for root, _, files in os.walk(lib):
+
+ arcroot = os.path.join( lib_dir, os.path.relpath(root, lib) )
+ add_dir(tf, arcroot, mtime)
+
+ for f in files:
+ _, ext = os.path.splitext(f)
+ if ext in ['.py']:
+ 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)
@@ -43,21 +56,23 @@ def add_fileobj(tf, f, arcname, mode, mtime):
tf.addfile(ti, f)
def add_file(tf, fname, arcname, mode, mtime):
- f = open(fname, "rb")
- add_fileobj(tf, f, arcname, mode, mtime)
- f.close()
+ print "\t adding %s as %s"%(fname, arcname)
+
+ with open(fname, "rb") as f:
+ add_fileobj(tf, f, arcname, mode, mtime)
-def package(abc_exe, abc_sh, pyabc, ofname, scripts_dir, use_sys):
+def package(pyabc_dir, extra_bin, extra_lib, abc_exe, abc_sh, pyabc, ofname, scripts_dir, use_sys):
+
mtime = time.time()
tf = tarfile.open(ofname, "w:gz")
- add_dir(tf, "pyabc", mtime)
+ add_dir(tf, "%s"%pyabc_dir, mtime)
- add_dir(tf, "pyabc/bin", mtime)
+ add_dir(tf, "%s/bin"%pyabc_dir, mtime)
- add_file(tf, abc_exe, "pyabc/bin/abc_exe", 0777, mtime)
- add_file(tf, abc_sh, "pyabc/bin/abc", 0777, 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):
@@ -65,15 +80,23 @@ def package(abc_exe, abc_sh, pyabc, ofname, scripts_dir, use_sys):
if os.path.isfile(fullname):
fnroot, fnext = os.path.splitext(fn)
if fnext==".sh":
- add_file( tf, fullname, os.path.join("pyabc/bin", fnroot), 0777, mtime)
- else:
- add_file( tf, fullname, os.path.join("pyabc/scripts", fn), 0666, mtime)
+ 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)
- add_dir(tf, "pyabc/lib", 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 entry in os.listdir(pyabc):
if entry.endswith('.py'):
- add_file( tf, os.path.join(pyabc, entry), os.path.join("pyabc/lib", entry), 0666, mtime)
+ 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
@@ -82,7 +105,7 @@ def package(abc_exe, abc_sh, pyabc, ofname, scripts_dir, use_sys):
zip_library(zf, [])
zf.flush()
- add_fileobj(tf, zf, "pyabc/lib/python_library.zip", 0666, mtime)
+ add_fileobj(tf, zf, "%s/lib/python_library.zip"%pyabc_dir, 0666, mtime)
zf.close()
@@ -93,7 +116,7 @@ def package(abc_exe, abc_sh, pyabc, ofname, scripts_dir, use_sys):
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("pyabc/lib", fn), 0666, mtime)
+ add_file( tf, fullname, os.path.join("%s/lib"%pyabc_dir, fn), 0666, mtime)
tf.close()
@@ -104,6 +127,9 @@ def main(args):
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("-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")
@@ -117,11 +143,14 @@ def main(args):
parser.print_help()
return 1
- if not options.abc or not options.abc_sh or not options.pyabc or not options.out:
+ 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
- return package(options.abc, options.abc_sh, options.pyabc, options.out, options.scripts, options.sys)
+ extra_bin = options.extra_bin.split(',') if options.extra_bin else []
+ extra_lib = options.extra_lib.split(',') if options.extra_lib else []
+
+ return package(options.pyabc_dir, extra_bin, extra_lib, options.abc, options.abc_sh, options.pyabc, options.out, options.scripts, options.sys)
if __name__=="__main__":
main(sys.argv)