-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy pathPortfile
561 lines (479 loc) · 22.7 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
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
# -*- 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 5
name gcc-devel
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. \
This is an !experimental!, !BETA! version \
built from GCC snapshots.
set libgccname lib${name}
set libcxxname ${name}-libcxx
version 15-20240630
revision 0
subport ${libgccname} { revision [ expr ${revision} + 0 ] }
checksums rmd160 5a5baf2efa5750eb6952fe48c3cd061b58039b37 \
sha256 e5d214bafbce9fc30ac916603765f3bf4bd79faee4ad0d2693772b066638568f \
size 88427396
# 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}
# snapshots and RC candidates
master_sites-append \
https://mirror.koddos.net/gcc/snapshots/${version}/ \
https://bigsearcher.com/mirrors/gcc/snapshots/${version}/ \
ftp://ftp.funet.fi/pub/mirrors/sources.redhat.com/pub/gcc/snapshots/${version}/ \
ftp://gcc.gnu.org/pub/gcc/snapshots/${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:libgcc-devel
depends_skip_archcheck-append gcc_select ld64 cctools
license_noconflict gmp mpfr ppl libmpc zlib
# For release
#set major [lindex [split ${version} .-] 0]
# For devel builds
set major devel
proc gcc_arch {arch} {
switch ${arch} {
arm64 {return aarch64}
default {return ${arch}}
}
}
platform darwin {
set gcc_triple [gcc_arch ${build_arch}]-apple-darwin${os.major}
configure.pre_args-append --build=${gcc_triple}
}
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} \
--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" } {
# 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 gcc13 - 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
}
}
}
if { ${os.platform} eq "darwin" } {
# GCC fixinc work-around for sys/ucred.h on OSX10.14.4 no longer seems to work ???
if { ${os.major} == 18 } {
patchfiles-append patch-OSX10.14-ucred-atomic-define.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
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
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" && ${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 +clang16
}
}
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
extract.rename no
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 {
# gcc 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 libunwind-headers is active
conflicts_build-append libunwind-headers
# 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}
}
# Moving libgccjit.0.dylib to libgcc failed for some reason
# https://github.com/macports/macports-ports/commit/ce950c5729c9178cd6c61f9f4096888a026bb87f#commitcomment-78932371
if {${subport} eq ${libgccname}} {
# Set conflict against port providing primary runtime
conflicts libgcc libgcc14
# http://trac.macports.org/ticket/35770
# http://trac.macports.org/ticket/38814
# While there can be multiple versions of these runtimes in a single
# process, it is not possible to pass objects between different versions,
# so we simplify this by having the libgcc port provide the newest version
# of these runtimes for all versions of gcc to use.
#
# If there is a binary incompatible change to the runtime in a future
# version of gcc, then the latest version of gcc to provide a given ABI
# version should continue to provide a subport for that and older gcc
# versions.
depends_run
depends_lib-delete port:zlib port:libiconv
depends_build-append {*}${depends_lib}
depends_lib port:zlib port:libiconv
configure.args-replace \
--libdir=${prefix}/lib/${name} \
--libdir=${prefix}/lib/libgcc
configure.args-replace \
--with-gxx-include-dir=${prefix}/include/${name}/c++/ \
--with-gxx-include-dir=${prefix}/include/gcc/c++/
post-destroot {
# Temporary working dir for dylibs
file mkdir ${destroot}${prefix}/lib/libgcc.merged
# loop over libs to install
set dylibs [dylib_list ${destroot}${prefix}/lib/libgcc]
foreach dylib ${dylibs} {
# 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/libgcc/${dylib}]} {
continue
}
# Move dylib to temp area
move ${destroot}${prefix}/lib/libgcc/${dylib} ${destroot}${prefix}/lib/libgcc.merged
# If needed create versionless sym link to dylib
set dylib_split [split ${dylib} "."]
set dylib_nover ${destroot}${prefix}/lib/libgcc.merged/[lindex ${dylib_split} 0].[lindex ${dylib_split} end]
if { ![file exists ${dylib_nover}] } {
ln -s ${dylib} ${dylib_nover}
}
# Universal support
if {[variant_exists universal] && [variant_isset universal]} {
foreach archdir [glob ${destroot}${prefix}/lib/libgcc/*/] {
set archdir_nodestroot [string map "${destroot}/ /" ${archdir}]
if {[file exists ${archdir}/${dylib}]} {
system "install_name_tool -id ${prefix}/lib/libgcc/${dylib} ${archdir}/${dylib}"
foreach link [glob -tails -directory ${archdir} *.dylib] {
system "install_name_tool -change ${archdir_nodestroot}${link} ${prefix}/lib/libgcc/${link} ${archdir}/${dylib}"
}
system "lipo -create -output ${destroot}${prefix}/lib/libgcc.merged/${dylib}~ ${destroot}${prefix}/lib/libgcc.merged/${dylib} ${archdir}/${dylib} && mv ${destroot}${prefix}/lib/libgcc.merged/${dylib}~ ${destroot}${prefix}/lib/libgcc.merged/${dylib}"
}
}
}
# strip debug symbols to supress debugger warnings:
# http://trac.macports.org/attachment/ticket/34831
if {! [string match *libgcc_ext* ${dylib}]} {
system "strip -x ${destroot}${prefix}/lib/libgcc.merged/${dylib}"
}
}
file delete -force ${destroot}${prefix}/bin
file delete -force ${destroot}${prefix}/share
file delete -force ${destroot}${prefix}/lib/libgcc
file delete -force ${destroot}${prefix}/libexec
move ${destroot}${prefix}/lib/libgcc.merged ${destroot}${prefix}/lib/libgcc
# For binary compatibility with binaries that linked against the old libstdcxx port
ln -s libgcc/libstdc++.6.dylib ${destroot}${prefix}/lib/libstdc++.6.dylib
# Create README detailing runtime installed.
# Also used as file checked for path-like port dependency for libgcc/libgcc-devel deps.
xinstall -d ${destroot}${prefix}/share/doc/libgcc
system "echo 'libgcc runtime is provided by ${subport}' > ${destroot}${prefix}/share/doc/libgcc/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} {
# 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}
}
}
}
}
# Ensure all headers are in versioned dir
# Required after we stopped using the option the --includedir option
# See https://github.com/iains/gcc-13-branch/issues/20 for more details.
foreach h [glob -nocomplain ${destroot}${prefix}/include/*.h] {
set f [file tail ${h}]
set newh ${destroot}${prefix}/include/${name}/${f}
ui_debug "Moving ${h} to ${newh}"
file rename ${h} ${newh}
}
}
select.group gcc
select.file ${filespath}/mp-${name}
}
if { ${subport} ne ${libcxxname} } {
post-destroot {
if {${os.platform} eq "darwin" && ${os.major} > 8} {
# 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 ftp://gcc.gnu.org/pub/gcc/snapshots/
set maj [lindex [split ${version} .-] 0]
livecheck.regex LATEST-${maj} -> (${maj}-\[0-9\]+)