Bladeren bron

Find: Provide global controls for the `NO_[]_PATH` call options

Robert Maynard 6 jaren geleden
bovenliggende
commit
02f527c66a
38 gewijzigde bestanden met toevoegingen van 374 en 21 verwijderingen
  1. 11 5
      Help/command/FIND_XXX.txt
  2. 4 5
      Help/command/find_file.rst
  3. 4 5
      Help/command/find_library.rst
  4. 4 5
      Help/command/find_path.rst
  5. 2 1
      Help/command/find_program.rst
  6. 5 0
      Help/manual/cmake-variables.7.rst
  7. 11 0
      Help/release/dev/global-controls-over-find-locations.rst
  8. 11 0
      Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst
  9. 11 0
      Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst
  10. 11 0
      Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst
  11. 11 0
      Help/variable/CMAKE_FIND_USE_PACAKGE_ROOT_PATH.rst
  12. 11 0
      Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst
  13. 3 0
      Source/cmFindBase.cxx
  14. 21 0
      Source/cmFindCommon.cxx
  15. 3 0
      Source/cmFindCommon.h
  16. 9 0
      Tests/RunCMake/find_file/FromPATHEnv-stdout-cygwin.txt
  17. 9 0
      Tests/RunCMake/find_file/FromPATHEnv-stdout-windows.txt
  18. 9 0
      Tests/RunCMake/find_file/FromPATHEnv-stdout.txt
  19. 24 0
      Tests/RunCMake/find_file/FromPATHEnv.cmake
  20. 6 0
      Tests/RunCMake/find_file/FromPrefixPath-stdout.txt
  21. 17 0
      Tests/RunCMake/find_file/FromPrefixPath.cmake
  22. 2 0
      Tests/RunCMake/find_file/RunCMakeTest.cmake
  23. 6 0
      Tests/RunCMake/find_library/FromPATHEnv-stdout-cygwin.txt
  24. 6 0
      Tests/RunCMake/find_library/FromPATHEnv-stdout-windows.txt
  25. 6 0
      Tests/RunCMake/find_library/FromPATHEnv-stdout.txt
  26. 22 0
      Tests/RunCMake/find_library/FromPATHEnv.cmake
  27. 6 0
      Tests/RunCMake/find_library/FromPrefixPath-stdout.txt
  28. 24 0
      Tests/RunCMake/find_library/FromPrefixPath.cmake
  29. 2 0
      Tests/RunCMake/find_library/RunCMakeTest.cmake
  30. 9 0
      Tests/RunCMake/find_path/FromPATHEnv-stdout-cygwin.txt
  31. 9 0
      Tests/RunCMake/find_path/FromPATHEnv-stdout-windows.txt
  32. 9 0
      Tests/RunCMake/find_path/FromPATHEnv-stdout.txt
  33. 25 0
      Tests/RunCMake/find_path/FromPATHEnv.cmake
  34. 1 0
      Tests/RunCMake/find_path/RunCMakeTest.cmake
  35. 3 0
      Tests/RunCMake/find_program/EnvAndHints-stdout.txt
  36. 23 0
      Tests/RunCMake/find_program/EnvAndHints.cmake
  37. 2 0
      Tests/RunCMake/find_program/RelAndAbsPath-stdout.txt
  38. 22 0
      Tests/RunCMake/find_program/RelAndAbsPath.cmake

+ 11 - 5
Help/command/FIND_XXX.txt

@@ -89,7 +89,8 @@ If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
    searched after paths from the current module,
    searched after paths from the current module,
    i.e. ``<CurrentPackage>_ROOT``, ``ENV{<CurrentPackage>_ROOT}``,
    i.e. ``<CurrentPackage>_ROOT``, ``ENV{<CurrentPackage>_ROOT}``,
    ``<ParentPackage>_ROOT``, ``ENV{<ParentPackage>_ROOT}``, etc.
    ``<ParentPackage>_ROOT``, ``ENV{<ParentPackage>_ROOT}``, etc.
-   This can be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed.
+   This can be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed or by setting
+   the :variable:`CMAKE_FIND_USE_PACAKGE_ROOT_PATH` to ``FALSE``.
    See policy :policy:`CMP0074`.
    See policy :policy:`CMP0074`.
 
 
    * |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX|
    * |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX|
@@ -97,7 +98,8 @@ If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
 2. Search paths specified in cmake-specific cache variables.
 2. Search paths specified in cmake-specific cache variables.
    These are intended to be used on the command line with a ``-DVAR=value``.
    These are intended to be used on the command line with a ``-DVAR=value``.
    The values are interpreted as :ref:`semicolon-separated lists <CMake Language Lists>`.
    The values are interpreted as :ref:`semicolon-separated lists <CMake Language Lists>`.
-   This can be skipped if ``NO_CMAKE_PATH`` is passed.
+   This can be skipped if ``NO_CMAKE_PATH`` is passed or by setting the
+   :variable:`CMAKE_FIND_USE_CMAKE_PATH` to ``FALSE``.
 
 
    * |CMAKE_PREFIX_PATH_XXX|
    * |CMAKE_PREFIX_PATH_XXX|
    * |CMAKE_XXX_PATH|
    * |CMAKE_XXX_PATH|
@@ -107,7 +109,8 @@ If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
    These are intended to be set in the user's shell configuration,
    These are intended to be set in the user's shell configuration,
    and therefore use the host's native path separator
    and therefore use the host's native path separator
    (``;`` on Windows and ``:`` on UNIX).
    (``;`` on Windows and ``:`` on UNIX).
-   This can be skipped if ``NO_CMAKE_ENVIRONMENT_PATH`` is passed.
+   This can be skipped if ``NO_CMAKE_ENVIRONMENT_PATH`` is passed or
+   by setting the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` to ``FALSE``.
 
 
    * |CMAKE_PREFIX_PATH_XXX|
    * |CMAKE_PREFIX_PATH_XXX|
    * |CMAKE_XXX_PATH|
    * |CMAKE_XXX_PATH|
@@ -119,13 +122,16 @@ If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
    Hard-coded guesses should be specified with the ``PATHS`` option.
    Hard-coded guesses should be specified with the ``PATHS`` option.
 
 
 5. Search the standard system environment variables.
 5. Search the standard system environment variables.
-   This can be skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is an argument.
+   This can be skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is passed or by
+   setting the :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` to ``FALSE``.
 
 
    * |SYSTEM_ENVIRONMENT_PATH_XXX|
    * |SYSTEM_ENVIRONMENT_PATH_XXX|
+   * |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX|
 
 
 6. Search cmake variables defined in the Platform files
 6. Search cmake variables defined in the Platform files
    for the current system.  This can be skipped if ``NO_CMAKE_SYSTEM_PATH``
    for the current system.  This can be skipped if ``NO_CMAKE_SYSTEM_PATH``
-   is passed.
+   is passed or by setting the :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`
+   to ``FALSE``.
 
 
    * |CMAKE_SYSTEM_PREFIX_PATH_XXX|
    * |CMAKE_SYSTEM_PREFIX_PATH_XXX|
    * |CMAKE_SYSTEM_XXX_PATH|
    * |CMAKE_SYSTEM_XXX_PATH|

+ 4 - 5
Help/command/find_file.rst

@@ -17,11 +17,10 @@ find_file
 .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH`
 .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH`
 .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
 .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
 
 
-.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``INCLUDE``.
-   On Windows hosts:
-   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-   is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|, and the
-   directories in ``PATH`` itself.
+.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``PATH`` and ``INCLUDE``.
+.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
+      ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
 
 
 .. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
 .. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
    ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
    ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`

+ 4 - 5
Help/command/find_library.rst

@@ -17,11 +17,10 @@ find_library
 .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_LIBRARY_PATH`
 .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_LIBRARY_PATH`
 .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
 .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
 
 
-.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``LIB``.
-   On Windows hosts:
-   ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
-   and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|,
-   and the directories in ``PATH`` itself.
+.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``PATH`` and ``INCLUDE``.
+.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
+      ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
 
 
 .. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
 .. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
    ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
    ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,

+ 4 - 5
Help/command/find_path.rst

@@ -17,11 +17,10 @@ find_path
 .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH`
 .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH`
 .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
 .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
 
 
-.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: Directories in ``INCLUDE``.
-   On Windows hosts:
-   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-   is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|, and the
-   directories in ``PATH`` itself.
+.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``PATH`` and ``INCLUDE``.
+.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
+      ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
 
 
 .. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
 .. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
    ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
    ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`

+ 2 - 1
Help/command/find_program.rst

@@ -15,7 +15,8 @@ find_program
 .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_PROGRAM_PATH`
 .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_PROGRAM_PATH`
 .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_APPBUNDLE_PATH`
 .. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_APPBUNDLE_PATH`
 
 
-.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: ``PATH``
+.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``PATH`` itself.
+.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts no extra search paths are included
 
 
 .. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
 .. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
    |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR|
    |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR|

+ 5 - 0
Help/manual/cmake-variables.7.rst

@@ -180,6 +180,11 @@ Variables that Change Behavior
    /variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
    /variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
    /variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
    /variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
    /variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
    /variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
+   /variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH
+   /variable/CMAKE_FIND_USE_CMAKE_PATH
+   /variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH
+   /variable/CMAKE_FIND_USE_PACAKGE_ROOT_PATH
+   /variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
    /variable/CMAKE_FRAMEWORK_PATH
    /variable/CMAKE_FRAMEWORK_PATH
    /variable/CMAKE_IGNORE_PATH
    /variable/CMAKE_IGNORE_PATH
    /variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE
    /variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE

+ 11 - 0
Help/release/dev/global-controls-over-find-locations.rst

@@ -0,0 +1,11 @@
+global-controls-over-find-locations
+-----------------------------------
+
+* The :command:`find_file`, :command:`find_library`, :command:`find_path`,
+  and :command:`find_program` commands have learned to check the following
+  variables to control searching
+  * :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` - Controls the searching the cmake-specific environment variables.
+  * :variable:`CMAKE_FIND_USE_CMAKE_PATH` - Controls the searching the cmake-specific cache variables.
+  * :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH` - Controls the searching cmake platform specific variables.
+  * :variable:`CMAKE_FIND_USE_PACAKGE_ROOT_PATH` - Controls the searching of :variable:`<PackageName>_ROOT` variables.
+  * :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` - Controls the searching the standard system environment variables.

+ 11 - 0
Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst

@@ -0,0 +1,11 @@
+CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH
+-------------------------------------
+
+Controls the searching the cmake-specific environment variables by the :command:`find_program`,
+:command:`find_library`, :command:`find_file`, :command:`find_package`, and :command:`find_path`.
+This is useful in cross-compiling environments.
+
+By default this this is set to ``TRUE``.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`, :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`, and :variable:`CMAKE_FIND_USE_PACAKGE_ROOT_PATH` variables.

+ 11 - 0
Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst

@@ -0,0 +1,11 @@
+CMAKE_FIND_USE_CMAKE_PATH
+-------------------------
+
+Controls the searching the cmake-specific cache variables by the :command:`find_program`,
+:command:`find_library`, :command:`find_file`, :command:`find_package`, and :command:`find_path`.
+This is useful in cross-compiling environments.
+
+By default this this is set to ``TRUE``.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`, :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`, and :variable:`CMAKE_FIND_USE_PACAKGE_ROOT_PATH` variables.

+ 11 - 0
Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst

@@ -0,0 +1,11 @@
+CMAKE_FIND_USE_CMAKE_SYSTEM_PATH
+--------------------------------
+
+Controls the searching cmake platform specific variables by the :command:`find_program`,
+:command:`find_library`, :command:`find_file`, :command:`find_package`, and :command:`find_path`.
+This is useful in cross-compiling environments.
+
+By default this this is set to ``TRUE``.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`, :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`, and :variable:`CMAKE_FIND_USE_PACAKGE_ROOT_PATH` variables.

+ 11 - 0
Help/variable/CMAKE_FIND_USE_PACAKGE_ROOT_PATH.rst

@@ -0,0 +1,11 @@
+CMAKE_FIND_USE_PACAKGE_ROOT_PATH
+--------------------------------
+
+Controls the searching of :variable:`<PackageName>_ROOT` variables by the :command:`find_program`,
+:command:`find_library`, :command:`find_file`, :command:`find_package`, and :command:`find_path`.
+This is useful in cross-compiling environments.
+
+By default this this is set to ``TRUE``.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`, :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`, and :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` variables.

+ 11 - 0
Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst

@@ -0,0 +1,11 @@
+CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
+--------------------------------------
+
+Controls the searching the standard system environment variables by the :command:`find_program`,
+:command:`find_library`, :command:`find_file`, :command:`find_package`, and :command:`find_path`.
+This is useful in cross-compiling environments.
+
+By default this this is set to ``TRUE``.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`, :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`, and :variable:`CMAKE_FIND_USE_PACAKGE_ROOT_PATH` variables.

+ 3 - 0
Source/cmFindBase.cxx

@@ -67,6 +67,9 @@ bool cmFindBase::ParseArguments(std::vector<std::string> const& argsIn)
   }
   }
   this->AlreadyInCache = false;
   this->AlreadyInCache = false;
 
 
+  // Find what search path locations have been enabled/disable
+  this->SelectDefaultSearchModes();
+
   // Find the current root path mode.
   // Find the current root path mode.
   this->SelectDefaultRootPathMode();
   this->SelectDefaultRootPathMode();
 
 

+ 21 - 0
Source/cmFindCommon.cxx

@@ -3,6 +3,7 @@
 #include "cmFindCommon.h"
 #include "cmFindCommon.h"
 
 
 #include <algorithm>
 #include <algorithm>
+#include <array>
 #include <string.h>
 #include <string.h>
 #include <utility>
 #include <utility>
 
 
@@ -144,6 +145,26 @@ void cmFindCommon::SelectDefaultMacMode()
   }
   }
 }
 }
 
 
+void cmFindCommon::SelectDefaultSearchModes()
+{
+  const std::array<std::pair<bool&, std::string>, 5> search_paths = {
+    { { this->NoPackageRootPath, "CMAKE_FIND_USE_PACAKGE_ROOT_PATH" },
+      { this->NoCMakePath, "CMAKE_FIND_USE_CMAKE_PATH" },
+      { this->NoCMakeEnvironmentPath,
+        "CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH" },
+      { this->NoSystemEnvironmentPath,
+        "CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH" },
+      { this->NoCMakeSystemPath, "CMAKE_FIND_USE_CMAKE_SYSTEM_PATH" } }
+  };
+
+  for (auto& path : search_paths) {
+    const char* def = this->Makefile->GetDefinition(path.second);
+    if (def) {
+      path.first = !cmSystemTools::IsOn(def);
+    }
+  }
+}
+
 void cmFindCommon::RerootPaths(std::vector<std::string>& paths)
 void cmFindCommon::RerootPaths(std::vector<std::string>& paths)
 {
 {
 #if 0
 #if 0

+ 3 - 0
Source/cmFindCommon.h

@@ -90,6 +90,9 @@ protected:
   /** Compute the current default bundle/framework search policy.  */
   /** Compute the current default bundle/framework search policy.  */
   void SelectDefaultMacMode();
   void SelectDefaultMacMode();
 
 
+  /** Compute the current default search modes based on global variables.  */
+  void SelectDefaultSearchModes();
+
   // Path arguments prior to path manipulation routines
   // Path arguments prior to path manipulation routines
   std::vector<std::string> UserHintsArgs;
   std::vector<std::string> UserHintsArgs;
   std::vector<std::string> UserGuessArgs;
   std::vector<std::string> UserGuessArgs;

+ 9 - 0
Tests/RunCMake/find_file/FromPATHEnv-stdout-cygwin.txt

@@ -0,0 +1,9 @@
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='.*/Tests/RunCMake/find_file/include/PrefixInPATH.h'
+-- PrefixInPATH_File='.*/Tests/RunCMake/find_file/include/PrefixInPATH.h'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'

+ 9 - 0
Tests/RunCMake/find_file/FromPATHEnv-stdout-windows.txt

@@ -0,0 +1,9 @@
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='.*/Tests/RunCMake/find_file/include/PrefixInPATH.h'
+-- PrefixInPATH_File='.*/Tests/RunCMake/find_file/include/PrefixInPATH.h'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'

+ 9 - 0
Tests/RunCMake/find_file/FromPATHEnv-stdout.txt

@@ -0,0 +1,9 @@
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='.*/Tests/RunCMake/find_file/include/PrefixInPATH.h'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'

+ 24 - 0
Tests/RunCMake/find_file/FromPATHEnv.cmake

@@ -0,0 +1,24 @@
+set(ENV_PATH "$ENV{PATH}")
+foreach(path "/does_not_exist" "/include" "")
+  unset(PrefixInPATH_File CACHE)
+  set(ENV{PATH} "${CMAKE_CURRENT_SOURCE_DIR}${path}")
+  find_file(PrefixInPATH_File NAMES PrefixInPATH.h)
+  message(STATUS "PrefixInPATH_File='${PrefixInPATH_File}'")
+endforeach()
+
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
+foreach(path "/does_not_exist" "/include" "")
+  unset(PrefixInPATH_File CACHE)
+  set(ENV{PATH} "${CMAKE_CURRENT_SOURCE_DIR}${path}")
+  find_file(PrefixInPATH_File NAMES PrefixInPATH.h)
+  message(STATUS "PrefixInPATH_File='${PrefixInPATH_File}'")
+endforeach()
+
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH ON)
+foreach(path "/does_not_exist" "/include" "")
+  unset(PrefixInPATH_File CACHE)
+  set(ENV{PATH} "${CMAKE_CURRENT_SOURCE_DIR}${path}")
+  find_file(PrefixInPATH_File NAMES PrefixInPATH.h NO_SYSTEM_ENVIRONMENT_PATH)
+  message(STATUS "PrefixInPATH_File='${PrefixInPATH_File}'")
+endforeach()
+set(ENV{PATH} "${ENV_PATH}")

+ 6 - 0
Tests/RunCMake/find_file/FromPrefixPath-stdout.txt

@@ -0,0 +1,6 @@
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='.*/Tests/RunCMake/find_file/include/PrefixInPATH.h'
+-- PrefixInPATH_File='.*/Tests/RunCMake/find_file/include/PrefixInPATH.h'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'
+-- PrefixInPATH_File='PrefixInPATH_File-NOTFOUND'

+ 17 - 0
Tests/RunCMake/find_file/FromPrefixPath.cmake

@@ -0,0 +1,17 @@
+set(ENV{PATH} "")
+foreach(path "/does_not_exist" "/include" "")
+  unset(PrefixInPATH_File CACHE)
+  set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}${path}")
+  find_file(PrefixInPATH_File NAMES PrefixInPATH.h)
+  message(STATUS "PrefixInPATH_File='${PrefixInPATH_File}'")
+endforeach()
+
+set(CMAKE_FIND_USE_CMAKE_PATH OFF)
+set(CMAKE_PREFIX_PATH )
+foreach(path "/does_not_exist" "/include" "")
+  unset(PrefixInPATH_File CACHE)
+  set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}${path}")
+  find_file(PrefixInPATH_File NAMES PrefixInPATH.h)
+  message(STATUS "PrefixInPATH_File='${PrefixInPATH_File}'")
+endforeach()
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH ON)

+ 2 - 0
Tests/RunCMake/find_file/RunCMakeTest.cmake

@@ -1,3 +1,5 @@
 include(RunCMake)
 include(RunCMake)
 
 
+run_cmake(FromPATHEnv)
+run_cmake(FromPrefixPath)
 run_cmake(PrefixInPATH)
 run_cmake(PrefixInPATH)

+ 6 - 0
Tests/RunCMake/find_library/FromPATHEnv-stdout-cygwin.txt

@@ -0,0 +1,6 @@
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='[^']*/Tests/RunCMake/find_library/FromPATHEnv-build/lib/libcreated.a'
+-- CREATED_LIBRARY='[^']*/Tests/RunCMake/find_library/FromPATHEnv-build/lib/libcreated.a'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'

+ 6 - 0
Tests/RunCMake/find_library/FromPATHEnv-stdout-windows.txt

@@ -0,0 +1,6 @@
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='[^']*/Tests/RunCMake/find_library/FromPATHEnv-build/lib/libcreated.a'
+-- CREATED_LIBRARY='[^']*/Tests/RunCMake/find_library/FromPATHEnv-build/lib/libcreated.a'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'

+ 6 - 0
Tests/RunCMake/find_library/FromPATHEnv-stdout.txt

@@ -0,0 +1,6 @@
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='[^']*/Tests/RunCMake/find_library/FromPATHEnv-build/lib/libcreated.a'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'

+ 22 - 0
Tests/RunCMake/find_library/FromPATHEnv.cmake

@@ -0,0 +1,22 @@
+list(APPEND CMAKE_FIND_LIBRARY_PREFIXES lib)
+list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .a)
+set(ENV_PATH "$ENV{PATH}")
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib/libcreated.a" "created")
+
+foreach(path "/does_not_exist" "/lib" "")
+  unset(CREATED_LIBRARY CACHE)
+  set(ENV{PATH} "${CMAKE_CURRENT_BINARY_DIR}${path}")
+  find_library(CREATED_LIBRARY NAMES created)
+  message(STATUS "CREATED_LIBRARY='${CREATED_LIBRARY}'")
+endforeach()
+
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
+foreach(path "/does_not_exist" "/lib" "")
+  unset(CREATED_LIBRARY CACHE)
+  set(ENV{PATH} "${CMAKE_CURRENT_BINARY_DIR}${path}")
+  find_library(CREATED_LIBRARY NAMES created)
+  message(STATUS "CREATED_LIBRARY='${CREATED_LIBRARY}'")
+endforeach()
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH ON)
+set(ENV{PATH} "${ENV_PATH}")

+ 6 - 0
Tests/RunCMake/find_library/FromPrefixPath-stdout.txt

@@ -0,0 +1,6 @@
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='[^']*/Tests/RunCMake/find_library/FromPrefixPath-build/lib/libcreated.a'
+-- CREATED_LIBRARY='[^']*/Tests/RunCMake/find_library/FromPrefixPath-build/lib/libcreated.a'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'
+-- CREATED_LIBRARY='CREATED_LIBRARY-NOTFOUND'

+ 24 - 0
Tests/RunCMake/find_library/FromPrefixPath.cmake

@@ -0,0 +1,24 @@
+list(APPEND CMAKE_FIND_LIBRARY_PREFIXES lib)
+list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .a)
+set(ENV_PATH "$ENV{PATH}")
+set(ENV{PATH} "")
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib/libcreated.a" "created")
+
+foreach(path "/does_not_exist" "/lib" "")
+  unset(CREATED_LIBRARY CACHE)
+  set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_BINARY_DIR}${path}")
+  find_library(CREATED_LIBRARY NAMES created)
+  message(STATUS "CREATED_LIBRARY='${CREATED_LIBRARY}'")
+endforeach()
+
+set(CMAKE_FIND_USE_CMAKE_PATH OFF)
+set(CMAKE_PREFIX_PATH )
+foreach(path "/does_not_exist" "/lib" "")
+  unset(CREATED_LIBRARY CACHE)
+  set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_BINARY_DIR}${path}")
+  find_library(CREATED_LIBRARY NAMES created)
+  message(STATUS "CREATED_LIBRARY='${CREATED_LIBRARY}'")
+endforeach()
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH ON)
+set(ENV{PATH} "${ENV_PATH}")

+ 2 - 0
Tests/RunCMake/find_library/RunCMakeTest.cmake

@@ -1,6 +1,8 @@
 include(RunCMake)
 include(RunCMake)
 
 
 run_cmake(Created)
 run_cmake(Created)
+run_cmake(FromPrefixPath)
+run_cmake(FromPATHEnv)
 if(CMAKE_HOST_UNIX)
 if(CMAKE_HOST_UNIX)
   run_cmake(LibArchLink)
   run_cmake(LibArchLink)
 endif()
 endif()

+ 9 - 0
Tests/RunCMake/find_path/FromPATHEnv-stdout-cygwin.txt

@@ -0,0 +1,9 @@
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='.*/Tests/RunCMake/find_path/include'
+-- PATH_IN_ENV_PATH='.*/Tests/RunCMake/find_path/include'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'

+ 9 - 0
Tests/RunCMake/find_path/FromPATHEnv-stdout-windows.txt

@@ -0,0 +1,9 @@
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='.*/Tests/RunCMake/find_path/include'
+-- PATH_IN_ENV_PATH='.*/Tests/RunCMake/find_path/include'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'

+ 9 - 0
Tests/RunCMake/find_path/FromPATHEnv-stdout.txt

@@ -0,0 +1,9 @@
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='.*/Tests/RunCMake/find_path/include'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'
+-- PATH_IN_ENV_PATH='PATH_IN_ENV_PATH-NOTFOUND'

+ 25 - 0
Tests/RunCMake/find_path/FromPATHEnv.cmake

@@ -0,0 +1,25 @@
+set(ENV_PATH "$ENV{PATH}")
+foreach(path "/does_not_exist" "/include" "")
+  unset(PATH_IN_ENV_PATH CACHE)
+  set(ENV{PATH} "${CMAKE_CURRENT_SOURCE_DIR}${path}")
+  find_path(PATH_IN_ENV_PATH NAMES PrefixInPATH.h)
+  message(STATUS "PATH_IN_ENV_PATH='${PATH_IN_ENV_PATH}'")
+endforeach()
+
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
+foreach(path "/does_not_exist" "/include" "")
+  unset(PATH_IN_ENV_PATH CACHE)
+  set(ENV{PATH} "${CMAKE_CURRENT_SOURCE_DIR}${path}")
+  find_path(PATH_IN_ENV_PATH NAMES PrefixInPATH.h)
+  message(STATUS "PATH_IN_ENV_PATH='${PATH_IN_ENV_PATH}'")
+endforeach()
+
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH ON)
+foreach(path "/does_not_exist" "/include" "")
+  unset(PATH_IN_ENV_PATH CACHE)
+  set(ENV{PATH} "${CMAKE_CURRENT_SOURCE_DIR}${path}")
+  find_path(PATH_IN_ENV_PATH NAMES PrefixInPATH.h NO_SYSTEM_ENVIRONMENT_PATH)
+  message(STATUS "PATH_IN_ENV_PATH='${PATH_IN_ENV_PATH}'")
+endforeach()
+
+set(ENV{PATH} "${ENV_PATH}")

+ 1 - 0
Tests/RunCMake/find_path/RunCMakeTest.cmake

@@ -1,5 +1,6 @@
 include(RunCMake)
 include(RunCMake)
 
 
+run_cmake(FromPATHEnv)
 run_cmake(PrefixInPATH)
 run_cmake(PrefixInPATH)
 
 
 if(APPLE)
 if(APPLE)

+ 3 - 0
Tests/RunCMake/find_program/EnvAndHints-stdout.txt

@@ -1 +1,4 @@
 -- PROG='[^']*/Tests/RunCMake/find_program/A/testAandB'
 -- PROG='[^']*/Tests/RunCMake/find_program/A/testAandB'
+-- PROG='PROG-NOTFOUND'
+-- PROG='[^']*/Tests/RunCMake/find_program/B/testAandB'
+-- PROG='[^']*/Tests/RunCMake/find_program/A/testAandB'

+ 23 - 0
Tests/RunCMake/find_program/EnvAndHints.cmake

@@ -1,8 +1,31 @@
+
 set(ENV_PATH "$ENV{PATH}")
 set(ENV_PATH "$ENV{PATH}")
 set(ENV{PATH} ${CMAKE_CURRENT_SOURCE_DIR}/A)
 set(ENV{PATH} ${CMAKE_CURRENT_SOURCE_DIR}/A)
+find_program(PROG
+  NAMES testAandB
+  )
+message(STATUS "PROG='${PROG}'")
+unset(PROG CACHE)
+
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
+find_program(PROG
+  NAMES testAandB
+  )
+message(STATUS "PROG='${PROG}'")
+unset(PROG CACHE)
+
+find_program(PROG
+  NAMES testAandB
+  HINTS ${CMAKE_CURRENT_SOURCE_DIR}/B ${CMAKE_CURRENT_SOURCE_DIR}/A
+  )
+message(STATUS "PROG='${PROG}'")
+unset(PROG CACHE)
+set(ENV{PATH} "${ENV_PATH}")
+
 find_program(PROG
 find_program(PROG
   NAMES testAandB
   NAMES testAandB
   HINTS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B
   HINTS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B
   )
   )
 message(STATUS "PROG='${PROG}'")
 message(STATUS "PROG='${PROG}'")
+unset(PROG CACHE)
 set(ENV{PATH} "${ENV_PATH}")
 set(ENV{PATH} "${ENV_PATH}")

+ 2 - 0
Tests/RunCMake/find_program/RelAndAbsPath-stdout.txt

@@ -1,6 +1,8 @@
 -- PROG_ABS='PROG_ABS-NOTFOUND'
 -- PROG_ABS='PROG_ABS-NOTFOUND'
 -- PROG_ABS_NPD='PROG_ABS_NPD-NOTFOUND'
 -- PROG_ABS_NPD='PROG_ABS_NPD-NOTFOUND'
 -- PROG_CWD='PROG_CWD-NOTFOUND'
 -- PROG_CWD='PROG_CWD-NOTFOUND'
+-- PROG_CWD='PROG_CWD-NOTFOUND'
+-- PROG_CWD='[^']*/Tests/RunCMake/find_program/testCWD'
 -- PROG_CWD_NPD='PROG_CWD_NPD-NOTFOUND'
 -- PROG_CWD_NPD='PROG_CWD_NPD-NOTFOUND'
 -- PROG_CWD_DOT='[^']*/Tests/RunCMake/find_program/testCWD'
 -- PROG_CWD_DOT='[^']*/Tests/RunCMake/find_program/testCWD'
 -- PROG_CWD_DOT_NPD='[^']*/Tests/RunCMake/find_program/testCWD'
 -- PROG_CWD_DOT_NPD='[^']*/Tests/RunCMake/find_program/testCWD'

+ 22 - 0
Tests/RunCMake/find_program/RelAndAbsPath.cmake

@@ -38,6 +38,28 @@ find_program(PROG_CWD
   )
   )
 message(STATUS "PROG_CWD='${PROG_CWD}'")
 message(STATUS "PROG_CWD='${PROG_CWD}'")
 
 
+
+set(CMAKE_PREFIX_PATH ".")
+# On some platforms / dashboards the current working
+# directory can be in PATH or other search locations
+# so disable all searching to make sure this fails
+set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH OFF)
+set(CMAKE_FIND_USE_CMAKE_PATH OFF)
+set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH OFF)
+set(CMAKE_FIND_USE_PACAKGE_ROOT_PATH OFF)
+set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
+find_program(PROG_CWD
+  NAMES testCWD
+  )
+message(STATUS "PROG_CWD='${PROG_CWD}'")
+
+set(CMAKE_PREFIX_PATH ".")
+set(CMAKE_FIND_USE_CMAKE_PATH ON)
+find_program(PROG_CWD
+  NAMES testCWD
+  )
+message(STATUS "PROG_CWD='${PROG_CWD}'")
+
 find_program(PROG_CWD_NPD
 find_program(PROG_CWD_NPD
   NAMES testCWD
   NAMES testCWD
   NAMES_PER_DIR
   NAMES_PER_DIR