-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Portfile
494 lines (426 loc) · 19.4 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
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
PortGroup select 1.0
PortGroup compiler_blacklist_versions 1.0
PortGroup active_variants 1.1
PortGroup conflicts_build 1.0
epoch 1
name gcc12
homepage https://gcc.gnu.org/
platforms {darwin >= 10}
categories lang
maintainers nomaintainer
# an exception in the license allows dependents to not be GPL
license {GPL-3+ Permissive}
description The GNU compiler collection
long_description {*}${description}, including front ends for \
C, C++, Objective-C, Objective-C++ and Fortran.
# Remember to reset all revision increments below to 0 on new versions
version 12.3.0
revision 4
set libgccname lib${name}
subport ${libgccname} { revision [ expr ${revision} + 0 ] }
set libcxxname ${name}-libcxx
checksums rmd160 bcc2a72fbbee69d031e1ca31c7236c65352397d4 \
sha256 949a5d4f99e786421a93b532b22ffab5578de7321369975b91aec97adfda8c3b \
size 85491976
# Primary releases
master_sites https://ftpmirror.gnu.org/gcc/gcc-${version}/ \
https://mirror.its.dal.ca/gnu/gcc/gcc-${version}/ \
https://mirrors.kernel.org/gnu/gcc/gcc-${version}/ \
https://www.mirrorservice.org/sites/ftp.gnu.org/gnu/gcc/gcc-${version}/ \
https://ftp-stud.hs-esslingen.de/pub/Mirrors/ftp.gnu.org/gcc/gcc-${version}/ \
https://mirror.yongbok.net/gnu/gcc/gcc-${version}/ \
http://mirror.koddos.net/gcc/releases/gcc-${version}/ \
ftp://ftp.gwdg.de/pub/linux/gcc/releases/gcc-${version}/ \
ftp://gcc.ftp.nluug.nl/mirror/languages/gcc/releases/gcc-${version}/ \
ftp://gcc.gnu.org/pub/gcc/releases/gcc-${version}/ \
gnu:gcc/gcc-${version}
distname gcc-${version}
use_xz yes
depends_build-append \
port:texinfo
depends_lib-append port:cctools \
port:gmp \
path:lib/pkgconfig/isl.pc:isl \
port:ld64 \
port:libiconv \
port:libmpc \
port:mpfr \
port:zlib \
port:zstd
depends_run-append port:gcc_select \
port:libgcc12
depends_skip_archcheck-append gcc_select ld64 cctools
license_noconflict gmp mpfr ppl libmpc zlib
set major [lindex [split ${version} .-] 0]
platform darwin {
configure.pre_args-append --build=${build_arch}-apple-darwin${os.major}
}
set gcc_configure_langs {c c++ objc obj-c++ lto fortran}
if {${subport} eq ${name} && ${build_arch} ne "i386"} {
# jit compiler is not building on i386 systems
# https://trac.macports.org/ticket/61130
lappend gcc_configure_langs jit
}
proc get_clean_sysroot {} {
global configure.sdkroot
# if the sdkroot is one of the current, rapidly changing SDKS, use the generic one
return [regsub {MacOSX1[1-9]\.[0-9]+\.sdk} ${configure.sdkroot} {MacOSX.sdk}]
}
set mp_extra_rpath ${prefix}/lib/libgcc
configure.dir ${workpath}/build
configure.cmd ${worksrcpath}/configure
configure.args --enable-languages=[join ${gcc_configure_langs} ","] \
--libdir=${prefix}/lib/${name} \
--includedir=${prefix}/include/${name} \
--infodir=${prefix}/share/info \
--mandir=${prefix}/share/man \
--datarootdir=${prefix}/share/gcc-${major} \
--with-local-prefix=${prefix} \
--with-system-zlib \
--disable-nls \
--program-suffix=-mp-${major} \
--with-gxx-include-dir=${prefix}/include/${name}/c++/ \
--with-gmp=${prefix} \
--with-mpfr=${prefix} \
--with-mpc=${prefix} \
--with-isl=${prefix} \
--with-zstd=${prefix} \
--enable-checking=release \
--disable-multilib \
--enable-lto \
--enable-libstdcxx-time \
--with-build-config=bootstrap-debug \
--with-as=${prefix}/bin/as \
--with-ld=${prefix}/bin/ld \
--with-ar=${prefix}/bin/ar \
--with-bugurl=https://trac.macports.org/newticket \
--enable-host-shared \
--with-darwin-extra-rpath=${mp_extra_rpath} \
--with-libiconv-prefix=${prefix}
# see https://lists.macports.org/pipermail/macports-dev/2017-August/036209.html
# --disable-tls does not limit functionality
# it only determines how std::call_once works
configure.args-append --disable-tls
# Disable ccache
configure.ccache no
if { ${subport} ne ${libcxxname} && ${os.platform} eq "darwin" && ${subport} ne ${libgccname} } {
# gcc has build issues on macOS 11.3 with the use of Xcode 12.5 clang via cctools for ld
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100340
# https://trac.macports.org/ticket/62775
# Update for gcc12 - Similar issues on macOS 10.6, 10.13 ...
if { ([vercmp ${xcodeversion} >= 12.5] && [vercmp ${xcodeversion} < 13]) || \
([vercmp ${xcodecltversion} >= 12.5] && [vercmp ${xcodecltversion} < 13]) || \
${os.major} < 11 || ${os.major} == 17 } \
{
# Skip bootstrap comparison entirely
configure.args-replace --with-build-config=bootstrap-debug --without-build-config
post-patch {
reinplace {s|^do-compare =|do-compare = /usr/bin/true|g} \
${worksrcpath}/Makefile.in \
${worksrcpath}/config/bootstrap-debug.mk \
${worksrcpath}/config/bootstrap-debug-lean.mk \
${worksrcpath}/config/bootstrap-debug-lib.mk
}
}
}
configure.env-append \
AR_FOR_TARGET=${prefix}/bin/ar \
AS_FOR_TARGET=${prefix}/bin/as \
LD_FOR_TARGET=${prefix}/bin/ld \
NM_FOR_TARGET=${prefix}/bin/nm \
OBJDUMP_FOR_TARGET=${prefix}/bin/objdump \
RANLIB_FOR_TARGET=${prefix}/bin/ranlib \
STRIP_FOR_TARGET=${prefix}/bin/strip \
OTOOL=${prefix}/bin/otool \
OTOOL64=${prefix}/bin/otool
if { ${os.platform} eq "darwin" } {
# Patch generated from https://github.com/iains/gcc-12-branch
# git diff --no-prefix releases/gcc-12.2.0 gcc-12.2-darwin-r0
patchfiles-append patch-darwin-gcc-${version}.diff
}
# Since GCC 7.4.0, during configure, it detects features supported by target-as.
# On the other hand, MacPorts cctools contain a proxy for 'as' that runs system
# 'as' or one of the supported MacPorts clang's 'as' if it is installed. Here,
# we may encounter a misconfiguration when GCC builds on a system with some
# MacPorts clang, and 'as' is using it. However, on a clean system, it uses
# system 'as' if no MacPorts clang is installed, which may behave differently.
# This can make GCC broken until MacPorts clang is installed. To avoid a stealth
# dependency on the used clang, I enforce building with system 'as'.
# See:
# - https://trac.macports.org/ticket/68683
# - https://github.com/gcc-mirror/gcc/commit/b410cf1dc056aab195c5408871ffca932df8a78a
patchfiles-append patch-gcc10-disable-macports-cctools-as-changes.diff
# see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111632
patchfiles-append patch-avoid-over-poisoning.diff
configure.env-append \
DISABLE_MACPORTS_AS_CLANG_SEARCH=1 \
DISABLE_XCODE_AS_CLANG_SEARCH=1
build.env-append DISABLE_MACPORTS_AS_CLANG_SEARCH=1 \
DISABLE_XCODE_AS_CLANG_SEARCH=1
if {${os.platform} eq "darwin" && ${os.major} >= 22} {
if { [vercmp ${xcodeversion} >= 15.0] || [vercmp ${xcodecltversion} >= 15.0] } {
# On macOS13 and newer ensure the 'legacy' linker is used as GCC currently has problems
# with the new default linker in Xcode 15. See e.g.
# https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking
# https://discussions.apple.com/thread/255137447
# https://developer.apple.com/forums/thread/737707
# https://github.com/Homebrew/homebrew-core/issues/145991
configure.args-replace --with-ld=${prefix}/bin/ld --with-ld=${prefix}/bin/ld-classic
# Ensure ld64 is installed with the correct variant need for ld-classic
require_active_variants ld64 ld64_xcode
}
}
pre-configure {
# Set package info
configure.args-append --with-pkgversion="MacPorts ${name} ${version}_${revision}${portvariants}"
if {${configure.sdkroot} ne ""} {
# We should be using --with-build-sysroot here. Using --with-sysroot
# changes the behavior of the installed gcc to look in that sysroot
# by default instead of /. Using --with-build-sysroot is supposed
# to be used during the build but not impact the installed product.
# Unfortunately, the build fails because the value doesn't get
# plumbed everywhere it is supposed to.
#
# https://trac.macports.org/ticket/53726
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79885
configure.args-append --with-sysroot="[get_clean_sysroot]"
}
}
set libcxx_incpath ${prefix}/libexec/${name}/libc++/include/c++/v1
subport ${libcxxname} {
PortGroup compilers 1.0
compilers.choose cxx
compilers.setup -gcc -fortran -clangdevel -clang34 -clang35 -clang36 \
-clang37 -clang50 -clang60 -clang70 -clang80 -clang90
if { ![clang_variant_isset] } {
if { ${os.platform} eq "darwin" && ${os.major} < 11 } {
default_variants-append +clang11
} else {
default_variants-append +clang14
}
}
revision [ expr ${revision} + 0 ]
description libc++ header implementation to be used by ${name}
long_description {*}${description}
homepage https://llvm.org/
license NCSA
depends_build
depends_extract
depends_run
depends_lib
distfiles
patchfiles
use_configure no
supported_archs noarch
platforms any
# Find clang/llvm version to use from active variant
proc getClangVersion {} {
if { [regexp {clang(.*)} [clang_variant_name] -> clang_v] } {
return ${clang_v}
}
return ""
}
set mp_clang_ver [getClangVersion]
build {
# Copy headers from clang-N during build
file mkdir ${worksrcpath}/headers
file copy ${prefix}/libexec/llvm-${mp_clang_ver}/include/c++/v1 ${worksrcpath}/headers/
}
destroot {
set base_dir [file dirname ${libcxx_incpath}]
file mkdir ${destroot}${base_dir}
file copy ${worksrcpath}/headers/v1 ${destroot}${base_dir}
}
}
if { ${subport} ne ${libcxxname} } {
variant stdlib_flag description {Enable stdlib command line flag to select c++ runtime} {
# Enables support for specifying the c++ runtime via `-stdlib=` in a similar
# way to clang. For more details see the later comments in
# https://www.mail-archive.com/gcc-patches@gcc.gnu.org/msg257385.html
# Note : This 'bakes' the libc++ include directory into gcc,
# which is then used as the default search location when `-stdlib=libc++`
# is given. Therefore to have consistency across various OS versions, and to enable
# modern c++ standards, use a recent macports clang port to provide this.
if {${subport} eq ${name}} {
depends_run-append port:${libcxxname}
}
configure.args-append --with-gxx-libcxx-include-dir="${libcxx_incpath}"
}
# libcxx is unavailable on PPC
if {${build_arch} ni [list ppc ppc64]} {
default_variants-append +stdlib_flag
}
}
# https://trac.macports.org/ticket/29067
# https://trac.macports.org/ticket/29104
# https://trac.macports.org/ticket/47996
# https://trac.macports.org/ticket/58493
compiler.blacklist-append {clang < 800} gcc-4.0 *gcc-4.2 {llvm-gcc-4.2 < 2336.1} {macports-clang-3.[4-7]}
# https://build.macports.org/builders/ports-10.13_x86_64-builder/builds/105513/steps/install-port/logs/stdio
# c++/v1/functional:1408:2: error: no member named 'fancy_abort' in namespace 'std::__1'; did you mean simply 'fancy_abort'?
compiler.blacklist-append {clang < 1001}
platform darwin {
# gcc12 can't be built by Xcode Clang 14.0.x
# https://trac.macports.org/ticket/67416
# https://github.com/iains/gcc-12-branch/issues/6
if { ([vercmp ${xcodeversion} >= 14.0] && [vercmp ${xcodeversion} < 14.1]) || \
([vercmp ${xcodecltversion} >= 14.0] && [vercmp ${xcodecltversion} < 14.1]) } {
pre-fetch {
ui_error "${name} cannot be built with Xcode/CLT 14.0.x"
ui_error "Either upgrade both Xcode and the Command Line Tools to 14.1 or later, or downgrade to 13.4."
return -code error "incompatible Xcode/CLT version"
}
}
}
# "-stdlib" would be passed on to the bootstrap compiler if present
configure.cxx_stdlib
build.dir ${configure.dir}
build.target bootstrap-lean
destroot.target install install-info-host
# gcc cannot build if these are active
conflicts_build-append libunwind-headers binutils gdb
# Find dylibs at a given location
proc dylib_list {location} {
# Note *.*.dylib is to only match versioned dylibs, not the versionless sym links
set dylibs [glob -directory ${location} -tails *.*.dylib]
ui_debug "Found at ${location} dylibs : ${dylibs}"
return ${dylibs}
}
if {${subport} eq ${libgccname}} {
# Activate hack for new libgcc
# https://trac.macports.org/wiki/PortfileRecipes#deactivatehack
pre-activate {
if {![catch {set installed [lindex [registry_active libgcc8] 0]}]} {
# Extract the epoch of the installed libgcc8
set _epoch [lindex $installed 5]
# If < 5 need to deactivate
if {[vercmp $_epoch < 5]} {
registry_deactivate_composite libgcc8 "" [list ports_nodepcheck 1]
}
}
if {![catch {set installed [lindex [registry_active libgcc10] 0]}]} {
# Extract the epoch of the installed libgcc10
set _epoch [lindex $installed 5]
# If < 6 need to deactivate
if {[vercmp $_epoch < 6]} {
registry_deactivate_composite libgcc10 "" [list ports_nodepcheck 1]
}
}
if {![catch {set installed [lindex [registry_active libgcc11] 0]}]} {
# Extract the epoch of the installed libgcc11
set _epoch [lindex $installed 5]
# If < 1 need to deactivate
if {[vercmp $_epoch < 1]} {
registry_deactivate_composite libgcc11 "" [list ports_nodepcheck 1]
}
}
if {![catch {set installed [lindex [registry_active libgcc-devel] 0]}]} {
# Extract the epoch of the installed libgcc-devel
set _epoch [lindex $installed 5]
# If < 5 need to deactivate
if {[vercmp $_epoch < 5]} {
registry_deactivate_composite libgcc-devel "" [list ports_nodepcheck 1]
}
}
}
# No need to build as nothing that isn't provided by libgcc13
platforms any
depends_run path:share/doc/libgcc/README:libgcc
depends_lib
fetch.type none
build { }
use_configure no
patchfiles
destroot {
set doc_dir ${destroot}${prefix}/share/doc/${subport}
xinstall -m 755 -d ${doc_dir}
system "echo ${subport} provides no runtime > ${doc_dir}/README"
}
}
if {${subport} eq ${name}} {
post-destroot {
file delete ${destroot}${prefix}/share/info/dir
foreach file [glob ${destroot}${prefix}/share/{info,man/man7}/*] {
set extension [file extension ${file}]
set newfile [regsub "${extension}$" ${file} "-mp-${major}${extension}"]
file rename ${file} ${newfile}
}
# loop over libs to install
set dylibs [dylib_list ${destroot}${prefix}/lib/${name}]
foreach dylib ${dylibs} {
if { [file exists ${prefix}/lib/libgcc/${dylib}] } {
# Different OS versions (e.g. Leopard) or architectures (e.g. PPC) don't produce all the dylibs
# https://trac.macports.org/ticket/40098
# https://trac.macports.org/ticket/40100
if {[file exists ${destroot}${prefix}/lib/${name}/${dylib}]} {
delete ${destroot}${prefix}/lib/${name}/${dylib}
ln -s ${prefix}/lib/libgcc/${dylib} ${destroot}${prefix}/lib/${name}/${dylib}
}
if {[variant_exists universal] && [variant_isset universal]} {
foreach archdir [glob ${destroot}${prefix}/lib/${name}/*/] {
if {[file exists ${archdir}/${dylib}]} {
delete ${archdir}/${dylib}
ln -s ${prefix}/lib/libgcc/${dylib} ${archdir}/${dylib}
}
}
}
}
}
}
select.group gcc
select.file ${filespath}/mp-${name}
}
if { ${subport} ne ${libcxxname} } {
post-destroot {
# Ensure all dylibs in destroot have our extra rpath added ..
# https://trac.macports.org/ticket/65503
foreach dlib [ exec find ${destroot}${prefix} -type f -and -name "*.dylib" ] {
ui_debug "Ensuring DYLIB '${dlib}' has RPATH '${mp_extra_rpath}'"
# Note install_name_tool returns a failure if the dylib already has the entry
# We don't want that here so force final status to be true...
system "install_name_tool -add_rpath ${mp_extra_rpath} ${dlib} > /dev/null 2>&1 ; true"
}
}
platform powerpc {
configure.universal_archs ppc ppc64
}
if { ${os.platform} eq "darwin" && ${os.major} >= 20 } {
platform i386 {
configure.universal_archs x86_64 arm64
}
platform arm {
configure.universal_archs x86_64 arm64
}
} else {
platform i386 {
configure.universal_archs i386 x86_64
}
}
variant universal {
configure.args-delete --disable-multilib
}
# the generated compiler doesn't accept -arch
configure.env-append \
"CPP=${configure.cc} -E" \
"CPP_FOR_BUILD=${configure.cc} -E" \
"CXXCPP=${configure.cxx} -E"
build.env-append \
"CPP=${configure.cc} -E" \
"CPP_FOR_BUILD=${configure.cc} -E" \
"CXXCPP=${configure.cxx} -E"
configure.cc-append [get_canonical_archflags]
configure.cc_archflags
configure.cxx-append ${configure.cxx_archflags}
configure.cxx_archflags
configure.objc_archflags
configure.ld_archflags
configure.universal_cflags
configure.universal_cxxflags
configure.universal_ldflags
configure.universal_args
}
livecheck.type regex
livecheck.url http://mirror.koddos.net/gcc/releases/
livecheck.regex gcc-(${major}\\.\[0-9.\]+)/