From b11d65c8508542efbd161c5922d51b55b431fe90 Mon Sep 17 00:00:00 2001 From: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> Date: Mon, 17 May 2021 17:12:39 +0200 Subject: [PATCH] pkg-config-wrapper: mangle PKG_CONFIG_PATH{,_FOR_BUILD} correctly Previously, mangleVarList would be used which would concatenate the variables using a space as a separator. Paths are however separated by `:` in PKG_CONFIG_PATH leading to entries being broken. This is fixed by introducing mangleVarListGeneric which allows us to specify the desired separator. Reproducer for the issue prior to this change: $ nix-shell -A pkgsLLVM.wayland [nix-shell] $ pkg-config --libs expat Package expat was not found in the pkg-config search path. Perhaps you should add the directory containing `expat.pc' to the PKG_CONFIG_PATH environment variable No package 'expat' found $ printf 'Host: %s\nBuild: %s' $PKG_CONFIG_PATH $PKG_CONFIG_PATH_FOR_BUILD Host: /nix/store/5h308a4ab8w7prcp8iflh5pnl78mayi2-expat-2.2.10-x86_64-unknown-linux-gnu-dev/lib/pkgconfig:/nix/store/z3y9ska2h4l1map25m195iq577g7g3gz-libxml2-x86_64-unknown-linux-gnu-2.9.12-dev/lib/pkgconfig:/nix/store/lbz5m1s0r7zn0cxvl21czfspli6ribzb-zlib-1.2.11-x86_64-unknown-linux-gnu-dev/lib/pkgconfig:/nix/store/rfhvp8r8n3ygpzh8j0l34lk8hwwi3z0h-libffi-3.3-x86_64-unknown-linux-gnu-dev/lib/pkgconfig Build: /nix/store/dw11ywy7qwfz53qisz0dggbgix88jah2-wayland-1.19.0-bin/lib/pkgconfig strace reveals the issue: stat("/nix/store/dw11ywy7qwfz53qisz0dggbgix88jah2-wayland-1.19.0-bin/lib/pkgconfig /nix/store/5h308a4ab8w7prcp8iflh5pnl78mayi2-expat-2.2.10-x86_64-unknown-linux-gnu-dev/lib/pkgconfig/expat-uninstalled.pc", 0x7fff49829fa0) = -1 ENOENT (No such file or directory) In the pkg-config wrapper $PKG_CONFIG_PATH_FOR_BUILD and $PKG_CONFIG_PATH are concatenated with a space which leads to two paths being messed up. This issue likely only affects native cross compilation. --- pkgs/build-support/pkg-config-wrapper/add-flags.sh | 2 +- pkgs/build-support/wrapper-common/utils.bash | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkgs/build-support/pkg-config-wrapper/add-flags.sh b/pkgs/build-support/pkg-config-wrapper/add-flags.sh index 35ecf62ca23..90aee712be6 100644 --- a/pkgs/build-support/pkg-config-wrapper/add-flags.sh +++ b/pkgs/build-support/pkg-config-wrapper/add-flags.sh @@ -6,7 +6,7 @@ var_templates_list=( accumulateRoles for var in "${var_templates_list[@]}"; do - mangleVarList "$var" ${role_suffixes[@]+"${role_suffixes[@]}"} + mangleVarListGeneric ":" "$var" ${role_suffixes[@]+"${role_suffixes[@]}"} done export NIX_PKG_CONFIG_WRAPPER_FLAGS_SET_@suffixSalt@=1 diff --git a/pkgs/build-support/wrapper-common/utils.bash b/pkgs/build-support/wrapper-common/utils.bash index 66b7c3f3e83..f773270f7de 100644 --- a/pkgs/build-support/wrapper-common/utils.bash +++ b/pkgs/build-support/wrapper-common/utils.bash @@ -13,7 +13,9 @@ accumulateRoles() { fi } -mangleVarList() { +mangleVarListGeneric() { + local sep="$1" + shift local var="$1" shift local -a role_suffixes=("$@") @@ -25,11 +27,15 @@ mangleVarList() { for suffix in "${role_suffixes[@]}"; do local inputVar="${var}${suffix}" if [ -v "$inputVar" ]; then - export ${outputVar}+="${!outputVar:+ }${!inputVar}" + export ${outputVar}+="${!outputVar:+$sep}${!inputVar}" fi done } +mangleVarList() { + mangleVarListGeneric " " "$@" +} + mangleVarBool() { local var="$1" shift