blob: ecf62bb382aedabf7954952ba849afbf3ead258a [file] [log] [blame]
Ned Deily53c460d2011-01-30 01:43:40 +00001Building a Python Mac OS X distribution
2=======================================
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +00003
Ned Deily53c460d2011-01-30 01:43:40 +00004The ``build-install.py`` script creates Python distributions, including
5certain third-party libraries as necessary. It builds a complete
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +00006framework-based Python out-of-tree, installs it in a funny place with
7$DESTROOT, massages that installation to remove .pyc files and such, creates
8an Installer package from the installation plus other files in ``resources``
9and ``scripts`` and placed that on a ``.dmg`` disk image.
10
Ned Deilye1c9794952013-01-29 00:07:46 -080011For Python 2.7.x and 3.2.x, PSF practice is to build two installer variants
12for each release.
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +000013
Ned Deily53c460d2011-01-30 01:43:40 +0000141. 32-bit-only, i386 and PPC universal, capable on running on all machines
Ned Deilye1c9794952013-01-29 00:07:46 -080015 supported by Mac OS X 10.3.9 through (at least) 10.8::
Ronald Oussoren5fb9c202006-08-02 06:10:10 +000016
Ned Deilye1c9794952013-01-29 00:07:46 -080017 /usr/bin/python build-installer.py \
Ned Deily53c460d2011-01-30 01:43:40 +000018 --sdk-path=/Developer/SDKs/MacOSX10.4u.sdk \
19 --universal-archs=32-bit \
20 --dep-target=10.3
Ronald Oussoren5fb9c202006-08-02 06:10:10 +000021
Ned Deily53c460d2011-01-30 01:43:40 +000022 - builds the following third-party libraries
23
24 * Bzip2
Ned Deily53c460d2011-01-30 01:43:40 +000025 * NCurses
Ned Deilye1c9794952013-01-29 00:07:46 -080026 * GNU Readline (GPL)
27 * SQLite 3.7.13
28 * Zlib 1.2.3
Ned Deily53c460d2011-01-30 01:43:40 +000029 * Oracle Sleepycat DB 4.8 (Python 2.x only)
30
31 - requires ActiveState ``Tcl/Tk 8.4`` (currently 8.4.19) to be installed for building
32
Ned Deilye1c9794952013-01-29 00:07:46 -080033 - recommended build environment:
Ned Deily53c460d2011-01-30 01:43:40 +000034
35 * Mac OS X 10.5.8 PPC or Intel
Ned Deilye1c9794952013-01-29 00:07:46 -080036 * Xcode 3.1.4
Ned Deily53c460d2011-01-30 01:43:40 +000037 * ``MacOSX10.4u`` SDK (later SDKs do not support PPC G3 processors)
38 * ``MACOSX_DEPLOYMENT_TARGET=10.3``
39 * Apple ``gcc-4.0``
Ned Deilye1c9794952013-01-29 00:07:46 -080040 * system Python 2.5 for documentation build with Sphinx
Ned Deily53c460d2011-01-30 01:43:40 +000041
42 - alternate build environments:
43
Ned Deilye1c9794952013-01-29 00:07:46 -080044 * Mac OS X 10.6.8 with Xcode 3.2.6
Ned Deily53c460d2011-01-30 01:43:40 +000045 - need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
Ned Deilye1c9794952013-01-29 00:07:46 -080046 * Note Xcode 4.* does not support building for PPC so cannot be used for this build
47
Ned Deily53c460d2011-01-30 01:43:40 +000048
492. 64-bit / 32-bit, x86_64 and i386 universal, for OS X 10.6 (and later)::
50
Ned Deilye1c9794952013-01-29 00:07:46 -080051 /usr/bin/python build-installer.py \
Ned Deily53c460d2011-01-30 01:43:40 +000052 --sdk-path=/Developer/SDKs/MacOSX10.6.sdk \
53 --universal-archs=intel \
54 --dep-target=10.6
55
Ned Deilye1c9794952013-01-29 00:07:46 -080056 - builds the following third-party libraries
57
58 * NCurses 5.9 (http://bugs.python.org/issue15037)
59 * SQLite 3.7.13
60
Ned Deily53c460d2011-01-30 01:43:40 +000061 - uses system-supplied versions of third-party libraries
Ned Deilye1c9794952013-01-29 00:07:46 -080062
Ned Deily53c460d2011-01-30 01:43:40 +000063 * readline module links with Apple BSD editline (libedit)
64 * builds Oracle Sleepycat DB 4.8 (Python 2.x only)
65
Ned Deily52c48fd2013-11-05 02:40:03 -080066 - requires ActiveState Tcl/Tk 8.5.9 (or later) to be installed for building
Ned Deily53c460d2011-01-30 01:43:40 +000067
Ned Deilye1c9794952013-01-29 00:07:46 -080068 - recommended build environment:
69
70 * Mac OS X 10.6.8 (or later)
71 * Xcode 3.2.6
Ned Deily53c460d2011-01-30 01:43:40 +000072 * ``MacOSX10.6`` SDK
73 * ``MACOSX_DEPLOYMENT_TARGET=10.6``
74 * Apple ``gcc-4.2``
Ned Deilye1c9794952013-01-29 00:07:46 -080075 * system Python 2.6 for documentation build with Sphinx
Ned Deily53c460d2011-01-30 01:43:40 +000076
77 - alternate build environments:
78
Ned Deilye1c9794952013-01-29 00:07:46 -080079 * none. Xcode 4.x currently supplies two C compilers.
80 ``llvm-gcc-4.2.1`` has been found to miscompile Python 3.3.x and
81 produce a non-functional Python executable. As it appears to be
82 considered a migration aid by Apple and is not likely to be fixed,
83 its use should be avoided. The other compiler, ``clang``, has been
84 undergoing rapid development. While it appears to have become
85 production-ready in the most recent Xcode 4 releases (Xcode 4.5.x
86 as of this writing), there are still some open issues when
87 building Python and there has not yet been the level of exposure in
88 production environments that the Xcode 3 gcc-4.2 compiler has had.
Ned Deily53c460d2011-01-30 01:43:40 +000089
90
91General Prerequisites
92---------------------
93
94* No Fink (in ``/sw``) or MacPorts (in ``/opt/local``) or other local
95 libraries or utilities (in ``/usr/local``) as they could
Ronald Oussoren5fb9c202006-08-02 06:10:10 +000096 interfere with the build.
97
Ned Deily53c460d2011-01-30 01:43:40 +000098* The documentation for the release is built using Sphinx
Ronald Oussoren5fb9c202006-08-02 06:10:10 +000099 because it is included in the installer.
100
Ned Deily53c460d2011-01-30 01:43:40 +0000101* It is safest to start each variant build with an empty source directory
102 populated with a fresh copy of the untarred source.
103
Ned Deilye1c9794952013-01-29 00:07:46 -0800104* It is recommended that you remove any existing installed version of the
105 Python being built::
106
107 sudo rm -rf /Library/Frameworks/Python.framework/Versions/n.n
108
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000109
110The Recipe
111----------
112
Ned Deily53c460d2011-01-30 01:43:40 +0000113Here are the steps you need to follow to build a Python installer:
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000114
Ned Deily53c460d2011-01-30 01:43:40 +0000115* Run ``build-installer.py``. Optionally you can pass a number of arguments
116 to specify locations of various files. Please see the top of
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +0000117 ``build-installer.py`` for its usage.
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +0000118
Ned Deily53c460d2011-01-30 01:43:40 +0000119 Running this script takes some time, it will not only build Python itself
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000120 but also some 3th-party libraries that are needed for extensions.
121
122* When done the script will tell you where the DMG image is (by default
123 somewhere in ``/tmp/_py``).
124
Ned Deily53c460d2011-01-30 01:43:40 +0000125Building other universal installers
126...................................
Ronald Oussoren508282e2009-03-30 19:34:51 +0000127
128It is also possible to build a 4-way universal installer that runs on
Ned Deilye1c9794952013-01-29 00:07:46 -0800129OS X 10.5 Leopard or later::
Ronald Oussoren508282e2009-03-30 19:34:51 +0000130
Ned Deilye1c9794952013-01-29 00:07:46 -0800131 /usr/bin/python /build-installer.py \
Ned Deily53c460d2011-01-30 01:43:40 +0000132 --dep-target=10.5
133 --universal-archs=all
134 --sdk-path=/Developer/SDKs/MacOSX10.5.sdk
Ronald Oussoren508282e2009-03-30 19:34:51 +0000135
Ned Deily53c460d2011-01-30 01:43:40 +0000136This requires that the deployment target is 10.5, and hence
137also that you are building on at least OS X 10.5. 4-way includes
138``i386``, ``x86_64``, ``ppc``, and ``ppc64`` (G5). ``ppc64`` executable
139variants can only be run on G5 machines running 10.5. Note that,
140while OS X 10.6 is only supported on Intel-based machines, it is possible
141to run ``ppc`` (32-bit) executables unmodified thanks to the Rosetta ppc
Ned Deilye1c9794952013-01-29 00:07:46 -0800142emulation in OS X 10.5 and 10.6. The 4-way installer variant must be
143built with Xcode 3. It is not regularly built or tested.
Ned Deily53c460d2011-01-30 01:43:40 +0000144
145Other ``--universal-archs`` options are ``64-bit`` (``x86_64``, ``ppc64``),
146and ``3-way`` (``ppc``, ``i386``, ``x86_64``). None of these options
147are regularly exercised; use at your own risk.
148
Ronald Oussoren508282e2009-03-30 19:34:51 +0000149
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000150Testing
151-------
152
Ned Deily53c460d2011-01-30 01:43:40 +0000153Ideally, the resulting binaries should be installed and the test suite run
154on all supported OS X releases and architectures. As a practical matter,
155that is generally not possible. At a minimum, variant 1 should be run on
Ned Deilye1c9794952013-01-29 00:07:46 -0800156a PPC G4 system with OS X 10.5 and at least one Intel system running OS X
15710.8, 10.7, 10.6, or 10.5. Variant 2 should be run on 10.8, 10.7, and 10.6
158systems in both 32-bit and 64-bit modes.::
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000159
Ned Deilye1c9794952013-01-29 00:07:46 -0800160 /usr/local/bin/pythonn.n -m test -w -u all,-largefile
161 /usr/local/bin/pythonn.n-32 -m test -w -u all
Ned Deily53c460d2011-01-30 01:43:40 +0000162
163Certain tests will be skipped and some cause the interpreter to fail
164which will likely generate ``Python quit unexpectedly`` alert messages
Ned Deilye1c9794952013-01-29 00:07:46 -0800165to be generated at several points during a test run. These are normal
166during testing and can be ignored.
167
168It is also recommend to launch IDLE and verify that it is at least
169functional. Double-click on the IDLE app icon in ``/Applications/Pythonn.n``.
170It should also be tested from the command line::
171
172 /usr/local/bin/idlen.n
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000173