summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
authorRonald Oussoren <ronaldoussoren@mac.com>2009-09-20 20:16:11 (GMT)
committerRonald Oussoren <ronaldoussoren@mac.com>2009-09-20 20:16:11 (GMT)
commitc66ced30bed34241fca0fe54eed9f4859d1e42c4 (patch)
tree4df1f230409cb43ca8ad79b7ee3a98698b32f70d /Mac
parenta9cfbded4bc9e121056e2628bd9aad684ab8ac8f (diff)
downloadcpython-c66ced30bed34241fca0fe54eed9f4859d1e42c4.zip
cpython-c66ced30bed34241fca0fe54eed9f4859d1e42c4.tar.gz
cpython-c66ced30bed34241fca0fe54eed9f4859d1e42c4.tar.bz2
* Make it easier to build custom installers (such as a 3-way universal build)
* Upgrade bzip dependency to 1.0.5
Diffstat (limited to 'Mac')
-rwxr-xr-xMac/BuildScript/build-installer.py372
-rwxr-xr-xMac/BuildScript/scripts/postflight.framework10
2 files changed, 200 insertions, 182 deletions
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 8d85434..38f20f4 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -61,12 +61,25 @@ DEPSRC = os.path.join(WORKDIR, 'third-party')
DEPSRC = os.path.expanduser('~/Universal/other-sources')
# Location of the preferred SDK
-SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk"
-#SDKPATH = "/"
+if int(os.uname()[2].split('.')[0]) == 8:
+ # Explicitly use the 10.4u (universal) SDK when
+ # building on 10.4, the system headers are not
+ # useable for a universal build
+ SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk"
+else:
+ SDKPATH = "/"
universal_opts_map = { '32-bit': ('i386', 'ppc',),
'64-bit': ('x86_64', 'ppc64',),
- 'all': ('i386', 'ppc', 'x86_64', 'ppc64',) }
+ 'intel': ('i386', 'x86_64'),
+ '3-way': ('ppc', 'i386', 'x86_64'),
+ 'all': ('i386', 'ppc', 'x86_64', 'ppc64',) }
+default_target_map = {
+ '64-bit': '10.5',
+ '3-way': '10.5',
+ 'intel': '10.5',
+ 'all': '10.5',
+}
UNIVERSALOPTS = tuple(universal_opts_map.keys())
@@ -104,87 +117,91 @@ USAGE = textwrap.dedent("""\
# [The recipes are defined here for convenience but instantiated later after
# command line options have been processed.]
def library_recipes():
- return [
- dict(
- name="Bzip2 1.0.4",
- url="http://www.bzip.org/1.0.4/bzip2-1.0.4.tar.gz",
- checksum='fc310b254f6ba5fbb5da018f04533688',
- configure=None,
- install='make install PREFIX=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%(
- shellQuote(os.path.join(WORKDIR, 'libraries')),
- ' -arch '.join(ARCHLIST),
- SDKPATH,
+ result = []
+
+ if DEPTARGET < '10.5':
+ result.extend([
+ dict(
+ name="Bzip2 1.0.5",
+ url="http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz",
+ checksum='3c15a0c8d1d3ee1c46a1634d00617b1a',
+ configure=None,
+ install='make install PREFIX=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%(
+ shellQuote(os.path.join(WORKDIR, 'libraries')),
+ ' -arch '.join(ARCHLIST),
+ SDKPATH,
+ ),
),
- ),
- dict(
- name="ZLib 1.2.3",
- url="http://www.gzip.org/zlib/zlib-1.2.3.tar.gz",
- checksum='debc62758716a169df9f62e6ab2bc634',
- configure=None,
- install='make install prefix=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%(
- shellQuote(os.path.join(WORKDIR, 'libraries')),
- ' -arch '.join(ARCHLIST),
- SDKPATH,
+ dict(
+ name="ZLib 1.2.3",
+ url="http://www.gzip.org/zlib/zlib-1.2.3.tar.gz",
+ checksum='debc62758716a169df9f62e6ab2bc634',
+ configure=None,
+ install='make install prefix=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%(
+ shellQuote(os.path.join(WORKDIR, 'libraries')),
+ ' -arch '.join(ARCHLIST),
+ SDKPATH,
+ ),
),
- ),
- dict(
- # Note that GNU readline is GPL'd software
- name="GNU Readline 5.1.4",
- url="http://ftp.gnu.org/pub/gnu/readline/readline-5.1.tar.gz" ,
- checksum='7ee5a692db88b30ca48927a13fd60e46',
- patchlevel='0',
- patches=[
- # The readline maintainers don't do actual micro releases, but
- # just ship a set of patches.
- 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-001',
- 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-002',
- 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-003',
- 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-004',
- ]
- ),
-
- dict(
- name="SQLite 3.6.11",
- url="http://www.sqlite.org/sqlite-3.6.11.tar.gz",
- checksum='7ebb099696ab76cc6ff65dd496d17858',
- configure_pre=[
- '--enable-threadsafe',
- '--enable-tempstore',
- '--enable-shared=no',
- '--enable-static=yes',
- '--disable-tcl',
- ]
- ),
+ dict(
+ # Note that GNU readline is GPL'd software
+ name="GNU Readline 5.1.4",
+ url="http://ftp.gnu.org/pub/gnu/readline/readline-5.1.tar.gz" ,
+ checksum='7ee5a692db88b30ca48927a13fd60e46',
+ patchlevel='0',
+ patches=[
+ # The readline maintainers don't do actual micro releases, but
+ # just ship a set of patches.
+ 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-001',
+ 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-002',
+ 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-003',
+ 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-004',
+ ]
+ ),
+ dict(
+ name="SQLite 3.6.11",
+ url="http://www.sqlite.org/sqlite-3.6.11.tar.gz",
+ checksum='7ebb099696ab76cc6ff65dd496d17858',
+ configure_pre=[
+ '--enable-threadsafe',
+ '--enable-tempstore',
+ '--enable-shared=no',
+ '--enable-static=yes',
+ '--disable-tcl',
+ ]
+ ),
+ dict(
+ name="NCurses 5.5",
+ url="http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz",
+ checksum='e73c1ac10b4bfc46db43b2ddfd6244ef',
+ configure_pre=[
+ "--without-cxx",
+ "--without-ada",
+ "--without-progs",
+ "--without-curses-h",
+ "--enable-shared",
+ "--with-shared",
+ "--datadir=/usr/share",
+ "--sysconfdir=/etc",
+ "--sharedstatedir=/usr/com",
+ "--with-terminfo-dirs=/usr/share/terminfo",
+ "--with-default-terminfo-dir=/usr/share/terminfo",
+ "--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib"%(getVersion(),),
+ "--enable-termcap",
+ ],
+ patches=[
+ "ncurses-5.5.patch",
+ ],
+ useLDFlags=False,
+ install='make && make install DESTDIR=%s && cd %s/usr/local/lib && ln -fs ../../../Library/Frameworks/Python.framework/Versions/%s/lib/lib* .'%(
+ shellQuote(os.path.join(WORKDIR, 'libraries')),
+ shellQuote(os.path.join(WORKDIR, 'libraries')),
+ getVersion(),
+ ),
+ ),
+ ])
- dict(
- name="NCurses 5.5",
- url="http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz",
- checksum='e73c1ac10b4bfc46db43b2ddfd6244ef',
- configure_pre=[
- "--without-cxx",
- "--without-ada",
- "--without-progs",
- "--without-curses-h",
- "--enable-shared",
- "--with-shared",
- "--datadir=/usr/share",
- "--sysconfdir=/etc",
- "--sharedstatedir=/usr/com",
- "--with-terminfo-dirs=/usr/share/terminfo",
- "--with-default-terminfo-dir=/usr/share/terminfo",
- "--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib"%(getVersion(),),
- "--enable-termcap",
- ],
- patches=[
- "ncurses-5.5.patch",
- ],
- useLDFlags=False,
- install='make && make install DESTDIR=%s && cd %s/usr/local/lib && ln -fs ../../../Library/Frameworks/Python.framework/Versions/%s/lib/lib* .'%(
- shellQuote(os.path.join(WORKDIR, 'libraries')),
- shellQuote(os.path.join(WORKDIR, 'libraries')),
- getVersion(),
- ),
- ),
+ result.extend([
dict(
name="Sleepycat DB 4.7.25",
url="http://download.oracle.com/berkeley-db/db-4.7.25.tar.gz",
@@ -195,91 +212,99 @@ def library_recipes():
'--includedir=/usr/local/include/db4',
]
),
- ]
+ ])
+
+ return result
# Instructions for building packages inside the .mpkg.
-PKG_RECIPES = [
- dict(
- name="PythonFramework",
- long_name="Python Framework",
- source="/Library/Frameworks/Python.framework",
- readme="""\
- This package installs Python.framework, that is the python
- interpreter and the standard library. This also includes Python
- wrappers for lots of Mac OS X API's.
- """,
- postflight="scripts/postflight.framework",
- ),
- dict(
- name="PythonApplications",
- long_name="GUI Applications",
- source="/Applications/Python %(VER)s",
- readme="""\
- This package installs IDLE (an interactive Python IDE),
- Python Launcher and Build Applet (create application bundles
- from python scripts).
-
- It also installs a number of examples and demos.
- """,
- required=False,
- ),
- dict(
- name="PythonUnixTools",
- long_name="UNIX command-line tools",
- source="/usr/local/bin",
- readme="""\
- This package installs the unix tools in /usr/local/bin for
- compatibility with older releases of Python. This package
- is not necessary to use Python.
- """,
- required=False,
- ),
- dict(
- name="PythonDocumentation",
- long_name="Python Documentation",
- topdir="/Library/Frameworks/Python.framework/Versions/%(VER)s/Resources/English.lproj/Documentation",
- source="/pydocs",
- readme="""\
- This package installs the python documentation at a location
- that is useable for pydoc and IDLE. If you have installed Xcode
- it will also install a link to the documentation in
- /Developer/Documentation/Python
- """,
- postflight="scripts/postflight.documentation",
- required=False,
- ),
- dict(
- name="PythonProfileChanges",
- long_name="Shell profile updater",
- readme="""\
- This packages updates your shell profile to make sure that
- the Python tools are found by your shell in preference of
- the system provided Python tools.
-
- If you don't install this package you'll have to add
- "/Library/Frameworks/Python.framework/Versions/%(VER)s/bin"
- to your PATH by hand.
+def pkg_recipes():
+ result = [
+ dict(
+ name="PythonFramework",
+ long_name="Python Framework",
+ source="/Library/Frameworks/Python.framework",
+ readme="""\
+ This package installs Python.framework, that is the python
+ interpreter and the standard library. This also includes Python
+ wrappers for lots of Mac OS X API's.
""",
- postflight="scripts/postflight.patch-profile",
- topdir="/Library/Frameworks/Python.framework",
- source="/empty-dir",
- required=False,
- ),
- dict(
- name="PythonSystemFixes",
- long_name="Fix system Python",
- readme="""\
- This package updates the system python installation on
- Mac OS X 10.3 to ensure that you can build new python extensions
- using that copy of python after installing this version.
- """,
- postflight="../Tools/fixapplepython23.py",
- topdir="/Library/Frameworks/Python.framework",
- source="/empty-dir",
- required=False,
- )
-]
+ postflight="scripts/postflight.framework",
+ ),
+ dict(
+ name="PythonApplications",
+ long_name="GUI Applications",
+ source="/Applications/Python %(VER)s",
+ readme="""\
+ This package installs IDLE (an interactive Python IDE),
+ Python Launcher and Build Applet (create application bundles
+ from python scripts).
+
+ It also installs a number of examples and demos.
+ """,
+ required=False,
+ ),
+ dict(
+ name="PythonUnixTools",
+ long_name="UNIX command-line tools",
+ source="/usr/local/bin",
+ readme="""\
+ This package installs the unix tools in /usr/local/bin for
+ compatibility with older releases of Python. This package
+ is not necessary to use Python.
+ """,
+ required=False,
+ ),
+ dict(
+ name="PythonDocumentation",
+ long_name="Python Documentation",
+ topdir="/Library/Frameworks/Python.framework/Versions/%(VER)s/Resources/English.lproj/Documentation",
+ source="/pydocs",
+ readme="""\
+ This package installs the python documentation at a location
+ that is useable for pydoc and IDLE. If you have installed Xcode
+ it will also install a link to the documentation in
+ /Developer/Documentation/Python
+ """,
+ postflight="scripts/postflight.documentation",
+ required=False,
+ ),
+ dict(
+ name="PythonProfileChanges",
+ long_name="Shell profile updater",
+ readme="""\
+ This packages updates your shell profile to make sure that
+ the Python tools are found by your shell in preference of
+ the system provided Python tools.
+
+ If you don't install this package you'll have to add
+ "/Library/Frameworks/Python.framework/Versions/%(VER)s/bin"
+ to your PATH by hand.
+ """,
+ postflight="scripts/postflight.patch-profile",
+ topdir="/Library/Frameworks/Python.framework",
+ source="/empty-dir",
+ required=False,
+ ),
+ ]
+
+ if DEPTARGET < '10.4':
+ result.append(
+ dict(
+ name="PythonSystemFixes",
+ long_name="Fix system Python",
+ readme="""\
+ This package updates the system python installation on
+ Mac OS X 10.3 to ensure that you can build new python extensions
+ using that copy of python after installing this version.
+ """,
+ postflight="../Tools/fixapplepython23.py",
+ topdir="/Library/Frameworks/Python.framework",
+ source="/empty-dir",
+ required=False,
+ )
+ )
+ return result
def fatal(msg):
"""
@@ -327,10 +352,10 @@ def checkEnvironment():
"""
if platform.system() != 'Darwin':
- fatal("This script should be run on a Mac OS X 10.4 system")
+ fatal("This script should be run on a Mac OS X 10.4 (or later) system")
- if platform.release() <= '8.':
- fatal("This script should be run on a Mac OS X 10.4 system")
+ if int(platform.release().split('.')[0]) <= 8:
+ fatal("This script should be run on a Mac OS X 10.4 (or later) system")
if not os.path.exists(SDKPATH):
fatal("Please install the latest version of Xcode and the %s SDK"%(
@@ -360,6 +385,7 @@ def parseOptions(args=None):
print "Additional arguments"
sys.exit(1)
+ deptarget = None
for k, v in options:
if k in ('-h', '-?', '--help'):
print USAGE
@@ -379,11 +405,16 @@ def parseOptions(args=None):
elif k in ('--dep-target', ):
DEPTARGET=v
+ deptarget=v
elif k in ('--universal-archs', ):
if v in UNIVERSALOPTS:
UNIVERSALARCHS = v
ARCHLIST = universal_opts_map[UNIVERSALARCHS]
+ if deptarget is None:
+ # Select alternate default deployment
+ # target
+ DEPTARGET = default_target_map.get(v, '10.3')
else:
raise NotImplementedError, v
@@ -873,7 +904,7 @@ def makeMpkgPlist(path):
IFPkgFlagPackageLocation='%s-%s.pkg'%(item['name'], getVersion()),
IFPkgFlagPackageSelection='selected'
)
- for item in PKG_RECIPES
+ for item in pkg_recipes()
],
IFPkgFormatVersion=0.10000000149011612,
IFPkgFlagBackgroundScaling="proportional",
@@ -900,7 +931,7 @@ def buildInstaller():
pkgroot = os.path.join(outdir, 'Python.mpkg', 'Contents')
pkgcontents = os.path.join(pkgroot, 'Packages')
os.makedirs(pkgcontents)
- for recipe in PKG_RECIPES:
+ for recipe in pkg_recipes():
packageFromRecipe(pkgcontents, recipe)
rsrcDir = os.path.join(pkgroot, 'Resources')
@@ -948,9 +979,9 @@ def buildDMG():
shutil.rmtree(outdir)
imagepath = os.path.join(outdir,
- 'python-%s-macosx'%(getFullVersion(),))
+ 'python-%s-macosx%s'%(getFullVersion(),DEPTARGET))
if INCLUDE_TIMESTAMP:
- imagepath = imagepath + '%04d-%02d-%02d'%(time.localtime()[:3])
+ imagepath = imagepath + '-%04d-%02d-%02d'%(time.localtime()[:3])
imagepath = imagepath + '.dmg'
os.mkdir(outdir)
@@ -1054,11 +1085,8 @@ def main():
print >> fp, "# By:", pwd.getpwuid(os.getuid()).pw_gecos
fp.close()
-
-
# And copy it to a DMG
buildDMG()
-
if __name__ == "__main__":
main()
diff --git a/Mac/BuildScript/scripts/postflight.framework b/Mac/BuildScript/scripts/postflight.framework
index 2911e27..4c8f6d3 100755
--- a/Mac/BuildScript/scripts/postflight.framework
+++ b/Mac/BuildScript/scripts/postflight.framework
@@ -16,16 +16,6 @@ FWK="/Library/Frameworks/Python.framework/Versions/@PYVER@"
-x badsyntax -x site-packages \
"${FWK}/lib/python${PYVER}"
-"${FWK}/bin/python@PYVER@" -Wi -tt \
- "${FWK}/lib/python${PYVER}/compileall.py" \
- -x badsyntax -x site-packages \
- "${FWK}/Mac/Tools"
-
-"${FWK}/bin/python@PYVER@" -Wi -tt -O \
- "${FWK}/lib/python${PYVER}/compileall.py" \
- -x badsyntax -x site-packages \
- "${FWK}/Mac/Tools"
-
chgrp -R admin "${FWK}"
chmod -R g+w "${FWK}"