gnu: glibc@2.31: Fix build error.

* gnu/packages/patches/glibc-skip-c++.patch: New file.
* gnu/packages/base.scm (glibc-2.31)[source]: Use it.
* gnu/local.mk (dist_patch_DATA): Add it.
This commit is contained in:
Ludovic Courtès 2021-09-08 16:07:48 +02:00
parent 359740b0b3
commit 6d8c1a5e23
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
3 changed files with 33 additions and 0 deletions

View file

@ -1146,6 +1146,7 @@ dist_patch_DATA = \
%D%/packages/patches/glibc-locales.patch \ %D%/packages/patches/glibc-locales.patch \
%D%/packages/patches/glibc-locales-2.28.patch \ %D%/packages/patches/glibc-locales-2.28.patch \
%D%/packages/patches/glibc-reinstate-prlimit64-fallback.patch \ %D%/packages/patches/glibc-reinstate-prlimit64-fallback.patch \
%D%/packages/patches/glibc-skip-c++.patch \
%D%/packages/patches/glibc-versioned-locpath.patch \ %D%/packages/patches/glibc-versioned-locpath.patch \
%D%/packages/patches/glibc-2.29-git-updates.patch \ %D%/packages/patches/glibc-2.29-git-updates.patch \
%D%/packages/patches/glibc-2.29-supported-locales.patch \ %D%/packages/patches/glibc-2.29-supported-locales.patch \

View file

@ -946,6 +946,7 @@ (define-public glibc-2.31
(base32 (base32
"05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj")) "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
(patches (search-patches (patches (search-patches
"glibc-skip-c++.patch"
"glibc-ldd-powerpc.patch" "glibc-ldd-powerpc.patch"
"glibc-ldd-x86_64.patch" "glibc-ldd-x86_64.patch"
"glibc-dl-cache.patch" "glibc-dl-cache.patch"

View file

@ -0,0 +1,31 @@
When building, say, glibc 2.31 using a compiler that's itself linked
against 2.33, linking fails with:
gcc -Wl,-rpath-link=/tmp/guix-build-glibc-2.31.drv-0/build:/tmp/guix-build-glibc-2.31.drv-0/build/math:/tmp/guix-build-glibc-2.31.drv-0/build/elf:/tmp/guix-build-glibc-2.31.drv-0/build/dlfcn:/tmp/guix-build-glibc-2.31.drv-0/build/nss:/tmp/guix-build-glibc-2.31.drv-0/build/nis:/tmp/guix-build-glibc-2.31.drv-0/build/rt:/tmp/guix-build-glibc-2.31.drv-0/build/resolv:/tmp/guix-build-glibc-2.31.drv-0/build/mathvec:/tmp/guix-build-glibc-2.31.drv-0/build/support:/tmp/guix-build-glibc-2.31.drv-0/build/crypt:/tmp/guix-build-glibc-2.31.drv-0/build/nptl -nostdlib -nostartfiles -o /tmp/guix-build-glibc-2.31.drv-0/build/support/links-dso-program -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /tmp/guix-build-glibc-2.31.drv-0/build/csu/crt1.o /tmp/guix-build-glibc-2.31.drv-0/build/csu/crti.o `gcc --print-file-name=crtbegin.o` /tmp/guix-build-glibc-2.31.drv-0/build/support/links-dso-program.o -lstdc++ -lgcc -lgcc_s -Wl,-dynamic-linker=/gnu/store/...-glibc-2.31/lib/ld-linux-x86-64.so.2 /tmp/guix-build-glibc-2.31.drv-0/build/libc.so.6 /tmp/guix-build-glibc-2.31.drv-0/build/libc_nonshared.a -Wl,--as-needed /tmp/guix-build-glibc-2.31.drv-0/build/elf/ld.so -Wl,--no-as-needed -lgcc `gcc --print-file-name=crtend.o` /tmp/guix-build-glibc-2.31.drv-0/build/csu/crtn.o
ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `fstat64@GLIBC_2.33'
ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `lstat@GLIBC_2.33'
ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `stat@GLIBC_2.33'
collect2: error: ld returned 1 exit status
This is unsurprising given that libstdc++.so here is linked against 2.33,
whereas libc.so.6 here is 2.31.
This patch works around it by not building the offending program.
diff --git a/support/Makefile b/support/Makefile
index bb9889ef..6614943b 100644
--- a/support/Makefile
+++ b/support/Makefile
@@ -210,12 +210,7 @@ CFLAGS-support_paths.c = \
# -fexcess-precision=standard.
CFLAGS-timespec.c += -fexcess-precision=standard
-ifeq (,$(CXX))
LINKS_DSO_PROGRAM = links-dso-program-c
-else
-LINKS_DSO_PROGRAM = links-dso-program
-LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
-endif
ifeq (yes,$(have-selinux))
LDLIBS-$(LINKS_DSO_PROGRAM) += -lselinux