···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 };
5758 patches = [
00059 # Don't search in non-Nix locations such as /usr, but do search in our libc.
60 ./001-search-path.diff
61 # Don't depend on frameworks.
···56 };
5758 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
62 # Don't search in non-Nix locations such as /usr, but do search in our libc.
63 ./001-search-path.diff
64 # Don't depend on frameworks.
+8-6
pkgs/by-name/cm/cmake/setup-hook.sh
···1addCMakeParams() {
2- addToSearchPath CMAKE_PREFIX_PATH $1
003}
45fixCmakeFiles() {
···151 for flag in ${NIX_CFLAGS_COMPILE-} ${NIX_LDFLAGS-}; do
152 if test -n "$isystem_seen" && test -d "$flag"; then
153 isystem_seen=
154- export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH-}${CMAKE_INCLUDE_PATH:+:}${flag}"
155 elif test -n "$iframework_seen" && test -d "$flag"; then
156 iframework_seen=
157- export CMAKE_FRAMEWORK_PATH="${CMAKE_FRAMEWORK_PATH-}${CMAKE_FRAMEWORK_PATH:+:}${flag}"
158 else
159 isystem_seen=
160 iframework_seen=
161 case $flag in
162 -I*)
163- export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH-}${CMAKE_INCLUDE_PATH:+:}${flag:2}"
164 ;;
165 -L*)
166- export CMAKE_LIBRARY_PATH="${CMAKE_LIBRARY_PATH-}${CMAKE_LIBRARY_PATH:+:}${flag:2}"
167 ;;
168 -F*)
169- export CMAKE_FRAMEWORK_PATH="${CMAKE_FRAMEWORK_PATH-}${CMAKE_FRAMEWORK_PATH:+:}${flag:2}"
170 ;;
171 -isystem)
172 isystem_seen=1
···1addCMakeParams() {
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
5}
67fixCmakeFiles() {
···153 for flag in ${NIX_CFLAGS_COMPILE-} ${NIX_LDFLAGS-}; do
154 if test -n "$isystem_seen" && test -d "$flag"; then
155 isystem_seen=
156+ addToSearchPath CMAKE_INCLUDE_PATH "${flag}"
157 elif test -n "$iframework_seen" && test -d "$flag"; then
158 iframework_seen=
159+ addToSearchPath CMAKE_FRAMEWORK_PATH "${flag}"
160 else
161 isystem_seen=
162 iframework_seen=
163 case $flag in
164 -I*)
165+ addToSearchPath CMAKE_INCLUDE_PATH "${flag:2}"
166 ;;
167 -L*)
168+ addToSearchPath CMAKE_LIBRARY_PATH "${flag:2}"
169 ;;
170 -F*)
171+ addToSearchPath CMAKE_FRAMEWORK_PATH "${flag:2}"
172 ;;
173 -isystem)
174 isystem_seen=1
···31 };
3233 patches = [
00034 # In typical distributions, RPATH is only needed for internal libraries so
35 # meson removes everything else. With Nix, the locations of libraries
36 # are not as predictable, therefore we need to keep them in the RPATH.
···31 };
3233 patches = [
34+ # Nixpkgs cmake uses NIXPKGS_CMAKE_PREFIX_PATH for the search path
35+ ./000-nixpkgs-cmake-prefix-path.patch
36+37 # In typical distributions, RPATH is only needed for internal libraries so
38 # meson removes everything else. With Nix, the locations of libraries
39 # are not as predictable, therefore we need to keep them in the RPATH.