blob: 6f6b20a013f23066160e8093a60602d9dab18896 [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 Deily04f49c12014-12-10 01:06:57 -080011This installers built by this script are legacy bundle installers that have
12been supported from the early days of OS X. In particular, they are supported
13on OS X 10.3.9, the earliest supported release for builds from this script.
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +000014
Ned Deily04f49c12014-12-10 01:06:57 -080015Beginning with Python 2.7.9, PSF practice is to build two installer variants
16using the newer flat package format, supported on 10.5+, and signed with the
17builder's Apple developer key, allowing downloaded packages to satisfy Apple's
18default Gatekeeper policy (e.g. starting with 10.8, Apple store downloads and
19Apple developer ID signed apps and installer packages). The process for
20transforming the output build artifacts into signed flat packages is not
21yet integrated into ``build-installer.py``.
Ned Deily78cceec2014-05-17 14:29:22 -070022
Ned Deily04f49c12014-12-10 01:06:57 -0800231. 32-bit-only, i386 and PPC universal, capable on running on all machines
24 supported by Mac OS X 10.5 through (at least) 10.10::
Ned Deily53c460d2011-01-30 01:43:40 +000025
Ned Deily78cceec2014-05-17 14:29:22 -070026 /usr/bin/python build-installer.py \
27 --sdk-path=/Developer/SDKs/MacOSX10.5.sdk \
28 --universal-archs=32-bit \
29 --dep-target=10.5
30
31 - builds the following third-party libraries
32
Ned Deily7a3082f2015-01-09 13:29:04 -080033 * libcrypto and libssl from OpenSSL 1.0.1
Ned Deily78cceec2014-05-17 14:29:22 -070034 * NCurses 5.9
35 * SQLite 3.7.13
36 * Oracle Sleepycat DB 4.8 (Python 2.x only)
37
38 - uses system-supplied versions of third-party libraries
39
40 * readline module links with Apple BSD editline (libedit)
41
42 - requires ActiveState ``Tcl/Tk 8.4`` (currently 8.4.20) to be installed for building
43
44 - recommended build environment:
45
46 * Mac OS X 10.5.8 Intel or PPC
47 * Xcode 3.1.4
48 * ``MacOSX10.5`` SDK
49 * ``MACOSX_DEPLOYMENT_TARGET=10.5``
50 * Apple ``gcc-4.2``
Ned Deilyfcf701a2014-09-05 15:52:45 -070051 * bootstrap non-framework Python 2.7 for documentation build with
52 Sphinx (as of 2.7.9)
Ned Deily78cceec2014-05-17 14:29:22 -070053
54 - alternate build environments:
55
56 * Mac OS X 10.6.8 with Xcode 3.2.6
57 - need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
58 * Note Xcode 4.* does not support building for PPC so cannot be used for this build
59
Ned Deily04f49c12014-12-10 01:06:57 -0800602. 64-bit / 32-bit, x86_64 and i386 universal, for OS X 10.6 (and later)::
Ned Deily53c460d2011-01-30 01:43:40 +000061
Ned Deilye1c9794952013-01-29 00:07:46 -080062 /usr/bin/python build-installer.py \
Ned Deily53c460d2011-01-30 01:43:40 +000063 --sdk-path=/Developer/SDKs/MacOSX10.6.sdk \
64 --universal-archs=intel \
65 --dep-target=10.6
66
Ned Deilye1c9794952013-01-29 00:07:46 -080067 - builds the following third-party libraries
68
69 * NCurses 5.9 (http://bugs.python.org/issue15037)
70 * SQLite 3.7.13
Ned Deily78cceec2014-05-17 14:29:22 -070071 * Oracle Sleepycat DB 4.8 (Python 2.x only)
Ned Deilye1c9794952013-01-29 00:07:46 -080072
Ned Deily53c460d2011-01-30 01:43:40 +000073 - uses system-supplied versions of third-party libraries
Ned Deilye1c9794952013-01-29 00:07:46 -080074
Ned Deily04f49c12014-12-10 01:06:57 -080075 * libcrypto and libssl from Apple OpenSSL 0.9.8
Ned Deily53c460d2011-01-30 01:43:40 +000076 * readline module links with Apple BSD editline (libedit)
Ned Deily53c460d2011-01-30 01:43:40 +000077
Ned Deily78cceec2014-05-17 14:29:22 -070078 - requires ActiveState Tcl/Tk 8.5.15 (or later) to be installed for building
Ned Deily53c460d2011-01-30 01:43:40 +000079
Ned Deilye1c9794952013-01-29 00:07:46 -080080 - recommended build environment:
81
82 * Mac OS X 10.6.8 (or later)
83 * Xcode 3.2.6
Ned Deily53c460d2011-01-30 01:43:40 +000084 * ``MacOSX10.6`` SDK
85 * ``MACOSX_DEPLOYMENT_TARGET=10.6``
86 * Apple ``gcc-4.2``
Ned Deilyfcf701a2014-09-05 15:52:45 -070087 * bootstrap non-framework Python 2.7 for documentation build with
88 Sphinx (as of 2.7.9)
Ned Deily53c460d2011-01-30 01:43:40 +000089
90 - alternate build environments:
91
Ned Deilye1c9794952013-01-29 00:07:46 -080092 * none. Xcode 4.x currently supplies two C compilers.
93 ``llvm-gcc-4.2.1`` has been found to miscompile Python 3.3.x and
94 produce a non-functional Python executable. As it appears to be
95 considered a migration aid by Apple and is not likely to be fixed,
96 its use should be avoided. The other compiler, ``clang``, has been
97 undergoing rapid development. While it appears to have become
Ned Deily78cceec2014-05-17 14:29:22 -070098 production-ready in the most recent Xcode 5 releases, the versions
99 available on the deprecated Xcode 4.x for 10.6 were early releases
100 and did not receive the level of exposure in production environments
101 that the Xcode 3 gcc-4.2 compiler has had.
Ned Deily53c460d2011-01-30 01:43:40 +0000102
103
104General Prerequisites
105---------------------
106
107* No Fink (in ``/sw``) or MacPorts (in ``/opt/local``) or other local
108 libraries or utilities (in ``/usr/local``) as they could
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000109 interfere with the build.
110
Ned Deily53c460d2011-01-30 01:43:40 +0000111* The documentation for the release is built using Sphinx
Ned Deilyfcf701a2014-09-05 15:52:45 -0700112 because it is included in the installer. For 2.7.x up to and including
113 2.7.8, the ``Doc/Makefile`` used ``svn`` to download repos of
114 ``Sphinx`` and its dependencies. Beginning with 2.7.9, the ``Doc/Makefile``
115 assumes there is an externally-provided ``sphinx-build`` and requires at
116 least Python 2.6 to run. Because of this, it is no longer possible to
117 build a 2.7.9 or later installer on OS X 10.5 using the Apple-supplied
118 Python 2.5.
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000119
Ned Deily53c460d2011-01-30 01:43:40 +0000120* It is safest to start each variant build with an empty source directory
121 populated with a fresh copy of the untarred source.
122
Ned Deilye1c9794952013-01-29 00:07:46 -0800123* It is recommended that you remove any existing installed version of the
124 Python being built::
125
126 sudo rm -rf /Library/Frameworks/Python.framework/Versions/n.n
127
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000128
129The Recipe
130----------
131
Ned Deily53c460d2011-01-30 01:43:40 +0000132Here are the steps you need to follow to build a Python installer:
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000133
Ned Deily53c460d2011-01-30 01:43:40 +0000134* Run ``build-installer.py``. Optionally you can pass a number of arguments
135 to specify locations of various files. Please see the top of
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +0000136 ``build-installer.py`` for its usage.
Ronald Oussoren0e5b70d2006-06-07 18:58:42 +0000137
Ned Deily53c460d2011-01-30 01:43:40 +0000138 Running this script takes some time, it will not only build Python itself
Ned Deily04f49c12014-12-10 01:06:57 -0800139 but also some 3rd-party libraries that are needed for extensions.
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000140
141* When done the script will tell you where the DMG image is (by default
142 somewhere in ``/tmp/_py``).
143
Ned Deily53c460d2011-01-30 01:43:40 +0000144Building other universal installers
145...................................
Ronald Oussoren508282e2009-03-30 19:34:51 +0000146
147It is also possible to build a 4-way universal installer that runs on
Ned Deilye1c9794952013-01-29 00:07:46 -0800148OS X 10.5 Leopard or later::
Ronald Oussoren508282e2009-03-30 19:34:51 +0000149
Ned Deilye1c9794952013-01-29 00:07:46 -0800150 /usr/bin/python /build-installer.py \
Ned Deily53c460d2011-01-30 01:43:40 +0000151 --dep-target=10.5
152 --universal-archs=all
153 --sdk-path=/Developer/SDKs/MacOSX10.5.sdk
Ronald Oussoren508282e2009-03-30 19:34:51 +0000154
Ned Deily53c460d2011-01-30 01:43:40 +0000155This requires that the deployment target is 10.5, and hence
156also that you are building on at least OS X 10.5. 4-way includes
157``i386``, ``x86_64``, ``ppc``, and ``ppc64`` (G5). ``ppc64`` executable
158variants can only be run on G5 machines running 10.5. Note that,
159while OS X 10.6 is only supported on Intel-based machines, it is possible
160to run ``ppc`` (32-bit) executables unmodified thanks to the Rosetta ppc
Ned Deilye1c9794952013-01-29 00:07:46 -0800161emulation in OS X 10.5 and 10.6. The 4-way installer variant must be
162built with Xcode 3. It is not regularly built or tested.
Ned Deily53c460d2011-01-30 01:43:40 +0000163
164Other ``--universal-archs`` options are ``64-bit`` (``x86_64``, ``ppc64``),
165and ``3-way`` (``ppc``, ``i386``, ``x86_64``). None of these options
166are regularly exercised; use at your own risk.
167
Ronald Oussoren508282e2009-03-30 19:34:51 +0000168
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000169Testing
170-------
171
Ned Deily53c460d2011-01-30 01:43:40 +0000172Ideally, the resulting binaries should be installed and the test suite run
173on all supported OS X releases and architectures. As a practical matter,
174that is generally not possible. At a minimum, variant 1 should be run on
Ned Deilye1c9794952013-01-29 00:07:46 -0800175a PPC G4 system with OS X 10.5 and at least one Intel system running OS X
17610.8, 10.7, 10.6, or 10.5. Variant 2 should be run on 10.8, 10.7, and 10.6
177systems in both 32-bit and 64-bit modes.::
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000178
Ned Deilye1c9794952013-01-29 00:07:46 -0800179 /usr/local/bin/pythonn.n -m test -w -u all,-largefile
180 /usr/local/bin/pythonn.n-32 -m test -w -u all
Ned Deily53c460d2011-01-30 01:43:40 +0000181
182Certain tests will be skipped and some cause the interpreter to fail
183which will likely generate ``Python quit unexpectedly`` alert messages
Ned Deilye1c9794952013-01-29 00:07:46 -0800184to be generated at several points during a test run. These are normal
185during testing and can be ignored.
186
187It is also recommend to launch IDLE and verify that it is at least
188functional. Double-click on the IDLE app icon in ``/Applications/Pythonn.n``.
189It should also be tested from the command line::
190
191 /usr/local/bin/idlen.n
Ronald Oussoren5fb9c202006-08-02 06:10:10 +0000192