blob: 6c08dbea7edc36180debb6786c6179738cbfad24 [file] [log] [blame]
Ned Deily22726702011-01-15 04:44:12 +00001Building a Python Mac OS X distribution
2=======================================
Thomas Wouters477c8d52006-05-27 19:21:47 +00003
Ned Deily22726702011-01-15 04:44:12 +00004The ``build-install.py`` script creates Python distributions, including
5certain third-party libraries as necessary. It builds a complete
Thomas Wouters477c8d52006-05-27 19:21:47 +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 Deily5c0b1ca2012-08-24 19:57:33 -070011As of Python 3.3.0, PSF practice is to build two installer variants
12for each release.
Thomas Wouters477c8d52006-05-27 19:21:47 +000013
Ned Deily22726702011-01-15 04:44:12 +0000141. 32-bit-only, i386 and PPC universal, capable on running on all machines
Ned Deily5c0b1ca2012-08-24 19:57:33 -070015 supported by Mac OS X 10.5 through (at least) 10.8::
Thomas Wouters0e3f5912006-08-11 14:57:12 +000016
Ned Deily5c0b1ca2012-08-24 19:57:33 -070017 /usr/bin/python build-installer.py \
18 --sdk-path=/Developer/SDKs/MacOSX10.5.sdk \
19 --universal-archs=32-bit \
20 --dep-target=10.5
21
22 - builds the following third-party libraries
23
24 * NCurses 5.9 (http://bugs.python.org/issue15037)
25 * SQLite 3.7.13
26 * XZ 5.0.3
27
28 - uses system-supplied versions of third-party libraries
29
30 * readline module links with Apple BSD editline (libedit)
31
32 - requires ActiveState ``Tcl/Tk 8.4`` (currently 8.4.19) to be installed for building
33
34 - recommended build environment:
35
36 * Mac OS X 10.5.8 Intel or PPC
37 * Xcode 3.1.4
38 * ``MacOSX10.5`` SDK
39 * ``MACOSX_DEPLOYMENT_TARGET=10.5``
40 * Apple ``gcc-4.2``
41 * system Python 2.5 for documentation build with Sphinx
42
43 - alternate build environments:
44
45 * Mac OS X 10.6.8 with Xcode 3.2.6
46 - need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
47 * Note Xcode 4.* does not support building for PPC so cannot be used for this build
48
492. 64-bit / 32-bit, x86_64 and i386 universal, for OS X 10.6 (and later)::
50
51 /usr/bin/python build-installer.py \
52 --sdk-path=/Developer/SDKs/MacOSX10.6.sdk \
53 --universal-archs=intel \
54 --dep-target=10.6
55
56 - builds the following third-party libraries
57
58 * NCurses 5.9 (http://bugs.python.org/issue15037)
59 * SQLite 3.7.13
Ned Deily981b6932013-09-06 01:18:36 -070060 * Tcl 8.5.14
61 * Tk 8.5.14
Ned Deily5c0b1ca2012-08-24 19:57:33 -070062 * XZ 5.0.3
63
64 - uses system-supplied versions of third-party libraries
65
66 * readline module links with Apple BSD editline (libedit)
67
Ned Deily981b6932013-09-06 01:18:36 -070068 - requires ActiveState Tcl/Tk 8.5.14 (or later) to be installed for building
69
70 * Beginning with Python 3.4 alpha2, this installer now includes its own
71 private copy of Tcl and Tk 8.5.14 libraries and thus is no longer
72 dependent on the buggy releases of Aqua Cocoa Tk 8.5 shipped with
73 OS X 10.6 or on installing a newer third-party version of Tcl/Tk
74 in /Library/Frameworks, such as from ActiveState. Because this
75 is a new feature, it should be considered somewhat experimental and
76 subject to change prior to the final release of Python 3.4. If it
77 is necessary to fallback to using a third-party Tcl/Tk because of
78 a problem with the private Tcl/Tk, there is a backup version of
79 the _tkinter extension included which will dynamically link to
80 Tcl and Tk frameworks in /Library/Frameworks as in previous releases.
81 To enable (for all users of this Python 3.4)::
82
83 sudo bash
84 cd /Library/Frameworks/Python.framework/Versions/3.4
85 cd ./lib/python3.4/lib-dynload
86 cp -p _tkinter.so.framework _tkinter.so
87 exit
88
89 To restore using Python's private versions of Tcl and Tk::
90
91 sudo bash
92 cd /Library/Frameworks/Python.framework/Versions/3.4
93 cd ./lib/python3.4/lib-dynload
94 cp -p _tkinter.so.private _tkinter.so
95 exit
Ned Deily5c0b1ca2012-08-24 19:57:33 -070096
97 - recommended build environment:
98
99 * Mac OS X 10.6.8 (or later)
100 * Xcode 3.2.6
101 * ``MacOSX10.6`` SDK
102 * ``MACOSX_DEPLOYMENT_TARGET=10.6``
103 * Apple ``gcc-4.2``
104 * system Python 2.6 for documentation build with Sphinx
105
106 - alternate build environments:
107
108 * none. Xcode 4.x currently supplies two C compilers.
109 ``llvm-gcc-4.2.1`` has been found to miscompile Python 3.3.x and
110 produce a non-functional Python executable. As it appears to be
111 considered a migration aid by Apple and is not likely to be fixed,
112 its use should be avoided. The other compiler, ``clang``, has been
113 undergoing rapid development. While it appears to have become
Ned Deily981b6932013-09-06 01:18:36 -0700114 production-ready in the most recent Xcode 4 releases (Xcode 4.6.3
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700115 as of this writing), there are still some open issues when
116 building Python and there has not yet been the level of exposure in
117 production environments that the Xcode 3 gcc-4.2 compiler has had.
118
119
120* For Python 2.7.x and 3.2.x, the 32-bit-only installer was configured to
121 support Mac OS X 10.3.9 through (at least) 10.6. Because it is
122 believed that there are few systems still running OS X 10.3 or 10.4
123 and because it has become increasingly difficult to test and
124 support the differences in these earlier systems, as of Python 3.3.0 the PSF
125 32-bit installer no longer supports them. For reference in building such
126 an installer yourself, the details are::
127
128 /usr/bin/python build-installer.py \
Ned Deily22726702011-01-15 04:44:12 +0000129 --sdk-path=/Developer/SDKs/MacOSX10.4u.sdk \
130 --universal-archs=32-bit \
131 --dep-target=10.3
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000132
Ned Deily22726702011-01-15 04:44:12 +0000133 - builds the following third-party libraries
134
135 * Bzip2
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700136 * NCurses
Ned Deily22726702011-01-15 04:44:12 +0000137 * GNU Readline (GPL)
138 * SQLite 3
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700139 * XZ
140 * Zlib 1.2.3
Ned Deily22726702011-01-15 04:44:12 +0000141 * Oracle Sleepycat DB 4.8 (Python 2.x only)
142
143 - requires ActiveState ``Tcl/Tk 8.4`` (currently 8.4.19) to be installed for building
144
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700145 - recommended build environment:
Ned Deily22726702011-01-15 04:44:12 +0000146
147 * Mac OS X 10.5.8 PPC or Intel
148 * Xcode 3.1.4 (or later)
149 * ``MacOSX10.4u`` SDK (later SDKs do not support PPC G3 processors)
150 * ``MACOSX_DEPLOYMENT_TARGET=10.3``
151 * Apple ``gcc-4.0``
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700152 * system Python 2.5 for documentation build with Sphinx
Ned Deily22726702011-01-15 04:44:12 +0000153
154 - alternate build environments:
155
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700156 * Mac OS X 10.6.8 with Xcode 3.2.6
Ned Deily22726702011-01-15 04:44:12 +0000157 - need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
158
Ned Deily22726702011-01-15 04:44:12 +0000159
160
161General Prerequisites
162---------------------
163
164* No Fink (in ``/sw``) or MacPorts (in ``/opt/local``) or other local
165 libraries or utilities (in ``/usr/local``) as they could
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000166 interfere with the build.
167
Ned Deily22726702011-01-15 04:44:12 +0000168* The documentation for the release is built using Sphinx
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000169 because it is included in the installer.
170
Ned Deily22726702011-01-15 04:44:12 +0000171* It is safest to start each variant build with an empty source directory
172 populated with a fresh copy of the untarred source.
173
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700174* It is recommended that you remove any existing installed version of the
175 Python being built::
176
177 sudo rm -rf /Library/Frameworks/Python.framework/Versions/n.n
178
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000179
180The Recipe
181----------
182
Ned Deily22726702011-01-15 04:44:12 +0000183Here are the steps you need to follow to build a Python installer:
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000184
Ned Deily22726702011-01-15 04:44:12 +0000185* Run ``build-installer.py``. Optionally you can pass a number of arguments
186 to specify locations of various files. Please see the top of
Thomas Wouters477c8d52006-05-27 19:21:47 +0000187 ``build-installer.py`` for its usage.
Thomas Wouters477c8d52006-05-27 19:21:47 +0000188
Ned Deily22726702011-01-15 04:44:12 +0000189 Running this script takes some time, it will not only build Python itself
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000190 but also some 3th-party libraries that are needed for extensions.
191
192* When done the script will tell you where the DMG image is (by default
193 somewhere in ``/tmp/_py``).
194
Ned Deily22726702011-01-15 04:44:12 +0000195Building other universal installers
196...................................
Ronald Oussoren1943f862009-03-30 19:39:14 +0000197
198It is also possible to build a 4-way universal installer that runs on
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700199OS X 10.5 Leopard or later::
Ronald Oussoren1943f862009-03-30 19:39:14 +0000200
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700201 /usr/bin/python /build-installer.py \
Ned Deily22726702011-01-15 04:44:12 +0000202 --dep-target=10.5
203 --universal-archs=all
204 --sdk-path=/Developer/SDKs/MacOSX10.5.sdk
Ronald Oussoren1943f862009-03-30 19:39:14 +0000205
Ned Deily22726702011-01-15 04:44:12 +0000206This requires that the deployment target is 10.5, and hence
207also that you are building on at least OS X 10.5. 4-way includes
208``i386``, ``x86_64``, ``ppc``, and ``ppc64`` (G5). ``ppc64`` executable
209variants can only be run on G5 machines running 10.5. Note that,
210while OS X 10.6 is only supported on Intel-based machines, it is possible
211to run ``ppc`` (32-bit) executables unmodified thanks to the Rosetta ppc
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700212emulation in OS X 10.5 and 10.6. The 4-way installer variant must be
213built with Xcode 3. It is not regularly built or tested.
Ned Deily22726702011-01-15 04:44:12 +0000214
215Other ``--universal-archs`` options are ``64-bit`` (``x86_64``, ``ppc64``),
216and ``3-way`` (``ppc``, ``i386``, ``x86_64``). None of these options
217are regularly exercised; use at your own risk.
218
Ronald Oussoren1943f862009-03-30 19:39:14 +0000219
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000220Testing
221-------
222
Ned Deily22726702011-01-15 04:44:12 +0000223Ideally, the resulting binaries should be installed and the test suite run
224on all supported OS X releases and architectures. As a practical matter,
225that is generally not possible. At a minimum, variant 1 should be run on
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700226a PPC G4 system with OS X 10.5 and at least one Intel system running OS X
22710.8, 10.7, 10.6, or 10.5. Variant 2 should be run on 10.8, 10.7, and 10.6
228systems in both 32-bit and 64-bit modes.::
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000229
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700230 /usr/local/bin/pythonn.n -m test -w -u all,-largefile
231 /usr/local/bin/pythonn.n-32 -m test -w -u all
Ned Deily22726702011-01-15 04:44:12 +0000232
233Certain tests will be skipped and some cause the interpreter to fail
234which will likely generate ``Python quit unexpectedly`` alert messages
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700235to be generated at several points during a test run. These are normal
236during testing and can be ignored.
237
238It is also recommend to launch IDLE and verify that it is at least
239functional. Double-click on the IDLE app icon in ``/Applications/Pythonn.n``.
240It should also be tested from the command line::
241
242 /usr/local/bin/idlen.n
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000243