diff --git a/pkgs/by-name/cm/cmake/000-nixpkgs-cmake-prefix-path.diff b/pkgs/by-name/cm/cmake/000-nixpkgs-cmake-prefix-path.diff new file mode 100644 index 000000000000..4ebdcced055c --- /dev/null +++ b/pkgs/by-name/cm/cmake/000-nixpkgs-cmake-prefix-path.diff @@ -0,0 +1,28 @@ +diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx +index 8840cdcb..c34b7ee9 100644 +--- a/Source/cmFindBase.cxx ++++ b/Source/cmFindBase.cxx +@@ -280,6 +280,11 @@ void cmFindBase::FillCMakeEnvironmentPath() + // Add CMAKE_*_PATH environment variables + std::string var = cmStrCat("CMAKE_", this->CMakePathName, "_PATH"); + paths.AddEnvPrefixPath("CMAKE_PREFIX_PATH"); ++ if (this->CMakePathName != "PROGRAM") { ++ // Like CMAKE_PREFIX_PATH except when searching for programs. Programs need ++ // to be located via PATH ++ paths.AddEnvPrefixPath("NIXPKGS_CMAKE_PREFIX_PATH"); ++ } + paths.AddEnvPath(var); + + if (this->CMakePathName == "PROGRAM") { +diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx +index 9b51b1ad..6acc676c 100644 +--- a/Source/cmFindPackageCommand.cxx ++++ b/Source/cmFindPackageCommand.cxx +@@ -2039,6 +2039,7 @@ void cmFindPackageCommand::FillPrefixesCMakeEnvironment() + + // And now the general CMake environment variables + paths.AddEnvPath("CMAKE_PREFIX_PATH"); ++ paths.AddEnvPath("NIXPKGS_CMAKE_PREFIX_PATH"); + if (this->DebugMode) { + debugBuffer = cmStrCat(debugBuffer, + "CMAKE_PREFIX_PATH env variable " diff --git a/pkgs/by-name/cm/cmake/package.nix b/pkgs/by-name/cm/cmake/package.nix index c03c1055f724..ca0f1789a110 100644 --- a/pkgs/by-name/cm/cmake/package.nix +++ b/pkgs/by-name/cm/cmake/package.nix @@ -56,6 +56,9 @@ stdenv.mkDerivation (finalAttrs: { }; patches = [ + # Add NIXPKGS_CMAKE_PREFIX_PATH to cmake which is like CMAKE_PREFIX_PATH + # except it is not searched for programs + ./000-nixpkgs-cmake-prefix-path.diff # Don't search in non-Nix locations such as /usr, but do search in our libc. ./001-search-path.diff # Don't depend on frameworks. diff --git a/pkgs/by-name/cm/cmake/setup-hook.sh b/pkgs/by-name/cm/cmake/setup-hook.sh index 29b72ddda435..9ca4a6abeebc 100755 --- a/pkgs/by-name/cm/cmake/setup-hook.sh +++ b/pkgs/by-name/cm/cmake/setup-hook.sh @@ -1,5 +1,7 @@ addCMakeParams() { - addToSearchPath CMAKE_PREFIX_PATH $1 + # NIXPKGS_CMAKE_PREFIX_PATH is like CMAKE_PREFIX_PATH except cmake + # will not search it for programs + addToSearchPath NIXPKGS_CMAKE_PREFIX_PATH $1 } fixCmakeFiles() { @@ -151,22 +153,22 @@ makeCmakeFindLibs(){ for flag in ${NIX_CFLAGS_COMPILE-} ${NIX_LDFLAGS-}; do if test -n "$isystem_seen" && test -d "$flag"; then isystem_seen= - export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH-}${CMAKE_INCLUDE_PATH:+:}${flag}" + addToSearchPath CMAKE_INCLUDE_PATH "${flag}" elif test -n "$iframework_seen" && test -d "$flag"; then iframework_seen= - export CMAKE_FRAMEWORK_PATH="${CMAKE_FRAMEWORK_PATH-}${CMAKE_FRAMEWORK_PATH:+:}${flag}" + addToSearchPath CMAKE_FRAMEWORK_PATH "${flag}" else isystem_seen= iframework_seen= case $flag in -I*) - export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH-}${CMAKE_INCLUDE_PATH:+:}${flag:2}" + addToSearchPath CMAKE_INCLUDE_PATH "${flag:2}" ;; -L*) - export CMAKE_LIBRARY_PATH="${CMAKE_LIBRARY_PATH-}${CMAKE_LIBRARY_PATH:+:}${flag:2}" + addToSearchPath CMAKE_LIBRARY_PATH "${flag:2}" ;; -F*) - export CMAKE_FRAMEWORK_PATH="${CMAKE_FRAMEWORK_PATH-}${CMAKE_FRAMEWORK_PATH:+:}${flag:2}" + addToSearchPath CMAKE_FRAMEWORK_PATH "${flag:2}" ;; -isystem) isystem_seen=1 diff --git a/pkgs/by-name/me/meson/000-nixpkgs-cmake-prefix-path.patch b/pkgs/by-name/me/meson/000-nixpkgs-cmake-prefix-path.patch new file mode 100644 index 000000000000..c45106c4f9d1 --- /dev/null +++ b/pkgs/by-name/me/meson/000-nixpkgs-cmake-prefix-path.patch @@ -0,0 +1,12 @@ +diff --git a/mesonbuild/dependencies/data/CMakePathInfo.txt b/mesonbuild/dependencies/data/CMakePathInfo.txt +index 662ec58..4d5f4e4 100644 +--- a/mesonbuild/dependencies/data/CMakePathInfo.txt ++++ b/mesonbuild/dependencies/data/CMakePathInfo.txt +@@ -5,6 +5,7 @@ list(APPEND TMP_PATHS_LIST ${CMAKE_PREFIX_PATH}) + list(APPEND TMP_PATHS_LIST ${CMAKE_FRAMEWORK_PATH}) + list(APPEND TMP_PATHS_LIST ${CMAKE_APPBUNDLE_PATH}) + list(APPEND TMP_PATHS_LIST $ENV{CMAKE_PREFIX_PATH}) ++list(APPEND TMP_PATHS_LIST $ENV{NIXPKGS_CMAKE_PREFIX_PATH}) + list(APPEND TMP_PATHS_LIST $ENV{CMAKE_FRAMEWORK_PATH}) + list(APPEND TMP_PATHS_LIST $ENV{CMAKE_APPBUNDLE_PATH}) + list(APPEND TMP_PATHS_LIST ${CMAKE_SYSTEM_PREFIX_PATH}) diff --git a/pkgs/by-name/me/meson/package.nix b/pkgs/by-name/me/meson/package.nix index 962c80489c66..79ffae36a98f 100644 --- a/pkgs/by-name/me/meson/package.nix +++ b/pkgs/by-name/me/meson/package.nix @@ -31,6 +31,9 @@ python3.pkgs.buildPythonApplication rec { }; patches = [ + # Nixpkgs cmake uses NIXPKGS_CMAKE_PREFIX_PATH for the search path + ./000-nixpkgs-cmake-prefix-path.patch + # In typical distributions, RPATH is only needed for internal libraries so # meson removes everything else. With Nix, the locations of libraries # are not as predictable, therefore we need to keep them in the RPATH.