Skip to content

Commit 8c9c8ad

Browse files
committed
cmake: fix strictDeps
patch cmake to implement a NIXPKGS_CMAKE_PREFIX_PATH env variable which is similar to CMAKE_PREFIX_PATH except it is not searched for programs. This is required because cmake will search CMAKE_PREFIX_PATH for programs before PATH which is problematic as that means buildInputs gets searched before nativeBuildInputs which can break things when the binaries in PATH are covered or the order re-arranged.
1 parent f9a7cf5 commit 8c9c8ad

3 files changed

Lines changed: 34 additions & 1 deletion

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx
2+
index 8840cdcb..c34b7ee9 100644
3+
--- a/Source/cmFindBase.cxx
4+
+++ b/Source/cmFindBase.cxx
5+
@@ -280,6 +280,11 @@ void cmFindBase::FillCMakeEnvironmentPath()
6+
// Add CMAKE_*_PATH environment variables
7+
std::string var = cmStrCat("CMAKE_", this->CMakePathName, "_PATH");
8+
paths.AddEnvPrefixPath("CMAKE_PREFIX_PATH");
9+
+ if (this->CMakePathName != "PROGRAM") {
10+
+ // Like CMAKE_PREFIX_PATH except when searching for programs. Programs need
11+
+ // to be located via PATH
12+
+ paths.AddEnvPrefixPath("NIXPKGS_CMAKE_PREFIX_PATH");
13+
+ }
14+
paths.AddEnvPath(var);
15+
16+
if (this->CMakePathName == "PROGRAM") {
17+
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
18+
index 9b51b1ad..6acc676c 100644
19+
--- a/Source/cmFindPackageCommand.cxx
20+
+++ b/Source/cmFindPackageCommand.cxx
21+
@@ -2039,6 +2039,7 @@ void cmFindPackageCommand::FillPrefixesCMakeEnvironment()
22+
23+
// And now the general CMake environment variables
24+
paths.AddEnvPath("CMAKE_PREFIX_PATH");
25+
+ paths.AddEnvPath("NIXPKGS_CMAKE_PREFIX_PATH");
26+
if (this->DebugMode) {
27+
debugBuffer = cmStrCat(debugBuffer,
28+
"CMAKE_PREFIX_PATH env variable "

pkgs/by-name/cm/cmake/package.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ stdenv.mkDerivation (finalAttrs: {
5656
};
5757

5858
patches = [
59+
# Add NIXPKGS_CMAKE_PREFIX_PATH to cmake which is like CMAKE_PREFIX_PATH
60+
# except it is not searched for programs
61+
./000-nixpkgs-cmake-prefix-path.diff
5962
# Don't search in non-Nix locations such as /usr, but do search in our libc.
6063
./001-search-path.diff
6164
# Don't depend on frameworks.

pkgs/by-name/cm/cmake/setup-hook.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
addCMakeParams() {
2-
addToSearchPath CMAKE_PREFIX_PATH $1
2+
# NIXPKGS_CMAKE_PREFIX_PATH is like CMAKE_PREFIX_PATH except cmake
3+
# will not search it for programs
4+
addToSearchPath NIXPKGS_CMAKE_PREFIX_PATH $1
35
}
46

57
fixCmakeFiles() {

0 commit comments

Comments
 (0)