buildFHSEnv: don't overwrite env vars to /usr prefix

Overwriting needlessly breaks using buildFHSEnv programs inside other
derivations / build envs. Fix it by prepending the FHS paths instead.

(I think the FHS paths should have the lowest priority, by suffixing
them, but prefixing is a less disruptive change, so do that for now.)

Test setup:

  $ NIXPKGS_ALLOW_UNFREE=1 nix-build -A quartus-prime-lite

Before:

  $ NIX_CFLAGS_COMPILE="-I /path" NIX_CFLAGS_LINK="-L /path" NIX_LDFLAGS="-L /path" PKG_CONFIG_PATH=/path ACLOCAL_PATH=/path ./result/bin/quartus-prime-lite bash -c 'printf "NIX_CFLAGS_COMPILE=$NIX_CFLAGS_COMPILE\nNIX_CFLAGS_LINK=$NIX_CFLAGS_LINK\nNIX_LDFLAGS=$NIX_LDFLAGS\nPKG_CONFIG_PATH=$PKG_CONFIG_PATH\nACLOCAL_PATH=$ACLOCAL_PATH\n"'
  NIX_CFLAGS_COMPILE=-idirafter /usr/include
  NIX_CFLAGS_LINK=-L/usr/lib -L/usr/lib32
  NIX_LDFLAGS=-L/usr/lib -L/usr/lib32
  PKG_CONFIG_PATH=/usr/lib/pkgconfig
  ACLOCAL_PATH=/usr/share/aclocal

After:

  $ NIX_CFLAGS_COMPILE="-I /path" NIX_CFLAGS_LINK="-L /path" NIX_LDFLAGS="-L /path" PKG_CONFIG_PATH=/path ACLOCAL_PATH=/path ./result/bin/quartus-prime-lite bash -c 'printf "NIX_CFLAGS_COMPILE=$NIX_CFLAGS_COMPILE\nNIX_CFLAGS_LINK=$NIX_CFLAGS_LINK\nNIX_LDFLAGS=$NIX_LDFLAGS\nPKG_CONFIG_PATH=$PKG_CONFIG_PATH\nACLOCAL_PATH=$ACLOCAL_PATH\n"'
  NIX_CFLAGS_COMPILE=-idirafter /usr/include -I /path
  NIX_CFLAGS_LINK=-L/usr/lib -L/usr/lib32 -L /path
  NIX_LDFLAGS=-L/usr/lib -L/usr/lib32 -L /path
  PKG_CONFIG_PATH=/usr/lib/pkgconfig:/path
  ACLOCAL_PATH=/usr/share/aclocal:/path

(I also included GST_PLUGIN_SYSTEM_PATH_1_0, although it's not a "build"
oriented variable.)
This commit is contained in:
Bjørn Forsman 2026-01-27 20:52:41 +01:00
parent 70cd18d925
commit dfd0be8cd2

View file

@ -125,15 +125,16 @@ let
unset NIX_ENFORCE_PURITY
export NIX_BINTOOLS_WRAPPER_TARGET_HOST_${stdenv.cc.suffixSalt}=1
export NIX_CC_WRAPPER_TARGET_HOST_${stdenv.cc.suffixSalt}=1
export NIX_CFLAGS_COMPILE='-idirafter /usr/include'
export NIX_CFLAGS_LINK='-L/usr/lib -L/usr/lib32'
export NIX_LDFLAGS='-L/usr/lib -L/usr/lib32'
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
export ACLOCAL_PATH=/usr/share/aclocal
export NIX_CFLAGS_COMPILE="-idirafter /usr/include"''${NIX_CFLAGS_COMPILE:+" $NIX_CFLAGS_COMPILE"}
export NIX_CFLAGS_LINK="-L/usr/lib -L/usr/lib32"''${NIX_CFLAGS_LINK:+" $NIX_CFLAGS_LINK"}
export NIX_LDFLAGS="-L/usr/lib -L/usr/lib32"''${NIX_LDFLAGS:+" $NIX_LDFLAGS"}
export PKG_CONFIG_PATH=/usr/lib/pkgconfig''${PKG_CONFIG_PATH:+":$PKG_CONFIG_PATH"}
export ACLOCAL_PATH=/usr/share/aclocal''${ACLOCAL_PATH:+":$ACLOCAL_PATH"}
# GStreamer searches for plugins relative to its real binary's location
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/bd97973ce0f2c5495bcda5cccd4f7ef7dcb7febc
export GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/gstreamer-1.0:/usr/lib32/gstreamer-1.0
export GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/gstreamer-1.0:/usr/lib32/gstreamer-1.0''${GST_PLUGIN_SYSTEM_PATH_1_0:+":$GST_PLUGIN_SYSTEM_PATH_1_0"}
${profile}
'';