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.

+34 -1
+28
pkgs/by-name/cm/cmake/000-nixpkgs-cmake-prefix-path.diff
··· 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 "
+3
pkgs/by-name/cm/cmake/package.nix
··· 56 56 }; 57 57 58 58 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 59 62 # Don't search in non-Nix locations such as /usr, but do search in our libc. 60 63 ./001-search-path.diff 61 64 # Don't depend on frameworks.
+3 -1
pkgs/by-name/cm/cmake/setup-hook.sh
··· 1 1 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 3 5 } 4 6 5 7 fixCmakeFiles() {