cudaPackages: replace the fhs paths in pkg-config files

Cf. https://github.com/NixOS/nixpkgs/issues/224119
This commit is contained in:
Someone Serge 2023-12-21 23:59:09 +00:00
parent 470305582d
commit dad9c99082
No known key found for this signature in database
GPG Key ID: 7B0E3B1390D61DA4
2 changed files with 40 additions and 2 deletions

View File

@ -115,7 +115,10 @@ attrsets.filterAttrs (attr: _: (builtins.hasAttr attr prev)) {
moveToOutput "nvvm" "''${!outputBin}"
'';
meta = (oldAttrs.meta or {}) // {
# The nvcc and cicc binaries contain hard-coded references to /usr
allowFHSReferences = true;
meta = (oldAttrs.meta or { }) // {
mainProgram = "nvcc";
};
}

View File

@ -94,7 +94,12 @@ backendStdenv.mkDerivation (
# Traversed in the order of the outputs speficied in outputs;
# entries are skipped if they don't exist in outputs.
outputToPatterns = {
bin = ["bin"];
bin = [ "bin" ];
dev = [
"share/pkg-config"
"**/*.pc"
"**/*.cmake"
];
lib = [
"lib"
"lib64"
@ -116,6 +121,22 @@ backendStdenv.mkDerivation (
inherit (redistribRelease.${redistArch}) sha256;
};
postPatch = ''
if [[ -d pkg-config ]] ; then
mkdir -p share/pkg-config
mv pkg-config/* share/pkg-config/
rmdir pkg-config
fi
for pc in share/pkg-config/*.pc ; do
sed -i \
-e "s|^cudaroot\s*=.*\$|cudaroot=''${!outputDev}|" \
-e "s|^libdir\s*=.*/lib\$|libdir=''${!outputLib}/lib|" \
-e "s|^includedir\s*=.*/include\$|includedir=''${!outputDev}/include|" \
"$pc"
done
'';
# We do need some other phases, like configurePhase, so the multiple-output setup hook works.
dontBuild = true;
@ -197,6 +218,20 @@ backendStdenv.mkDerivation (
runHook postInstall
'';
doInstallCheck = true;
allowFHSReferences = false;
postInstallCheck = ''
echo "Executing postInstallCheck"
if [[ -z "''${allowFHSReferences-}" ]] ; then
mapfile -t outputPaths < <(for o in $(getAllOutputNames); do echo "''${!o}"; done)
if grep --max-count=5 --recursive --exclude=LICENSE /usr/ "''${outputPaths[@]}" ; then
echo "Detected references to /usr" >&2
exit 1
fi
fi
'';
# libcuda needs to be resolved during runtime
# NOTE: Due to the use of __structuredAttrs, we can't use a list for autoPatchelfIgnoreMissingDeps, since it
# will take only the first value. Instead, we produce a string with the values separated by spaces.