Skip to content

Commit

Permalink
Merge #175785: libidn2: hack to avoid referencing bootstrap tools
Browse files Browse the repository at this point in the history
...into staging
  • Loading branch information
vcunat committed Jun 17, 2022
2 parents db60718 + 088b291 commit 5ffd19d
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
1 change: 1 addition & 0 deletions pkgs/development/libraries/libidn2/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
};

strictDeps = true;
# Beware: non-bootstrap libidn2 is overridden by ./hack.nix
outputs = [ "bin" "dev" "out" "info" "devdoc" ];

patches = optional stdenv.isDarwin ./fix-error-darwin.patch;
Expand Down
30 changes: 30 additions & 0 deletions pkgs/development/libraries/libidn2/no-bootstrap-reference.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{ stdenv, lib, libidn2, libunistring, runCommandLocal, patchelf }:
# Construct a copy of libidn2.* where all (transitive) libc references (in .bin)
# get replaced by a new one, so that there's no reference to bootstrap tools.
runCommandLocal
"${libidn2.pname}-${libidn2.version}"
{
outputs = [ "bin" "dev" "out" ];
passthru = {
inherit (libidn2) out info devdoc; # no need to touch these store paths
};
}
''
cp -r '${libidn2.bin}' "$bin"
chmod +w "$bin"/bin/*
patchelf \
--set-interpreter '${stdenv.cc.bintools.dynamicLinker}' \
--set-rpath '${lib.concatMapStringsSep ":" (p: lib.getLib p + "/lib")
[ stdenv.cc.libc libunistring libidn2 ]}' \
"$bin"/bin/*
cp -r '${libidn2.dev}' "$dev"
chmod +w "$dev"/nix-support/propagated-build-inputs
substituteInPlace "$dev"/nix-support/propagated-build-inputs \
--replace '${libidn2.bin}' "$bin"
substituteInPlace "$dev"/lib/pkgconfig/libidn2.pc \
--replace '${libidn2.dev}' "$dev"
ln -s '${libidn2.out}' "$out" # it's hard to be without any $out
''

10 changes: 9 additions & 1 deletion pkgs/stdenv/linux/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -436,8 +436,16 @@ in
inherit (prevStage)
gzip bzip2 xz bash coreutils diffutils findutils gawk
gnumake gnused gnutar gnugrep gnupatch patchelf
attr acl zlib pcre libunistring libidn2;
attr acl zlib pcre libunistring;
${localSystem.libc} = getLibc prevStage;

# Hack: avoid libidn2.{bin,dev} referencing bootstrap tools. There's a logical cycle.
libidn2 = import ../../development/libraries/libidn2/no-bootstrap-reference.nix {
inherit lib;
inherit (prevStage) libidn2;
inherit (self) stdenv runCommandLocal patchelf libunistring;
};

} // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
# Need to get rid of these when cross-compiling.
inherit (prevStage) binutils binutils-unwrapped;
Expand Down

0 comments on commit 5ffd19d

Please sign in to comment.