-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathPortfile
More file actions
265 lines (222 loc) · 9.54 KB
/
Portfile
File metadata and controls
265 lines (222 loc) · 9.54 KB
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.15
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 rmd160 3ae3a6c2c447c335a6495e1088649d84327b8842 \
sha256 272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625
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 pthread_threadid_np on older systems
patchfiles-append 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 path:bin/pkg-config: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 abiflags {}
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 {
set framewpath ${frameworks_dir}/Python.framework
set framewdir ${framewpath}/Versions/${branch}
set confdir config-${branch}${abiflags}-darwin
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_${abiflags}_darwin_darwin.py
# remove -arch flags from the config
reinplace -E {s|-arch [a-z0-9_]+||g} \
${libdir}/_sysconfigdata_${abiflags}_darwin_darwin.py
# also remove gettext overlinking
reinplace "s|-lintl||" \
${libdir}/_sysconfigdata_${abiflags}_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_${abiflags}_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\]+) -