[pypy-commit] pypy packaging: start to modernize packaging
mattip
noreply at buildbot.pypy.org
Wed May 21 23:31:59 CEST 2014
Author: mattip <matti.picus at gmail.com>
Branch: packaging
Changeset: r71655:595408acdcbd
Date: 2014-05-21 22:12 +0300
http://bitbucket.org/pypy/pypy/changeset/595408acdcbd/
Log: start to modernize packaging
diff --git a/pypy/tool/release/package.py b/pypy/tool/release/package.py
--- a/pypy/tool/release/package.py
+++ b/pypy/tool/release/package.py
@@ -3,20 +3,21 @@
It uses 'pypy/goal/pypy-c' and parts of the rest of the working
copy. Usage:
- package.py [--nostrip] [--without-tk] root-pypy-dir [name-of-archive] [name-of-pypy-c] [destination-for-tarball] [pypy-c-path]
+ package.py --base-dir pypy-base-dir [--options]
-Usually you would do: package.py ../../.. pypy-VER-PLATFORM
-The output is found in the directory /tmp/usession-YOURNAME/build/.
+Usually you would do: package.py --version-name pypy-VER-PLATFORM
+The output is found in the directory from --builddir,
+by default /tmp/usession-YOURNAME/build/.
"""
import shutil
import sys
import os
#Add toplevel repository dir to sys.path
-sys.path.insert(0,os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
+basedir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
+sys.path.insert(0,basedir)
import py
import fnmatch
-from rpython.tool.udir import udir
import subprocess
if sys.version_info < (2,6): py.test.skip("requires 2.6 so far")
@@ -40,15 +41,22 @@
class PyPyCNotFound(Exception):
pass
-def fix_permissions(basedir):
+def fix_permissions(dirname):
if sys.platform != 'win32':
- os.system("chmod -R a+rX %s" % basedir)
- os.system("chmod -R g-w %s" % basedir)
+ os.system("chmod -R a+rX %s" % dirname)
+ os.system("chmod -R g-w %s" % dirname)
-def package(basedir, name='pypy-nightly', rename_pypy_c='pypy',
- copy_to_dir=None, override_pypy_c=None, nostrip=False,
- withouttk=False):
- assert '/' not in rename_pypy_c
+def generate_license(base_file, options):
+ with open(base_file) as fid:
+ txt = fid.read()
+ return txt
+
+def package(basedir, options):
+ name = options.name
+ rename_pypy_c = options.pypy_c
+ override_pypy_c = options.override_pypy_c
+ withouttk = options.tk
+
basedir = py.path.local(basedir)
if override_pypy_c is None:
basename = 'pypy-c'
@@ -83,13 +91,13 @@
You can either install Tk development headers package or
add --without-tk option to skip packaging binary CFFI extension."""
sys.exit(1)
- #Can the dependencies be found from cffi somehow?
- win_extras += ['tcl85.dll', 'tk85.dll']
+ #Can the dependencies be found from cffi somehow?
+ win_extras += ['tcl85.dll', 'tk85.dll']
if sys.platform == 'win32' and not rename_pypy_c.lower().endswith('.exe'):
rename_pypy_c += '.exe'
binaries = [(pypy_c, rename_pypy_c)]
#
- builddir = udir.ensure("build", dir=True)
+ builddir = options.builddir
pypydir = builddir.ensure(name, dir=True)
includedir = basedir.join('include')
# Recursively copy all headers, shutil has only ignore
@@ -116,7 +124,7 @@
continue
print "Picking %s" % p
binaries.append((p, p.basename))
- importlib_name = 'python27.lib'
+ importlib_name = 'python27.lib'
if pypy_c.dirpath().join(importlib_name).check():
shutil.copyfile(str(pypy_c.dirpath().join(importlib_name)),
str(pypydir.join('include/python27.lib')))
@@ -153,7 +161,7 @@
for file in ['LICENSE', 'README.rst']:
shutil.copy(str(basedir.join(file)), str(pypydir))
for file in ['_testcapimodule.c', '_ctypes_test.c']:
- shutil.copyfile(str(basedir.join('lib_pypy', file)),
+ shutil.copyfile(str(basedir.join('lib_pypy', file)),
str(pypydir.join('lib_pypy', file)))
#
spdir = pypydir.ensure('site-packages', dir=True)
@@ -167,17 +175,17 @@
for source, target in binaries:
archive = bindir.join(target)
shutil.copy(str(source), str(archive))
+ fix_permissions(builddir)
+
old_dir = os.getcwd()
- fix_permissions(builddir)
try:
os.chdir(str(builddir))
- #
- # 'strip' fun: see issue #587
- if not nostrip:
+ if not options.nostrip:
for source, target in binaries:
if sys.platform == 'win32':
pass
elif sys.platform == 'darwin':
+ # 'strip' fun: see issue #587 for why -x
os.system("strip -x " + str(bindir.join(target))) # ignore errors
else:
os.system("strip " + str(bindir.join(target))) # ignore errors
@@ -215,34 +223,37 @@
print "Ready in %s" % (builddir,)
return builddir # for tests
-
-def print_usage():
- print >>sys.stderr, __doc__
- sys.exit(1)
-
-
if __name__ == '__main__':
- if len(sys.argv) == 1:
- print_usage()
-
- args = sys.argv[1:]
- kw = {}
-
- for i, arg in enumerate(args):
- if arg == '--nostrip':
- kw['nostrip'] = True
- elif arg == '--without-tk':
- kw['withouttk'] = True
- elif not arg.startswith('--'):
- break
- else:
- print_usage()
+ import argparse
+ if sys.platform == 'win32':
+ pypy_exe = 'pypy.exe'
+ license_base = os.path.join(basedir,'../local') # as on buildbot YMMV
+ else:
+ pypy_exe = 'pypy'
+ license_base = '/usr/share/doc'
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--without-tk', dest='no_tk', action='store_true',
+ help='build and package the cffi tkinter module')
+ parser.add_argument('--without-cffi', dest='no_cffi', action='store_true',
+ help='do not pre-import any cffi modules')
+ parser.add_argument('--nostrip', dest='nostrip', action='store_true',
+ help='do not strip the exe, making it ~10MB larger')
+ parser.add_argument('--rename_pypy_c', dest='pypy_c', type=str, default=pypy_exe,
+ help='target executable name, defaults to "pypy"')
+ parser.add_argument('--license_base', type=str, default=license_base,
+ help='where to start looking for third party upstream licensing info')
+ parser.add_argument('--builddir', type=str, default='',
+ help='tmp dir for packaging')
+ options = parser.parse_args()
if os.environ.has_key("PYPY_PACKAGE_NOSTRIP"):
- kw['nostrip'] = True
+ options.nostrip = True
if os.environ.has_key("PYPY_PACKAGE_WITHOUTTK"):
- kw['withouttk'] = True
-
- args = args[i:]
- package(*args, **kw)
+ options.tk = True
+ if not options.builddir:
+ # The import actually creates the udir directory
+ from rpython.tool.udir import udir
+ options.builddir = udir.ensure("build", dir=True)
+ assert '/' not in options.rename_pypy_c
+ package(basedir, options)
More information about the pypy-commit
mailing list