blob: 7c2a0bbb9dd1f8072e651df175ca3911afddd885 [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 Deily78cceec2014-05-17 14:29:22 -070011For Python 2.7.x and 3.x, PSF practice is to build two installer variants
Ned Deilye1c9794952013-01-29 00:07:46 -080012for each release.
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +000013
Ned Deily78cceec2014-05-17 14:29:22 -070014Beginning with Python 2.7.8, we plan to drop binary installer support for
15Mac OS X 10.3.9 and 10.4.x systems. To ease the transition, for Python 2.7.7
16only there will be three installers provided:
17
181. DEPRECATED - 32-bit-only, i386 and PPC universal, capable on running on all
19 machines supported by Mac OS X 10.3.9 through (at least) 10.9::
Ronald Oussoren5fb9c202006-08-02 06:10:10 +000020
Ned Deilye1c9794952013-01-29 00:07:46 -080021 /usr/bin/python build-installer.py \
Ned Deily53c460d2011-01-30 01:43:40 +000022 --sdk-path=/Developer/SDKs/MacOSX10.4u.sdk \
23 --universal-archs=32-bit \
24 --dep-target=10.3
Ronald Oussoren5fb9c202006-08-02 06:10:10 +000025
Ned Deily53c460d2011-01-30 01:43:40 +000026 - builds the following third-party libraries
27
28 * Bzip2
Ned Deily53c460d2011-01-30 01:43:40 +000029 * NCurses
Ned Deilye1c9794952013-01-29 00:07:46 -080030 * GNU Readline (GPL)
31 * SQLite 3.7.13
32 * Zlib 1.2.3
Ned Deily53c460d2011-01-30 01:43:40 +000033 * Oracle Sleepycat DB 4.8 (Python 2.x only)
34
35 - requires ActiveState ``Tcl/Tk 8.4`` (currently 8.4.19) to be installed for building
36
Ned Deilye1c9794952013-01-29 00:07:46 -080037 - recommended build environment:
Ned Deily53c460d2011-01-30 01:43:40 +000038
39 * Mac OS X 10.5.8 PPC or Intel
Ned Deilye1c9794952013-01-29 00:07:46 -080040 * Xcode 3.1.4
Ned Deily53c460d2011-01-30 01:43:40 +000041 * ``MacOSX10.4u`` SDK (later SDKs do not support PPC G3 processors)
42 * ``MACOSX_DEPLOYMENT_TARGET=10.3``
43 * Apple ``gcc-4.0``
Ned Deilye1c9794952013-01-29 00:07:46 -080044 * system Python 2.5 for documentation build with Sphinx
Ned Deily53c460d2011-01-30 01:43:40 +000045
46 - alternate build environments:
47
Ned Deilye1c9794952013-01-29 00:07:46 -080048 * Mac OS X 10.6.8 with Xcode 3.2.6
Ned Deily53c460d2011-01-30 01:43:40 +000049 - need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
Ned Deilye1c9794952013-01-29 00:07:46 -080050 * Note Xcode 4.* does not support building for PPC so cannot be used for this build
51
Ned Deily78cceec2014-05-17 14:29:22 -0700522. 32-bit-only, i386 and PPC universal, capable on running on all machines
53 supported by Mac OS X 10.5 through (at least) 10.9::
Ned Deily53c460d2011-01-30 01:43:40 +000054
Ned Deily78cceec2014-05-17 14:29:22 -070055 /usr/bin/python build-installer.py \
56 --sdk-path=/Developer/SDKs/MacOSX10.5.sdk \
57 --universal-archs=32-bit \
58 --dep-target=10.5
59
60 - builds the following third-party libraries
61
62 * NCurses 5.9
63 * SQLite 3.7.13
64 * Oracle Sleepycat DB 4.8 (Python 2.x only)
65
66 - uses system-supplied versions of third-party libraries
67
68 * readline module links with Apple BSD editline (libedit)
69
70 - requires ActiveState ``Tcl/Tk 8.4`` (currently 8.4.20) to be installed for building
71
72 - recommended build environment:
73
74 * Mac OS X 10.5.8 Intel or PPC
75 * Xcode 3.1.4
76 * ``MacOSX10.5`` SDK
77 * ``MACOSX_DEPLOYMENT_TARGET=10.5``
78 * Apple ``gcc-4.2``
79 * system Python 2.5+ for documentation build with Sphinx
80
81 - alternate build environments:
82
83 * Mac OS X 10.6.8 with Xcode 3.2.6
84 - need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
85 * Note Xcode 4.* does not support building for PPC so cannot be used for this build
86
873. 64-bit / 32-bit, x86_64 and i386 universal, for OS X 10.6 (and later)::
Ned Deily53c460d2011-01-30 01:43:40 +000088
Ned Deilye1c9794952013-01-29 00:07:46 -080089 /usr/bin/python build-installer.py \
Ned Deily53c460d2011-01-30 01:43:40 +000090 --sdk-path=/Developer/SDKs/MacOSX10.6.sdk \
91 --universal-archs=intel \
92 --dep-target=10.6
93
Ned Deilye1c9794952013-01-29 00:07:46 -080094 - builds the following third-party libraries
95
96 * NCurses 5.9 (http://bugs.python.org/issue15037)
97 * SQLite 3.7.13
Ned Deily78cceec2014-05-17 14:29:22 -070098 * Oracle Sleepycat DB 4.8 (Python 2.x only)
Ned Deilye1c9794952013-01-29 00:07:46 -080099
Ned Deily53c460d2011-01-30 01:43:40 +0000100 - uses system-supplied versions of third-party libraries
Ned Deilye1c9794952013-01-29 00:07:46 -0800101
Ned Deily53c460d2011-01-30 01:43:40 +0000102 * readline module links with Apple BSD editline (libedit)
Ned Deily53c460d2011-01-30 01:43:40 +0000103
Ned Deily78cceec2014-05-17 14:29:22 -0700104 - requires ActiveState Tcl/Tk 8.5.15 (or later) to be installed for building
Ned Deily53c460d2011-01-30 01:43:40 +0000105
Ned Deilye1c9794952013-01-29 00:07:46 -0800106 - recommended build environment:
107
108 * Mac OS X 10.6.8 (or later)
109 * Xcode 3.2.6
Ned Deily53c460d2011-01-30 01:43:40 +0000110 * ``MacOSX10.6`` SDK
111 * ``MACOSX_DEPLOYMENT_TARGET=10.6``
112 * Apple ``gcc-4.2``
Ned Deilye1c9794952013-01-29 00:07:46 -0800113 * system Python 2.6 for documentation build with Sphinx
Ned Deily53c460d2011-01-30 01:43:40 +0000114
115 - alternate build environments:
116
Ned Deilye1c9794952013-01-29 00:07:46 -0800117 * none. Xcode 4.x currently supplies two C compilers.
118 ``llvm-gcc-4.2.1`` has been found to miscompile Python 3.3.x and
119 produce a non-functional Python executable. As it appears to be
120 considered a migration aid by Apple and is not likely to be fixed,
121 its use should be avoided. The other compiler, ``clang``, has been
122 undergoing rapid development. While it appears to have become
Ned Deily78cceec2014-05-17 14:29:22 -0700123 production-ready in the most recent Xcode 5 releases, the versions
124 available on the deprecated Xcode 4.x for 10.6 were early releases
125 and did not receive the level of exposure in production environments
126 that the Xcode 3 gcc-4.2 compiler has had.
Ned Deily53c460d2011-01-30 01:43:40 +0000127
128
129General Prerequisites
130---------------------
131
132* No Fink (in ``/sw``) or MacPorts (in ``/opt/local``) or other local
133 libraries or utilities (in ``/usr/local``) as they could
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000134 interfere with the build.
135
Ned Deily53c460d2011-01-30 01:43:40 +0000136* The documentation for the release is built using Sphinx
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000137 because it is included in the installer.
138
Ned Deily53c460d2011-01-30 01:43:40 +0000139* It is safest to start each variant build with an empty source directory
140 populated with a fresh copy of the untarred source.
141
Ned Deilye1c9794952013-01-29 00:07:46 -0800142* It is recommended that you remove any existing installed version of the
143 Python being built::
144
145 sudo rm -rf /Library/Frameworks/Python.framework/Versions/n.n
146
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000147
148The Recipe
149----------
150
Ned Deily53c460d2011-01-30 01:43:40 +0000151Here are the steps you need to follow to build a Python installer:
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000152
Ned Deily53c460d2011-01-30 01:43:40 +0000153* Run ``build-installer.py``. Optionally you can pass a number of arguments
154 to specify locations of various files. Please see the top of
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +0000155 ``build-installer.py`` for its usage.
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +0000156
Ned Deily53c460d2011-01-30 01:43:40 +0000157 Running this script takes some time, it will not only build Python itself
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000158 but also some 3th-party libraries that are needed for extensions.
159
160* When done the script will tell you where the DMG image is (by default
161 somewhere in ``/tmp/_py``).
162
Ned Deily53c460d2011-01-30 01:43:40 +0000163Building other universal installers
164...................................
Ronald Oussoren508282e2009-03-30 19:34:51 +0000165
166It is also possible to build a 4-way universal installer that runs on
Ned Deilye1c9794952013-01-29 00:07:46 -0800167OS X 10.5 Leopard or later::
Ronald Oussoren508282e2009-03-30 19:34:51 +0000168
Ned Deilye1c9794952013-01-29 00:07:46 -0800169 /usr/bin/python /build-installer.py \
Ned Deily53c460d2011-01-30 01:43:40 +0000170 --dep-target=10.5
171 --universal-archs=all
172 --sdk-path=/Developer/SDKs/MacOSX10.5.sdk
Ronald Oussoren508282e2009-03-30 19:34:51 +0000173
Ned Deily53c460d2011-01-30 01:43:40 +0000174This requires that the deployment target is 10.5, and hence
175also that you are building on at least OS X 10.5. 4-way includes
176``i386``, ``x86_64``, ``ppc``, and ``ppc64`` (G5). ``ppc64`` executable
177variants can only be run on G5 machines running 10.5. Note that,
178while OS X 10.6 is only supported on Intel-based machines, it is possible
179to run ``ppc`` (32-bit) executables unmodified thanks to the Rosetta ppc
Ned Deilye1c9794952013-01-29 00:07:46 -0800180emulation in OS X 10.5 and 10.6. The 4-way installer variant must be
181built with Xcode 3. It is not regularly built or tested.
Ned Deily53c460d2011-01-30 01:43:40 +0000182
183Other ``--universal-archs`` options are ``64-bit`` (``x86_64``, ``ppc64``),
184and ``3-way`` (``ppc``, ``i386``, ``x86_64``). None of these options
185are regularly exercised; use at your own risk.
186
Ronald Oussoren508282e2009-03-30 19:34:51 +0000187
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000188Testing
189-------
190
Ned Deily53c460d2011-01-30 01:43:40 +0000191Ideally, the resulting binaries should be installed and the test suite run
192on all supported OS X releases and architectures. As a practical matter,
193that is generally not possible. At a minimum, variant 1 should be run on
Ned Deilye1c9794952013-01-29 00:07:46 -0800194a PPC G4 system with OS X 10.5 and at least one Intel system running OS X
19510.8, 10.7, 10.6, or 10.5. Variant 2 should be run on 10.8, 10.7, and 10.6
196systems in both 32-bit and 64-bit modes.::
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000197
Ned Deilye1c9794952013-01-29 00:07:46 -0800198 /usr/local/bin/pythonn.n -m test -w -u all,-largefile
199 /usr/local/bin/pythonn.n-32 -m test -w -u all
Ned Deily53c460d2011-01-30 01:43:40 +0000200
201Certain tests will be skipped and some cause the interpreter to fail
202which will likely generate ``Python quit unexpectedly`` alert messages
Ned Deilye1c9794952013-01-29 00:07:46 -0800203to be generated at several points during a test run. These are normal
204during testing and can be ignored.
205
206It is also recommend to launch IDLE and verify that it is at least
207functional. Double-click on the IDLE app icon in ``/Applications/Pythonn.n``.
208It should also be tested from the command line::
209
210 /usr/local/bin/idlen.n
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000211