/
Portfile
265 lines (223 loc) · 9.57 KB
/
Portfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
name python311
# Remember to keep py311-tkinter and py311-gdbm's versions sync'd with this
version 3.11.9
set branch [join [lrange [split ${version} .] 0 1] .]
categories lang
license PSF
maintainers {jmr @jmroot}
description An interpreted, object-oriented programming language
long_description Python is an interpreted, interactive, object-oriented \
programming language.
homepage https://www.python.org/
master_sites ${homepage}ftp/python/${version}/
distname Python-${version}
use_xz yes
checksums md5 22ea467e7d915477152e99d5da856ddc \
rmd160 3f817129ad823ef32cee7bb361e80f5867473ff1 \
sha256 9b1e896523fc510691126c864406d9360a3d1e986acbda59cda57b5abda45b87
patchfiles patch-setup.py.diff \
patch-Lib-cgi.py.diff \
patch-configure.diff \
patch-Lib-ctypes-macholib-dyld.py.diff \
sysconfig.py.patch \
configure-disable-libb2.patch \
configure-disable-libuuid.patch
if {${os.platform} eq "darwin" && ${os.major} <= 10} {
# work around no copyfile and/or pthread_threadid_np on older systems
patchfiles-append patch-no-copyfile-on-Tiger.diff \
patch-threadid-older-systems.diff
}
if {${configure.build_arch} in "ppc ppc64"} {
# https://trac.macports.org/ticket/66483
configure.ldflags-append -Wl,-read_only_relocs,suppress
# G3 builds fail without this flag, as converting a static library
# to dynamic using -all_load inadvertently sets the arch to ppc7400
configure.ldflags-append -Wl,-force_cpusubtype_ALL
}
depends_build port:pkgconfig
depends_lib port:bzip2 \
port:expat \
port:gettext-runtime \
port:libedit \
port:libffi \
port:ncurses \
path:lib/libssl.dylib:openssl \
port:sqlite3 \
port:xz \
port:zlib
set pythonVerNoDot [string map {. {}} $branch]
depends_run port:python_select-${pythonVerNoDot} \
port:python3_select-${pythonVerNoDot}
compiler.c_standard 2011
# clang 15+ depend on python311, avoid circular dep
compiler.blacklist {macports-clang-1[5-9]}
# ensurepip arg may be removed later, now conflicts with pip and setuptools
# packages
configure.args --enable-framework=${frameworks_dir} \
--enable-ipv6 \
--enable-loadable-sqlite-extensions \
--with-computed-gotos \
--with-ensurepip=no \
--with-readline=editline \
--with-system-expat \
--with-system-ffi
configure.ccache no
# pkg-config removes -I flags for paths in CPATH, which confuses python.
configure.env PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \
SETUPTOOLS_USE_DISTUTILS=stdlib
build.env SETUPTOOLS_USE_DISTUTILS=stdlib
destroot.env SETUPTOOLS_USE_DISTUTILS=stdlib
post-patch {
reinplace "s|@@PREFIX@@|${prefix}|g" \
${worksrcpath}/Lib/cgi.py \
${worksrcpath}/Lib/ctypes/macholib/dyld.py
reinplace "s|/setup.py|/setup.py --no-user-cfg|" ${worksrcpath}/Makefile.pre.in
# replace /Applications with ${applications_dir}
reinplace "s|@@APPLICATIONS_DIR@@|${applications_dir}|" \
${worksrcpath}/configure
}
build.target all
test.run yes
test.target test
destroot.target frameworkinstall maninstall
platform darwin {
set framewpath ${frameworks_dir}/Python.framework
set framewdir ${framewpath}/Versions/${branch}
set confdir config-${branch}-darwin
post-configure {
# poll() misbehaves on 10.8 and older
# See https://trac.macports.org/ticket/18376
if {${os.major} <= 12} {
system -W ${worksrcpath} "ed - pyconfig.h < ${filespath}/pyconfig.ed"
}
}
post-destroot {
foreach dir { Headers Resources Python Versions/Current } {
file delete ${destroot}${framewpath}/${dir}
}
ln -s ${framewdir}/share/man/man1/python${branch}.1 ${destroot}${prefix}/share/man/man1/
ln -s ${framewdir}/lib/pkgconfig/python-${branch}.pc ${destroot}${prefix}/lib/pkgconfig/
ln -s ${framewdir}/lib/pkgconfig/python-${branch}-embed.pc ${destroot}${prefix}/lib/pkgconfig/
set libdir ${destroot}${framewdir}/lib/python${branch}
# Without this, LINKFORSHARED is set to
# ... $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)
# (this becomes Python.framework/Versions/3.11/Python) which doesn't
# work for dependents that incorrectly use this variable to find out
# how to link against python (see ticket #15099); instead we mirror
# the behavior of `python-config --ldflags` here.
set lfs_pattern {^([[:space:]]*'LINKFORSHARED':).*}
set lfs_replacement "\\1 '-L${framewdir}/lib/python${branch}/${confdir} -lpython${branch} -ldl -framework CoreFoundation',"
reinplace -E s|${lfs_pattern}|${lfs_replacement}| \
${libdir}/_sysconfigdata__darwin_darwin.py
# remove -arch flags from the config
reinplace -E {s|-arch [a-z0-9_]+||g} \
${libdir}/_sysconfigdata__darwin_darwin.py
# also remove gettext overlinking
reinplace "s|-lintl||" \
${libdir}/_sysconfigdata__darwin_darwin.py
# recompile the modified file
set python_for_build python.exe
# executable differs depending on filesystem case sensitivity
if {![file exists ${worksrcpath}/${python_for_build}]} {
set python_for_build python
}
system -W ${worksrcpath} "env DYLD_FRAMEWORK_PATH=. ./${python_for_build} -E -m compileall -d [shellescape ${framewdir}/lib/python${branch}] -o 0 -o 1 -o 2 [shellescape ${libdir}/_sysconfigdata__darwin_darwin.py]"
# Also make the sysconfig changes in the Makefile
reinplace {s|^\(LINKFORSHARED=\).*$|\1 -L$(LIBPL) -lpython$(VERSION)$(ABIFLAGS) $(LIBS) $(SYSLIBS)|} \
${libdir}/${confdir}/Makefile
reinplace -E {s|-arch [a-z0-9_]+||g} \
${libdir}/${confdir}/Makefile
reinplace "s|-lintl||" \
${libdir}/${confdir}/Makefile
}
}
post-destroot {
foreach unversioned {2to3 idle3 pydoc3 python3 python3-config} {
delete ${destroot}${prefix}/bin/${unversioned}
}
}
notes "
To make this the default Python or Python 3 (i.e., the version run by\
the 'python' or 'python3' commands), run one or both of:
sudo port select --set python python$pythonVerNoDot
sudo port select --set python3 python$pythonVerNoDot
"
variant universal {
post-patch {
set universal_arch_flags {}
set arch_run_32bit {}
set lipo_32bit_flags {}
set lipo_intel64_flags {}
set any64 no
foreach arch ${configure.universal_archs} {
lappend universal_arch_flags -arch ${arch}
if {${arch} in {i386 ppc}} {
lappend arch_run_32bit -${arch}
lappend lipo_32bit_flags -extract ${arch}
} else {
set any64 yes
}
}
if {$any64} {
if {$arch_run_32bit eq ""} {
set arch_run_32bit true
set lipo_32bit_flags ""
} else {
set arch_run_32bit "/usr/bin/arch $arch_run_32bit"
#lipo_32bit_flags already correct
}
if {"arm64" in ${configure.universal_archs} && "x86_64" in ${configure.universal_archs}} {
set lipo_intel64_flags "-extract x86_64"
}
} else {
set arch_run_32bit ""
set lipo_32bit_flags ""
}
reinplace \
"s|@@UNIVERSAL_ARCH_FLAGS@@|${universal_arch_flags}|" \
${worksrcpath}/configure
reinplace \
"s|@@LIPO_32BIT_FLAGS@@|${lipo_32bit_flags}|" \
${worksrcpath}/configure
reinplace \
"s|@@LIPO_INTEL64_FLAGS@@|${lipo_intel64_flags}|" \
${worksrcpath}/configure
reinplace \
"s|@@ARCH_RUN_32BIT@@|${arch_run_32bit}|" \
${worksrcpath}/configure
}
configure.args-append --enable-universalsdk=${configure.sysroot}
post-configure {
system -W ${worksrcpath} "ed - pyconfig.h < ${filespath}/pyconfig.h-universal.ed"
}
post-destroot {
foreach unversioned {python3-32 python3-intel64} {
delete ${destroot}${prefix}/bin/${unversioned}
}
}
}
variant optimizations description {enable expensive, stable optimizations (including PGO)} {
configure.args-append --enable-optimizations
}
variant lto description {enable Link-Time Optimization} {
configure.args-append --with-lto
}
platform darwin {
# Build failures on 10.9 and older
if {${os.major} > 11} {
if {${os.major} > 14 || !($universal_possible && [variant_isset universal])} {
default_variants +lto
}
if {${os.major} > 13} {
default_variants-append +optimizations
}
}
}
variant dtrace description {enable DTrace support} {
configure.args-append --with-dtrace
}
livecheck.type regex
livecheck.url ${homepage}downloads/source/
livecheck.regex Python (${branch}\[.0-9\]+) -