glibc: depend on libidn2 (and libunistring, transitively)
It's a bit hacky, but ATM I can't see any better way for glibc >= 2.28. Signed-off-by: Luka Blaskovic <lblasc@tvbeat.com>
This commit is contained in:
parent
0c75f51304
commit
2aea16c4d6
@ -22,6 +22,7 @@
|
|||||||
, fetchurl, fetchpatch
|
, fetchurl, fetchpatch
|
||||||
, linuxHeaders ? null
|
, linuxHeaders ? null
|
||||||
, gd ? null, libpng ? null
|
, gd ? null, libpng ? null
|
||||||
|
, libidn2
|
||||||
, bison
|
, bison
|
||||||
, python3
|
, python3
|
||||||
}:
|
}:
|
||||||
@ -132,6 +133,15 @@ stdenv.mkDerivation ({
|
|||||||
# nscd needs libgcc, and we don't want it dynamically linked
|
# nscd needs libgcc, and we don't want it dynamically linked
|
||||||
# because we don't want it to depend on bootstrap-tools libs.
|
# because we don't want it to depend on bootstrap-tools libs.
|
||||||
echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile
|
echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile
|
||||||
|
|
||||||
|
# Ensure that libidn2 is found.
|
||||||
|
patch -p 1 <<EOF
|
||||||
|
--- a/inet/idna.c
|
||||||
|
+++ b/inet/idna.c
|
||||||
|
@@ -25,1 +25,1 @@
|
||||||
|
-#define LIBIDN2_SONAME "libidn2.so.0"
|
||||||
|
+#define LIBIDN2_SONAME "${lib.getLib libidn2}/lib/libidn2.so.0"
|
||||||
|
EOF
|
||||||
'';
|
'';
|
||||||
|
|
||||||
configureFlags =
|
configureFlags =
|
||||||
|
@ -227,6 +227,27 @@ in
|
|||||||
gcc-unwrapped coreutils gnugrep
|
gcc-unwrapped coreutils gnugrep
|
||||||
perl gnum4 bison;
|
perl gnum4 bison;
|
||||||
dejagnu = super.dejagnu.overrideAttrs (a: { doCheck = false; } );
|
dejagnu = super.dejagnu.overrideAttrs (a: { doCheck = false; } );
|
||||||
|
|
||||||
|
# We need libidn2 and its dependency libunistring as glibc dependency.
|
||||||
|
# To avoid the cycle, we build against bootstrap libc, nuke references,
|
||||||
|
# and use the result as input for our final glibc. We also pass this pair
|
||||||
|
# through, so the final package-set uses exactly the same builds.
|
||||||
|
libunistring = super.libunistring.overrideAttrs (attrs: {
|
||||||
|
postFixup = attrs.postFixup or "" + ''
|
||||||
|
${self.nukeReferences}/bin/nuke-refs "$out"/lib/lib*.so.*.*
|
||||||
|
'';
|
||||||
|
# Apparently iconv won't work with bootstrap glibc, but it will be used
|
||||||
|
# with glibc built later where we keep *this* build of libunistring,
|
||||||
|
# so we need to trick it into supporting libiconv.
|
||||||
|
am_cv_func_iconv_works = "yes";
|
||||||
|
});
|
||||||
|
libidn2 = super.libidn2.overrideAttrs (attrs: {
|
||||||
|
postFixup = attrs.postFixup or "" + ''
|
||||||
|
${self.nukeReferences}/bin/nuke-refs -e '${lib.getLib self.libunistring}' \
|
||||||
|
"$out"/lib/lib*.so.*.*
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
# This also contains the full, dynamically linked, final Glibc.
|
# This also contains the full, dynamically linked, final Glibc.
|
||||||
binutils = prevStage.binutils.override {
|
binutils = prevStage.binutils.override {
|
||||||
# Rewrap the binutils with the new glibc, so both the next
|
# Rewrap the binutils with the new glibc, so both the next
|
||||||
@ -247,7 +268,7 @@ in
|
|||||||
inherit (prevStage)
|
inherit (prevStage)
|
||||||
ccWrapperStdenv
|
ccWrapperStdenv
|
||||||
binutils coreutils gnugrep
|
binutils coreutils gnugrep
|
||||||
perl patchelf linuxHeaders gnum4 bison;
|
perl patchelf linuxHeaders gnum4 bison libidn2 libunistring;
|
||||||
${localSystem.libc} = getLibc prevStage;
|
${localSystem.libc} = getLibc prevStage;
|
||||||
# Link GCC statically against GMP etc. This makes sense because
|
# Link GCC statically against GMP etc. This makes sense because
|
||||||
# these builds of the libraries are only used by GCC, so it
|
# these builds of the libraries are only used by GCC, so it
|
||||||
@ -277,7 +298,7 @@ in
|
|||||||
# because gcc (since JAR support) already depends on zlib, and
|
# because gcc (since JAR support) already depends on zlib, and
|
||||||
# then if we already have a zlib we want to use that for the
|
# then if we already have a zlib we want to use that for the
|
||||||
# other purposes (binutils and top-level pkgs) too.
|
# other purposes (binutils and top-level pkgs) too.
|
||||||
inherit (prevStage) gettext gnum4 bison gmp perl texinfo zlib linuxHeaders;
|
inherit (prevStage) gettext gnum4 bison gmp perl texinfo zlib linuxHeaders libidn2 libunistring;
|
||||||
${localSystem.libc} = getLibc prevStage;
|
${localSystem.libc} = getLibc prevStage;
|
||||||
binutils = super.binutils.override {
|
binutils = super.binutils.override {
|
||||||
# Don't use stdenv's shell but our own
|
# Don't use stdenv's shell but our own
|
||||||
@ -363,7 +384,7 @@ in
|
|||||||
]
|
]
|
||||||
# Library dependencies
|
# Library dependencies
|
||||||
++ map getLib (
|
++ map getLib (
|
||||||
[ attr acl zlib pcre ]
|
[ attr acl zlib pcre libidn2 libunistring ]
|
||||||
++ lib.optional (gawk.libsigsegv != null) gawk.libsigsegv
|
++ lib.optional (gawk.libsigsegv != null) gawk.libsigsegv
|
||||||
)
|
)
|
||||||
# More complicated cases
|
# More complicated cases
|
||||||
@ -378,7 +399,7 @@ in
|
|||||||
inherit (prevStage)
|
inherit (prevStage)
|
||||||
gzip bzip2 xz bash coreutils diffutils findutils gawk
|
gzip bzip2 xz bash coreutils diffutils findutils gawk
|
||||||
gnumake gnused gnutar gnugrep gnupatch patchelf
|
gnumake gnused gnutar gnugrep gnupatch patchelf
|
||||||
attr acl zlib pcre;
|
attr acl zlib pcre libunistring libidn2;
|
||||||
${localSystem.libc} = getLibc prevStage;
|
${localSystem.libc} = getLibc prevStage;
|
||||||
} // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
|
} // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
|
||||||
# Need to get rid of these when cross-compiling.
|
# Need to get rid of these when cross-compiling.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user