Prechádzať zdrojové kódy

Merge topic 'add-CMAKE_FIND_NO_INSTALL_PREFIX'

fe057ab Allow disabling adding the install prefix to the prefix search path.
Brad King 12 rokov pred
rodič
commit
e065decd43

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

@@ -90,6 +90,7 @@ Variables that Change Behavior
    /variable/CMAKE_FIND_LIBRARY_PREFIXES
    /variable/CMAKE_FIND_LIBRARY_SUFFIXES
    /variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE
+   /variable/CMAKE_FIND_NO_INSTALL_PREFIX
    /variable/CMAKE_IGNORE_PATH
    /variable/CMAKE_INCLUDE_PATH
    /variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME

+ 13 - 0
Help/variable/CMAKE_FIND_NO_INSTALL_PREFIX.rst

@@ -0,0 +1,13 @@
+CMAKE_FIND_NO_INSTALL_PREFIX
+----------------------------
+
+Ignore the :variable:`CMAKE_INSTALL_PREFIX` when searching for assets.
+
+CMake adds the :variable:`CMAKE_INSTALL_PREFIX` to the
+:variable:`CMAKE_SYSTEM_PREFIX_PATH` by default. This variable may be set
+on the command line to control that behavior.
+
+Set :variable:`CMAKE_FIND_NO_INSTALL_PREFIX` to TRUE to tell find_package not
+to search in the :variable:`CMAKE_INSTALL_PREFIX` by default.  Note that the
+prefix may still be searched for other reasons, such as being the same prefix
+as the CMake installation, or for being a built-in system prefix.

+ 6 - 3
Modules/Platform/UnixPaths.cmake

@@ -37,10 +37,13 @@ list(APPEND CMAKE_SYSTEM_PREFIX_PATH
 
   # CMake install location
   "${_CMAKE_INSTALL_DIR}"
-
-  # Project install destination.
-  "${CMAKE_INSTALL_PREFIX}"
   )
+if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
+  list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+    # Project install destination.
+    "${CMAKE_INSTALL_PREFIX}"
+  )
+endif()
 
 # List common include file locations not under the common prefixes.
 list(APPEND CMAKE_SYSTEM_INCLUDE_PATH

+ 12 - 6
Modules/Platform/WindowsPaths.cmake

@@ -73,11 +73,13 @@ get_filename_component(_CMAKE_INSTALL_DIR "${CMAKE_ROOT}" PATH)
 get_filename_component(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH)
 list(APPEND CMAKE_SYSTEM_PREFIX_PATH "${_CMAKE_INSTALL_DIR}")
 
-# Add other locations.
-list(APPEND CMAKE_SYSTEM_PREFIX_PATH
-  # Project install destination.
-  "${CMAKE_INSTALL_PREFIX}"
-  )
+if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
+  # Add other locations.
+  list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+    # Project install destination.
+    "${CMAKE_INSTALL_PREFIX}"
+    )
+endif()
 
 if(CMAKE_CROSSCOMPILING AND NOT CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
   # MinGW (useful when cross compiling from linux with CMAKE_FIND_ROOT_PATH set)
@@ -88,8 +90,12 @@ list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
   )
 
 # mingw can also link against dlls which can also be in /bin, so list this too
+if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
+  list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
+    "${CMAKE_INSTALL_PREFIX}/bin"
+  )
+endif()
 list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
-  "${CMAKE_INSTALL_PREFIX}/bin"
   "${_CMAKE_INSTALL_DIR}/bin"
   /bin
   )

+ 1 - 0
Tests/RunCMake/CMakeLists.txt

@@ -109,6 +109,7 @@ add_RunCMake_test(CMP0004)
 add_RunCMake_test(TargetPolicies)
 add_RunCMake_test(alias_targets)
 add_RunCMake_test(interface_library)
+add_RunCMake_test(no_install_prefix)
 
 find_package(Qt4 QUIET)
 find_package(Qt5Core QUIET)

+ 3 - 0
Tests/RunCMake/no_install_prefix/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8.4)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)

+ 15 - 0
Tests/RunCMake/no_install_prefix/RunCMakeTest.cmake

@@ -0,0 +1,15 @@
+include(RunCMake)
+
+set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/prefix")
+
+file(REMOVE_RECURSE "${RunCMake_BINARY_DIR}/prefix")
+file(MAKE_DIRECTORY "${RunCMake_BINARY_DIR}/prefix/NoPrefix")
+file(WRITE "${RunCMake_BINARY_DIR}/prefix/NoPrefix/NoPrefixConfig.cmake" "")
+set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_BINARY_DIR}/prefix")
+run_cmake(with_install_prefix)
+
+file(REMOVE_RECURSE "${RunCMake_BINARY_DIR}/prefix")
+file(MAKE_DIRECTORY "${RunCMake_BINARY_DIR}/prefix/NoPrefix")
+file(WRITE "${RunCMake_BINARY_DIR}/prefix/NoPrefix/NoPrefixConfig.cmake" "")
+list(APPEND RunCMake_TEST_OPTIONS "-DCMAKE_FIND_NO_INSTALL_PREFIX=1")
+run_cmake(no_install_prefix)

+ 2 - 0
Tests/RunCMake/no_install_prefix/do_test.cmake

@@ -0,0 +1,2 @@
+
+find_package(NoPrefix REQUIRED)

+ 1 - 0
Tests/RunCMake/no_install_prefix/no_install_prefix-result.txt

@@ -0,0 +1 @@
+1

+ 18 - 0
Tests/RunCMake/no_install_prefix/no_install_prefix-stderr.txt

@@ -0,0 +1,18 @@
+CMake Error at do_test.cmake:2 \(find_package\):
+  By not providing "FindNoPrefix.cmake" in CMAKE_MODULE_PATH this project has
+  asked CMake to find a package configuration file provided by "NoPrefix",
+  but CMake did not find one.
+
+  Could not find a package configuration file provided by "NoPrefix" with any
+  of the following names:
+
+    NoPrefixConfig.cmake
+    noprefix-config.cmake
+
+  Add the installation prefix of "NoPrefix" to CMAKE_PREFIX_PATH or set
+  "NoPrefix_DIR" to a directory containing one of the above files.  If
+  "NoPrefix" provides a separate development package or SDK, be sure it has
+  been installed.
+Call Stack \(most recent call first\):
+  no_install_prefix.cmake:2 \(include\)
+  CMakeLists.txt:3 \(include\)

+ 2 - 0
Tests/RunCMake/no_install_prefix/no_install_prefix.cmake

@@ -0,0 +1,2 @@
+
+include(do_test.cmake)

+ 1 - 0
Tests/RunCMake/no_install_prefix/with_install_prefix-result.txt

@@ -0,0 +1 @@
+0

+ 1 - 0
Tests/RunCMake/no_install_prefix/with_install_prefix-stderr.txt

@@ -0,0 +1 @@
+^$

+ 2 - 0
Tests/RunCMake/no_install_prefix/with_install_prefix.cmake

@@ -0,0 +1,2 @@
+
+include(do_test.cmake)