diff --git a/ChangeLog b/ChangeLog index 0d8e9b5..f9a27f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Version 0.7.2 +------------- + * Recognise GNU ld on Fedora + Version 0.7.1 ------------- * Don't copy symbol tables when combining BSD-variant ar archives (#97) diff --git a/VERSION b/VERSION index 39e898a..7486fdb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.1 +0.7.2 diff --git a/tools/please_cc/cctool/test_data/fedora/43/gcc-15-gnuld.test_data b/tools/please_cc/cctool/test_data/fedora/43/gcc-15-gnuld.test_data new file mode 100644 index 0000000..20a201e --- /dev/null +++ b/tools/please_cc/cctool/test_data/fedora/43/gcc-15-gnuld.test_data @@ -0,0 +1,22 @@ +#expected: cc="GCC 15.3.1" ld="GNU ld 2.45.1" +#stdout: +GNU ld version 2.45.1-5.fc43 + +#stderr: +Using built-in specs. +COLLECT_GCC=/usr/bin/gcc +COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-redhat-linux/15/lto-wrapper +Target: aarch64-redhat-linux +Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,cobol,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.3.1-build/gcc-15.3.1-20260722/obj-aarch64-redhat-linux/isl-install --enable-gnu-indirect-function --build=aarch64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp --disable-libquadmath +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 15.3.1 20260722 (Red Hat 15.3.1-1) (GCC) +COMPILER_PATH=/tmp/ld.3973004810/:/usr/libexec/gcc/aarch64-redhat-linux/15/:/usr/libexec/gcc/aarch64-redhat-linux/15/:/usr/libexec/gcc/aarch64-redhat-linux/:/usr/lib/gcc/aarch64-redhat-linux/15/:/usr/lib/gcc/aarch64-redhat-linux/ +LIBRARY_PATH=/tmp/ld.3973004810/:/usr/lib/gcc/aarch64-redhat-linux/15/:/usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/aarch64-redhat-linux/15/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-B' '/tmp/ld.3973004810' '-v' '-mlittle-endian' '-mabi=lp64' '-dumpdir' 'a.' + /usr/libexec/gcc/aarch64-redhat-linux/15/collect2 -plugin /usr/libexec/gcc/aarch64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/aarch64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/ccW8WRmM.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/aarch64-redhat-linux/15/crtbegin.o -L/tmp/ld.3973004810 -L/usr/lib/gcc/aarch64-redhat-linux/15 -L/usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/aarch64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/aarch64-redhat-linux/15/crtend.o /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crtn.o +collect2 version 15.3.1 20260722 (Red Hat 15.3.1-1) +/tmp/ld.3973004810/ld -plugin /usr/libexec/gcc/aarch64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/aarch64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/ccW8WRmM.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/aarch64-redhat-linux/15/crtbegin.o -L/tmp/ld.3973004810 -L/usr/lib/gcc/aarch64-redhat-linux/15 -L/usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/aarch64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/aarch64-redhat-linux/15/crtend.o /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crtn.o +/tmp/ld.3973004810/ld: /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crt1.o: in function `__wrap_main': +(.text+0x38): undefined reference to `main' +collect2: error: ld returned 1 exit status diff --git a/tools/please_cc/cctool/test_data/fedora/43/gcc-15-gold.test_data b/tools/please_cc/cctool/test_data/fedora/43/gcc-15-gold.test_data new file mode 100644 index 0000000..f350852 --- /dev/null +++ b/tools/please_cc/cctool/test_data/fedora/43/gcc-15-gold.test_data @@ -0,0 +1,21 @@ +#expected: cc="GCC 15.3.1" ld="GNU gold 1.16" +#stdout: +GNU gold (version 2.45.1-5.fc43) 1.16 + +#stderr: +Using built-in specs. +COLLECT_GCC=/usr/bin/gcc +COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-redhat-linux/15/lto-wrapper +Target: aarch64-redhat-linux +Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,cobol,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.3.1-build/gcc-15.3.1-20260722/obj-aarch64-redhat-linux/isl-install --enable-gnu-indirect-function --build=aarch64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp --disable-libquadmath +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 15.3.1 20260722 (Red Hat 15.3.1-1) (GCC) +COMPILER_PATH=/tmp/ld.1058397786/:/usr/libexec/gcc/aarch64-redhat-linux/15/:/usr/libexec/gcc/aarch64-redhat-linux/15/:/usr/libexec/gcc/aarch64-redhat-linux/:/usr/lib/gcc/aarch64-redhat-linux/15/:/usr/lib/gcc/aarch64-redhat-linux/ +LIBRARY_PATH=/tmp/ld.1058397786/:/usr/lib/gcc/aarch64-redhat-linux/15/:/usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/aarch64-redhat-linux/15/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-B' '/tmp/ld.1058397786' '-v' '-mlittle-endian' '-mabi=lp64' '-dumpdir' 'a.' + /usr/libexec/gcc/aarch64-redhat-linux/15/collect2 -plugin /usr/libexec/gcc/aarch64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/aarch64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/ccbL7bfz.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/aarch64-redhat-linux/15/crtbegin.o -L/tmp/ld.1058397786 -L/usr/lib/gcc/aarch64-redhat-linux/15 -L/usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/aarch64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/aarch64-redhat-linux/15/crtend.o /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crtn.o +collect2 version 15.3.1 20260722 (Red Hat 15.3.1-1) +/tmp/ld.1058397786/ld -plugin /usr/libexec/gcc/aarch64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/aarch64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/ccbL7bfz.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/aarch64-redhat-linux/15/crtbegin.o -L/tmp/ld.1058397786 -L/usr/lib/gcc/aarch64-redhat-linux/15 -L/usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/aarch64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/aarch64-redhat-linux/15/crtend.o /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crtn.o +/usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/crt1.o:function _start:(.text+0x38): error: undefined reference to 'main' +collect2: error: ld returned 1 exit status diff --git a/tools/please_cc/cctool/test_data/fedora/43/gnuld.test_data b/tools/please_cc/cctool/test_data/fedora/43/gnuld.test_data new file mode 100644 index 0000000..3e280fc --- /dev/null +++ b/tools/please_cc/cctool/test_data/fedora/43/gnuld.test_data @@ -0,0 +1,5 @@ +#expected: ld="GNU ld 2.45.1" +#stdout: +GNU ld version 2.45.1-5.fc43 + +#stderr: diff --git a/tools/please_cc/cctool/test_data/fedora/43/gold.test_data b/tools/please_cc/cctool/test_data/fedora/43/gold.test_data new file mode 100644 index 0000000..1ce4976 --- /dev/null +++ b/tools/please_cc/cctool/test_data/fedora/43/gold.test_data @@ -0,0 +1,5 @@ +#expected: ld="GNU gold 1.16" +#stdout: +GNU gold (version 2.45.1-5.fc43) 1.16 + +#stderr: diff --git a/tools/please_cc/cctool/test_data/fedora/43/toolspec.json b/tools/please_cc/cctool/test_data/fedora/43/toolspec.json new file mode 100644 index 0000000..fca531f --- /dev/null +++ b/tools/please_cc/cctool/test_data/fedora/43/toolspec.json @@ -0,0 +1,11 @@ +# These packages should all be installed from the official Fedora 43 repositories: +# gcc binutils binutils-gold +{ + "compilers": { + "/usr/bin/gcc": {"id": "gcc-15", "name": "GCC 15.3.1"} + }, + "linkers": { + "/usr/bin/ld.bfd": {"id": "gnuld", "name": "GNU ld 2.45.1"}, + "/usr/bin/ld.gold": {"id": "gold", "name": "GNU gold 1.16"} + } +} diff --git a/tools/please_cc/cctool/tool.go b/tools/please_cc/cctool/tool.go index db27687..ce5d0cd 100644 --- a/tools/please_cc/cctool/tool.go +++ b/tools/please_cc/cctool/tool.go @@ -137,7 +137,13 @@ var matchers = map[stream]matcher{ // tools (e.g. the GNU ld build in FreeBSD's devel/binutils package identifies itself simply as "GNU ld (GNU // Binutils)", while the ld build in Ubuntu's binutils package identifies itself as "GNU ld (GNU Binutils for // Ubuntu)"). This regular expression is vendor-agnostic. - { Linker, GNUld, regexp.MustCompile(`^GNU ld \(.*\) (?P[\d.]+)$`) }, + // + // Red Hat-derived distributions patch GNU ld to identify itself with the version number of the binutils package in + // which it was distributed, in place of the parenthesised vendor string (e.g. the ld build in Fedora's binutils + // package identifies itself as "GNU ld version 2.45.1-5.fc43"). The package release suffix is not part of the + // upstream version number and is therefore excluded from the "version" group, which is also why this regular + // expression - uniquely among those here - is not anchored at the end of the line. + { Linker, GNUld, regexp.MustCompile(`^GNU ld (?:\(.*\) |version )(?P\d+(?:\.\d+)*)`) }, // LLVM contains a configure-time option that enables vendors to prepend optional, arbitrary strings to the names of // its tools (e.g. the LLD builds in FreeBSD's devel/llvm* packages identify themselves simply as "LLD", while the LLD // builds in Ubuntu's lld-* packages identify themselves as "Ubuntu LLD"). This regular expression is vendor-agnostic.