summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2023-11-23 12:28:49 +0100
committergithub-actions[bot] <github-actions[bot]@users.noreply.github.com>2023-11-30 10:47:15 +0000
commit9b181d04af3deec682e93434206805619b4c8c0c (patch)
tree086270df62a09c660a1c4268980a53c69a2e0980
parentnixosTests.jitsi-meet: test `cfg.caddy.enable` (diff)
downloadnixpkgs-9b181d04af3deec682e93434206805619b4c8c0c.tar.gz
pkgsStatic.stdenv: fix custom CMake LINKER_LANGUAGEorigin/backport-269429-to-release-23.11
If a CMake target has a non-default LINKER_LANGUAGE set, CMake will manually add the libraries it has detected that language's compiler as linking implicitly. When it does this, it'll pass -Bstatic and -Bdynamic options based on the vibes it gets from each such detected library. This in itself isn't a problem, because the compiler toolchain, or our wrapper, or something, seems to be smart enough to ignore -Bdynamic for those libraries. But it does create a problem if the compiler adds extra libraries to the linker command line after that final -Bdynamic, because those will be linked dynamically. Since our compiler is static by default, CMake should reset to -Bstatic after it's done manually specifying libraries, but CMake didn't actually know that our compiler is static by default. The fix for that is to tell it, like so. Until recently, this problem was difficult to notice, because it would result binaries that worked, but that were dynamically linked. Since e08ce498f03f ("cc-wrapper: Account for NIX_LDFLAGS and NIX_CFLAGS_LINK in linkType"), though, -Wl,-dynamic-linker is no longer mistakenly passed for executables that are supposed to be static, so they end up created with a /lib interpreter path, and so don't run at all on NixOS. This fixes pkgsStatic.graphite2. (cherry picked from commit f7a8d0096181913c6da51c13dc219d86b971c3d0)
-rw-r--r--pkgs/stdenv/generic/make-derivation.nix2
1 files changed, 2 insertions, 0 deletions
diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix
index 63d02c8f0857..faa83507893f 100644
--- a/pkgs/stdenv/generic/make-derivation.nix
+++ b/pkgs/stdenv/generic/make-derivation.nix
@@ -427,6 +427,8 @@ else let
"-DCMAKE_HOST_SYSTEM_VERSION=${stdenv.buildPlatform.uname.release}"
] ++ optionals (stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
"-DCMAKE_CROSSCOMPILING_EMULATOR=env"
+ ] ++ lib.optionals stdenv.hostPlatform.isStatic [
+ "-DCMAKE_LINK_SEARCH_START_STATIC=ON"
]);
mesonFlags =