blob: 9d1f59c2b18645f4be4bdba96169529de303ba3b [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 Deily5b3582c2013-10-25 00:41:46 -070060 * Tcl 8.5.15
61 * Tk 8.5.15
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 Deily5b3582c2013-10-25 00:41:46 -070068 - requires ActiveState Tcl/Tk 8.5.14 (or later) to be installed for building
69
70 * Beginning with Python 3.3.3, this installer now includes its own
71 private copy of Tcl and Tk 8.5.15 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. If it is
75 necessary to fallback to using a third-party Tcl/Tk because of
76 a problem with the private Tcl/Tk, there is a backup version of
77 the _tkinter extension included which will dynamically link to
78 Tcl and Tk frameworks in /Library/Frameworks as in previous releases.
79 To enable (for all users of this Python 3.3)::
80
81 sudo bash
82 cd /Library/Frameworks/Python.framework/Versions/3.3
83 cd ./lib/python3.3/lib-dynload
84 cp -p _tkinter.so.framework _tkinter.so
85 exit
86
87 To restore using Python's private versions of Tcl and Tk::
88
89 sudo bash
90 cd /Library/Frameworks/Python.framework/Versions/3.3
91 cd ./lib/python3.3/lib-dynload
92 cp -p _tkinter.so.private _tkinter.so
93 exit
Ned Deily5c0b1ca2012-08-24 19:57:33 -070094
95 - recommended build environment:
96
97 * Mac OS X 10.6.8 (or later)
98 * Xcode 3.2.6
99 * ``MacOSX10.6`` SDK
100 * ``MACOSX_DEPLOYMENT_TARGET=10.6``
101 * Apple ``gcc-4.2``
102 * system Python 2.6 for documentation build with Sphinx
103
104 - alternate build environments:
105
106 * none. Xcode 4.x currently supplies two C compilers.
107 ``llvm-gcc-4.2.1`` has been found to miscompile Python 3.3.x and
108 produce a non-functional Python executable. As it appears to be
109 considered a migration aid by Apple and is not likely to be fixed,
110 its use should be avoided. The other compiler, ``clang``, has been
111 undergoing rapid development. While it appears to have become
Ned Deily5b3582c2013-10-25 00:41:46 -0700112 production-ready in the most recent Xcode 4 releases (Xcode 4.6.3
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700113 as of this writing), there are still some open issues when
114 building Python and there has not yet been the level of exposure in
115 production environments that the Xcode 3 gcc-4.2 compiler has had.
116
117
118* For Python 2.7.x and 3.2.x, the 32-bit-only installer was configured to
119 support Mac OS X 10.3.9 through (at least) 10.6. Because it is
120 believed that there are few systems still running OS X 10.3 or 10.4
121 and because it has become increasingly difficult to test and
122 support the differences in these earlier systems, as of Python 3.3.0 the PSF
123 32-bit installer no longer supports them. For reference in building such
124 an installer yourself, the details are::
125
126 /usr/bin/python build-installer.py \
Ned Deily22726702011-01-15 04:44:12 +0000127 --sdk-path=/Developer/SDKs/MacOSX10.4u.sdk \
128 --universal-archs=32-bit \
129 --dep-target=10.3
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000130
Ned Deily22726702011-01-15 04:44:12 +0000131 - builds the following third-party libraries
132
133 * Bzip2
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700134 * NCurses
Ned Deily22726702011-01-15 04:44:12 +0000135 * GNU Readline (GPL)
136 * SQLite 3
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700137 * XZ
138 * Zlib 1.2.3
Ned Deily22726702011-01-15 04:44:12 +0000139 * Oracle Sleepycat DB 4.8 (Python 2.x only)
140
141 - requires ActiveState ``Tcl/Tk 8.4`` (currently 8.4.19) to be installed for building
142
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700143 - recommended build environment:
Ned Deily22726702011-01-15 04:44:12 +0000144
145 * Mac OS X 10.5.8 PPC or Intel
146 * Xcode 3.1.4 (or later)
147 * ``MacOSX10.4u`` SDK (later SDKs do not support PPC G3 processors)
148 * ``MACOSX_DEPLOYMENT_TARGET=10.3``
149 * Apple ``gcc-4.0``
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700150 * system Python 2.5 for documentation build with Sphinx
Ned Deily22726702011-01-15 04:44:12 +0000151
152 - alternate build environments:
153
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700154 * Mac OS X 10.6.8 with Xcode 3.2.6
Ned Deily22726702011-01-15 04:44:12 +0000155 - need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
156
Ned Deily22726702011-01-15 04:44:12 +0000157
158
159General Prerequisites
160---------------------
161
162* No Fink (in ``/sw``) or MacPorts (in ``/opt/local``) or other local
163 libraries or utilities (in ``/usr/local``) as they could
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000164 interfere with the build.
165
Ned Deily22726702011-01-15 04:44:12 +0000166* The documentation for the release is built using Sphinx
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000167 because it is included in the installer.
168
Ned Deily22726702011-01-15 04:44:12 +0000169* It is safest to start each variant build with an empty source directory
170 populated with a fresh copy of the untarred source.
171
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700172* It is recommended that you remove any existing installed version of the
173 Python being built::
174
175 sudo rm -rf /Library/Frameworks/Python.framework/Versions/n.n
176
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000177
178The Recipe
179----------
180
Ned Deily22726702011-01-15 04:44:12 +0000181Here are the steps you need to follow to build a Python installer:
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000182
Ned Deily22726702011-01-15 04:44:12 +0000183* Run ``build-installer.py``. Optionally you can pass a number of arguments
184 to specify locations of various files. Please see the top of
Thomas Wouters477c8d52006-05-27 19:21:47 +0000185 ``build-installer.py`` for its usage.
Thomas Wouters477c8d52006-05-27 19:21:47 +0000186
Ned Deily22726702011-01-15 04:44:12 +0000187 Running this script takes some time, it will not only build Python itself
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000188 but also some 3th-party libraries that are needed for extensions.
189
190* When done the script will tell you where the DMG image is (by default
191 somewhere in ``/tmp/_py``).
192
Ned Deily22726702011-01-15 04:44:12 +0000193Building other universal installers
194...................................
Ronald Oussoren1943f862009-03-30 19:39:14 +0000195
196It is also possible to build a 4-way universal installer that runs on
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700197OS X 10.5 Leopard or later::
Ronald Oussoren1943f862009-03-30 19:39:14 +0000198
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700199 /usr/bin/python /build-installer.py \
Ned Deily22726702011-01-15 04:44:12 +0000200 --dep-target=10.5
201 --universal-archs=all
202 --sdk-path=/Developer/SDKs/MacOSX10.5.sdk
Ronald Oussoren1943f862009-03-30 19:39:14 +0000203
Ned Deily22726702011-01-15 04:44:12 +0000204This requires that the deployment target is 10.5, and hence
205also that you are building on at least OS X 10.5. 4-way includes
206``i386``, ``x86_64``, ``ppc``, and ``ppc64`` (G5). ``ppc64`` executable
207variants can only be run on G5 machines running 10.5. Note that,
208while OS X 10.6 is only supported on Intel-based machines, it is possible
209to run ``ppc`` (32-bit) executables unmodified thanks to the Rosetta ppc
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700210emulation in OS X 10.5 and 10.6. The 4-way installer variant must be
211built with Xcode 3. It is not regularly built or tested.
Ned Deily22726702011-01-15 04:44:12 +0000212
213Other ``--universal-archs`` options are ``64-bit`` (``x86_64``, ``ppc64``),
214and ``3-way`` (``ppc``, ``i386``, ``x86_64``). None of these options
215are regularly exercised; use at your own risk.
216
Ronald Oussoren1943f862009-03-30 19:39:14 +0000217
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000218Testing
219-------
220
Ned Deily22726702011-01-15 04:44:12 +0000221Ideally, the resulting binaries should be installed and the test suite run
222on all supported OS X releases and architectures. As a practical matter,
223that is generally not possible. At a minimum, variant 1 should be run on
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700224a PPC G4 system with OS X 10.5 and at least one Intel system running OS X
22510.8, 10.7, 10.6, or 10.5. Variant 2 should be run on 10.8, 10.7, and 10.6
226systems in both 32-bit and 64-bit modes.::
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000227
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700228 /usr/local/bin/pythonn.n -m test -w -u all,-largefile
229 /usr/local/bin/pythonn.n-32 -m test -w -u all
Ned Deily22726702011-01-15 04:44:12 +0000230
231Certain tests will be skipped and some cause the interpreter to fail
232which will likely generate ``Python quit unexpectedly`` alert messages
Ned Deily5c0b1ca2012-08-24 19:57:33 -0700233to be generated at several points during a test run. These are normal
234during testing and can be ignored.
235
236It is also recommend to launch IDLE and verify that it is at least
237functional. Double-click on the IDLE app icon in ``/Applications/Pythonn.n``.
238It should also be tested from the command line::
239
240 /usr/local/bin/idlen.n
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000241