8000 Update the macOS installer build scripts · python/cpython@9f4eec0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9f4eec0

Browse files
committed
Update the macOS installer build scripts
Change includes to fix building with Python 3.x and to build correctly on newer macOS systems with SIP.
1 parent 62855d5 commit 9f4eec0

File tree

4 files changed

+128
-230
lines changed

4 files changed

+128
-230
lines changed

Mac/BuildScript/README.rst

Lines changed: 55 additions & 187 deletions
< 10000 tr class="diff-line-row">
Original file line numberDiff line numberDiff line change
@@ -7,216 +7,84 @@ framework-based Python out-of-tree, installs it in a funny place with
77
$DESTROOT, massages that installation to remove .pyc files and such, creates
88
an Installer package from the installation plus other files in ``resources``
99
and ``scripts`` and placed that on a ``.dmg`` disk image.
10-
11-
For Python 3.4.0, PSF practice is to build two installer variants
12-
for each release.
13-
14-
1. 32-bit-only, i386 and PPC universal, capable on running on all machines
15-
supported by Mac OS X 10.5 through (at least) 10.9::
16-
17-
/path/to/bootstrap/python2.7 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.8.11
26-
* XZ 5.0.5
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.20) 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-
* bootstrap non-framework Python 2.7 for documentation build with
42-
Sphinx (as of 3.4.1)
43-
44-
- alternate build environments:
45-
46-
* Mac OS X 10.6.8 with Xcode 3.2.6
47-
- need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
48-
* Note Xcode 4.* does not support building for PPC so cannot be used for this build
49-
50-
2. 64-bit / 32-bit, x86_64 and i386 universal, for OS X 10.6 (and later)::
10+
The installer package built on the dmg is a macOS bundle format installer
11+
package. This format is deprecated and is no longer supported by modern
12+
macOS systems; it is usable on macOS 10.6 and earlier systems.
13+
To be usable on newer versions of macOS, the bits in the bundle package
14+
must be assembled in a macOS flat installer package, using current
15+
versions of the pkgbuild and productbuild utilities. To pass macoS
16+
Gatekeeper download quarantine, the final package must be signed
17+
with a valid Apple Developer ID certificate using productsign.
18+
Starting with macOS 10.15 Catalina, Gatekeeper now also requires
19+
that installer packages are submitted to and pass Apple's automated
20+
notarization service using the altool command. To pass notarization,
21+
the binaries included in the package must be built with at least
22+
the macOS 10.9 SDK, mout now be signed with the codesign utility
23+
and executables must opt in to the hardened run time option with
24+
any necessary entitlements. Details of these processes are
25+
available in the on-line Apple Developer Documentation and man pages.
26+
27+
As of 3.8.0 and 3.7.7, PSF practice is to build one installer variants
28+
for each release. Note that as of this writing, no Pythons support
29+
building on a newer version of macOS that will run on older versions
30+
by setting MACOSX_DEPLOYMENT_TARGET. This is because the various
31+
Python C modules do not yet support runtime testing of macOS
32+
feature availability (for example, by using macOS AvailabilityMacros.h
33+
and weak-linking). To build a Python that is used to be used on a
34+
range of macOS releases, always build on the oldest release to be
35+
supported; the necessary shared libraries for that release will
36+
normally also be available on later systems, with the occasional
37+
exception such as the removal of 32-bit libraries in macOS 10.15.
38+
39+
build-installer requires Apple Developer tools, either from the
40+
Command Line Tools package or from a full Xcode installation.
41+
You should use the most recent version of either for the operating
42+
system version in use. (One notable exception: on macOS 10.6,
43+
Snow Leopards, use Xcode 3, not Xcode 4 which was released later
44+
in the 10.6 support cycle.)
45+
46+
1. 64-bit, x86_64, for OS X 10.9 (and later)::
5147

5248
/path/to/bootstrap/python2.7 build-installer.py \
53-
--sdk-path=/Developer/SDKs/MacOSX10.6.sdk \
54-
--universal-archs=intel \
55-
--dep-target=10.6
49+
--universal-archs=intel-64 \
50+
--dep-target=10.9
5651

5752
- builds the following third-party libraries
5853

59-
* NCurses 5.9 (http://bugs.python.org/issue15037)
60-
* SQLite 3.8.11
61-
* XZ 5.0.5
54+
* OpenSSL 1.1.1
55+
* Tcl/Tk 8.6
56+
* NCurses
57+
* SQLite
58+
* XZ
59+
* libffi
6260

6361
- uses system-supplied versions of third-party libraries
6462

6563
* readline module links with Apple BSD editline (libedit)
66-
67-
- requires ActiveState Tcl/Tk 8.5.15.1 (or later) to be installed for building
68-
69-
- recommended build environment:
70-
71-
* Mac OS X 10.6.8 (or later)
72-
* Xcode 3.2.6
73-
* ``MacOSX10.6`` SDK
74-
* ``MACOSX_DEPLOYMENT_TARGET=10.6``
75-
* Apple ``gcc-4.2``
76-
* bootstrap non-framework Python 2.7 for documentation build with
77-
Sphinx (as of 3.4.1)
78-
79-
- alternate build environments:
80-
81-
* none. Xcode 4.x currently supplies two C compilers.
82-
``llvm-gcc-4.2.1`` has been found to miscompile Python 3.3.x and
83-
produce a non-functional Python executable. As it appears to be
84-
considered a migration aid by Apple and is not likely to be fixed,
85-
its use should be avoided. The other compiler, ``clang``, has been
86-
undergoing rapid development. While it appears to have become
87-
production-ready in the most recent Xcode 5 releases, the versions
88-
available on the deprecated Xcode 4.x for 10.6 were early releases
89-
and did not receive the level of exposure in production environments
90-
that the Xcode 3 gcc-4.2 compiler has had.
91-
92-
93-
* For Python 2.7.x and 3.2.x, the 32-bit-only installer was configured to
94-
support Mac OS X 10.3.9 through (at least) 10.6. Because it is
95-
believed that there are few systems still running OS X 10.3 or 10.4
96-
and because it has become increasingly difficult to test and
97-
support the differences in these earlier systems, as of Python 3.3.0 the PSF
98-
32-bit installer no longer supports them. For reference in building such
99-
an installer yourself, the details are::
100-
101-
/usr/bin/python build-installer.py \
102-
--sdk-path=/Developer/SDKs/MacOSX10.4u.sdk \
103-
--universal-archs=32-bit \
104-
--dep-target=10.3
105-
106-
- builds the following third-party libraries
107-
108-
* Bzip2
109-
* NCurses
110-
* GNU Readline (GPL)
111-
* SQLite 3
112-
* XZ
113-
* Zlib 1.2.3
114-
* Oracle Sleepycat DB 4.8 (Python 2.x only)
115-
116-
- requires ActiveState ``Tcl/Tk 8.4`` (currently 8.4.20) to be installed for building
64+
* zlib
65+
* bz2
11766

11867
- recommended build environment:
11968

120-
* Mac OS X 10.5.8 PPC or Intel
121-
* Xcode 3.1.4 (or later)
122-
* ``MacOSX10.4u`` SDK (later SDKs do not support PPC G3 processors)
123-
* ``MACOSX_DEPLOYMENT_TARGET=10.3``
124-
* Apple ``gcc-4.0``
125-
* system Python 2.5 for documentation build with Sphinx
126-
127-
- alternate build environments:
128-
129-
* Mac OS X 10.6.8 with Xcode 3.2.6
130-
- need to change ``/System/Library/Frameworks/{Tcl,Tk}.framework/Version/Current`` to ``8.4``
131-
69+
* Mac OS X 10.9.5
70+
* Xcode Command Line Tools 6.2
71+
* ``MacOSX10.9`` SDK
72+
* ``MACOSX_DEPLOYMENT_TARGET=10.9``
73+
* Apple ``clang``
13274

13375

13476
General Prerequisites
13577
---------------------
13678

137-
* No Fink (in ``/sw``) or MacPorts (in ``/opt/local``) or other local
138-
libraries or utilities (in ``/usr/local``) as they could
79+
* No Fink (in ``/sw``) or MacPorts (in ``/opt/local``) or Homebrew or
80+
other local libraries or utilities (in ``/usr/local``) as they could
13981
interfere with the build.
14082

141-
* The documentation for the release is built using Sphinx
142-
because it is included in the installer. For 2.7.x and 3.x.x up to and
143-
including 3.4.0, the ``Doc/Makefile`` uses ``svn`` to download repos of
144-
``Sphinx`` and its dependencies. Beginning with 3.4.1, the ``Doc/Makefile``
145-
assumes there is an externally-provided ``sphinx-build`` and requires at
146-
least Python 2.6 to run. Because of this, it is no longer possible to
147-
build a 3.4.1 or later installer on OS X 10.5 using the Apple-supplied
148-
Python 2.5.
149-
15083
* It is safest to start each variant build with an empty source directory
151-
populated with a fresh copy of the untarred source.
84+
populated with a fresh copy of the untarred source or a source repo.
15285

15386
* It is recommended that you remove any existing installed version of the
15487
Python being built::
15588

15689
sudo rm -rf /Library/Frameworks/Python.framework/Versions/n.n
15790

158-
159-
The Recipe
160-
----------
161-
162-
Here are the steps you need to follow to build a Python installer:
163-
164-
* Run ``build-installer.py``. Optionally you can pass a number of arguments
165-
to specify locations of various files. Please see the top of
166-
``build-installer.py`` for its usage.
167-
168-
Running this script takes some time, it will not only build Python itself
169-
but also some 3th-party libraries that are needed for extensions.
170-
171-
* When done the script will tell you where the DMG image is (by default
172-
somewhere in ``/tmp/_py``).
173-
174-
Building other universal installers
175-
...................................
176-
177-
It is also possible to build a 4-way universal installer that runs on
178-
OS X 10.5 Leopard or later::
179-
180-
/usr/bin/python /build-installer.py \
181-
--dep-target=10.5
182-
--universal-archs=all
183-
--sdk-path=/Developer/SDKs/MacOSX10.5.sdk
184-
185-
This requires that the deployment target is 10.5, and hence
186-
also that you are building on at least OS X 10.5. 4-way includes
187-
``i386``, ``x86_64``, ``ppc``, and ``ppc64`` (G5). ``ppc64`` executable
188-
variants can only be run on G5 machines running 10.5. Note that,
189-
while OS X 10.6 is only supported on Intel-based machines, it is possible
190-
to run ``ppc`` (32-bit) executables unmodified thanks to the Rosetta ppc
191-
emulation in OS X 10.5 and 10.6. The 4-way installer variant must be
192-
built with Xcode 3. It is not regularly built or tested.
193-
194-
Other ``--universal-archs`` options are ``64-bit`` (``x86_64``, ``ppc64``),
195-
and ``3-way`` (``ppc``, ``i386``, ``x86_64``). None of these options
196-
are regularly exercised; use at your own risk.
197-
198-
199-
Testing
200-
-------
201-
202-
Ideally, the resulting binaries should be installed and the test suite run
203-
on all support 7802 ed OS X releases and architectures. As a practical matter,
204-
that is generally not possible. At a minimum, variant 1 should be run on
205-
a PPC G4 system with OS X 10.5 and at least one Intel system running OS X
206-
10.9, 10.8, 10.7, 10.6, or 10.5. Variant 2 should be run on 10.9, 10.8,
207-
10.7, and 10.6 systems in both 32-bit and 64-bit modes.::
208-
209-
/usr/local/bin/pythonn.n -m test -w -u all,-largefile
210-
/usr/local/bin/pythonn.n-32 -m test -w -u all
211-
212-
Certain tests will be skipped and some cause the interpreter to fail
213-
which will likely generate ``Python quit unexpectedly`` alert messages
214-
to be generated at several points during a test run. These are normal
215-
during testing and can be ignored.
216-
217-
It is also recommend to launch IDLE and verify that it is at least
218-
functional. Double-click on the IDLE app icon in ``/Applications/Python n.n``.
219-
It should also be tested from the command line::
220-
221-
/usr/local/bin/idlen.n
222-

0 commit comments

Comments
 (0)
0