{ 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 ]); }