85 lines
2.4 KiB
Nix
85 lines
2.4 KiB
Nix
|
{ lib
|
||
|
, buildFHSEnv
|
||
|
, runCommand
|
||
|
, stdenv
|
||
|
, fetchurl
|
||
|
, dpkg
|
||
|
, glibc
|
||
|
, callPackage
|
||
|
}:
|
||
|
|
||
|
let
|
||
|
getSharedObjectFromDebian = sharedObjectName: src: stdenv.mkDerivation {
|
||
|
name = "${sharedObjectName}-fetcher";
|
||
|
inherit src;
|
||
|
nativeBuildInputs = [
|
||
|
dpkg
|
||
|
];
|
||
|
dontBuild = true;
|
||
|
dontConfigure = true;
|
||
|
dontFixup = true;
|
||
|
installPhase = ''
|
||
|
echo shared objects found are:
|
||
|
ls -l usr/lib/*/
|
||
|
cp usr/lib/*/${sharedObjectName} $out
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
makeSharedObjectTest = sharedObject: targetPkgs: let
|
||
|
lddFHSEnv = buildFHSEnv {
|
||
|
name = "ldd-with-ncurses-FHS-env";
|
||
|
inherit targetPkgs;
|
||
|
runScript = "ldd";
|
||
|
};
|
||
|
ldd-in-FHS = "${lddFHSEnv}/bin/${lddFHSEnv.name}";
|
||
|
ldd = "${lib.getBin glibc}/bin/ldd";
|
||
|
find_libFHSEnv = buildFHSEnv {
|
||
|
name = "ls-with-ncurses-FHS-env";
|
||
|
targetPkgs = p: [
|
||
|
p.ncurses5
|
||
|
];
|
||
|
runScript = "find /lib/ -executable";
|
||
|
};
|
||
|
find_lib-in-FHS = "${find_libFHSEnv}/bin/${find_libFHSEnv.name}";
|
||
|
in runCommand "FHS-lib-test" {} ''
|
||
|
echo original ldd output is:
|
||
|
${ldd} ${sharedObject}
|
||
|
lddOutput="$(${ldd-in-FHS} ${sharedObject})"
|
||
|
echo ldd output inside FHS is:
|
||
|
echo "$lddOutput"
|
||
|
if echo $lddOutput | grep -q "not found"; then
|
||
|
echo "shared object could not find all dependencies in the FHS!"
|
||
|
echo The libraries below where found in the FHS:
|
||
|
${find_lib-in-FHS}
|
||
|
exit 1
|
||
|
else
|
||
|
echo $lddOutput > $out
|
||
|
fi
|
||
|
'';
|
||
|
|
||
|
in {
|
||
|
# This test proves an issue with buildFHSEnv - don't expect it to succeed,
|
||
|
# this is discussed in https://github.com/NixOS/nixpkgs/pull/279844 .
|
||
|
libtinfo = makeSharedObjectTest (getSharedObjectFromDebian "libedit.so.2.0.70" (fetchurl {
|
||
|
url = "mirror://debian/pool/main/libe/libedit/libedit2_3.1-20221030-2_amd64.deb";
|
||
|
hash = "sha256-HPFKvycW0yedsS0GV6VzfPcAdKHnHTvfcyBmJePInOY=";
|
||
|
})) (p: let
|
||
|
ncurses' = p.ncurses.overrideAttrs (old: {
|
||
|
configureFlags = old.configureFlags ++ [ "--with-termlib" ];
|
||
|
postFixup = "";
|
||
|
});
|
||
|
in [
|
||
|
(ncurses'.override { unicodeSupport = false; })
|
||
|
p.libbsd
|
||
|
]);
|
||
|
|
||
|
liblzma = makeSharedObjectTest (getSharedObjectFromDebian "libxml2.so.2.9.14" (fetchurl {
|
||
|
url = "mirror://debian/pool/main/libx/libxml2/libxml2_2.9.14+dfsg-1.3~deb12u1_amd64.deb";
|
||
|
hash = "sha256-NbdstwOPwclAIEpPBfM/+3nQJzU85Gk5fZrc+Pmz4ac=";
|
||
|
})) (p: [
|
||
|
p.xz
|
||
|
p.zlib
|
||
|
p.icu72
|
||
|
]);
|
||
|
}
|