From b30b32a4931080280680aa5b439c0d4918553c56 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 9 May 2016 10:06:22 -0400 Subject: Drop find_(library|file|path) prefixes from PATH on non-Windows Since commit v3.3.0-rc1~430^2 (Teach find_(library|file|path) to get prefixes from PATH, 2015-02-18) we search in /include and /lib directories for prefixes with bin directories in the PATH environment variable. The motivation was to support MSYS, MinGW and similar Windows platforms in their default environments automatically. At the time this behavior was thought to be worthwhile in general. Suggested-by: Chuck Atkins --- Help/command/find_file.rst | 3 ++- Help/command/find_library.rst | 3 ++- Help/command/find_path.rst | 3 ++- .../dev/find-command-prefix-from-PATH-windows-only.rst | 12 ++++++++++++ Source/cmFindBase.cxx | 10 ++++++++-- Tests/RunCMake/find_file/RunCMakeTest.cmake | 4 +++- Tests/RunCMake/find_library/RunCMakeTest.cmake | 4 +++- Tests/RunCMake/find_path/RunCMakeTest.cmake | 4 +++- 8 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 Help/release/dev/find-command-prefix-from-PATH-windows-only.rst diff --git a/Help/command/find_file.rst b/Help/command/find_file.rst index bf7a919..e56097b 100644 --- a/Help/command/find_file.rst +++ b/Help/command/find_file.rst @@ -14,7 +14,8 @@ find_file .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH` .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH` -.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``INCLUDE``, +.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``INCLUDE``. + On Windows hosts: ``/include/`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|, and the directories in ``PATH`` itself. diff --git a/Help/command/find_library.rst b/Help/command/find_library.rst index 5d07574..31e6ec0 100644 --- a/Help/command/find_library.rst +++ b/Help/command/find_library.rst @@ -14,7 +14,8 @@ find_library .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_LIBRARY_PATH` .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH` -.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``LIB``, +.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``LIB``. + On Windows hosts: ``/lib/`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|, and the directories in ``PATH`` itself. diff --git a/Help/command/find_path.rst b/Help/command/find_path.rst index 4403cb5..76342d0 100644 --- a/Help/command/find_path.rst +++ b/Help/command/find_path.rst @@ -14,7 +14,8 @@ find_path .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH` .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH` -.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``INCLUDE``, +.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``INCLUDE``. + On Windows hosts: ``/include/`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|, and the directories in ``PATH`` itself. diff --git a/Help/release/dev/find-command-prefix-from-PATH-windows-only.rst b/Help/release/dev/find-command-prefix-from-PATH-windows-only.rst new file mode 100644 index 0000000..be6eb3e --- /dev/null +++ b/Help/release/dev/find-command-prefix-from-PATH-windows-only.rst @@ -0,0 +1,12 @@ +find-command-prefix-from-PATH-windows-only +------------------------------------------ + +* The :command:`find_library`, :command:`find_path`, and :command:`find_file` + commands no longer search in installation prefixes derived from the ``PATH`` + environment variable on non-Windows platforms. This behavior was added in + CMake 3.3 to support Windows hosts but has proven problematic on UNIX hosts. + Users that keep some ``/bin`` directories in the ``PATH`` just for + their tools do not necessarily want any supporting ``/lib`` + directories searched. One may set the ``CMAKE_PREFIX_PATH`` environment + variable with a :ref:`;-list ` of prefixes that are + to be searched. diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx index 90091c1..995097f 100644 --- a/Source/cmFindBase.cxx +++ b/Source/cmFindBase.cxx @@ -276,10 +276,16 @@ void cmFindBase::FillSystemEnvironmentPath() if(!this->EnvironmentPath.empty()) { paths.AddEnvPath(this->EnvironmentPath); +#if defined(_WIN32) || defined(__CYGWIN__) paths.AddEnvPrefixPath("PATH", true); + paths.AddEnvPath("PATH"); +#endif + } + else + { + // Add PATH + paths.AddEnvPath("PATH"); } - // Add PATH - paths.AddEnvPath("PATH"); paths.AddSuffixes(this->SearchPathSuffixes); } diff --git a/Tests/RunCMake/find_file/RunCMakeTest.cmake b/Tests/RunCMake/find_file/RunCMakeTest.cmake index 014f397..5ce96e0 100644 --- a/Tests/RunCMake/find_file/RunCMakeTest.cmake +++ b/Tests/RunCMake/find_file/RunCMakeTest.cmake @@ -1,3 +1,5 @@ include(RunCMake) -run_cmake(PrefixInPATH) +if(WIN32 OR CYGWIN) + run_cmake(PrefixInPATH) +endif() diff --git a/Tests/RunCMake/find_library/RunCMakeTest.cmake b/Tests/RunCMake/find_library/RunCMakeTest.cmake index 136031c..5733965 100644 --- a/Tests/RunCMake/find_library/RunCMakeTest.cmake +++ b/Tests/RunCMake/find_library/RunCMakeTest.cmake @@ -1,4 +1,6 @@ include(RunCMake) run_cmake(Created) -run_cmake(PrefixInPATH) +if(WIN32 OR CYGWIN) + run_cmake(PrefixInPATH) +endif() diff --git a/Tests/RunCMake/find_path/RunCMakeTest.cmake b/Tests/RunCMake/find_path/RunCMakeTest.cmake index 014f397..5ce96e0 100644 --- a/Tests/RunCMake/find_path/RunCMakeTest.cmake +++ b/Tests/RunCMake/find_path/RunCMakeTest.cmake @@ -1,3 +1,5 @@ include(RunCMake) -run_cmake(PrefixInPATH) +if(WIN32 OR CYGWIN) + run_cmake(PrefixInPATH) +endif() -- cgit v0.12