From 3958b3e112b7c33d40129a16811a2eff69495a42 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 17 Dec 2008 09:24:05 -0500 Subject: [PATCH] ENH: Teach find_package about more install dirs We now search in /*/ /*/(cmake|CMake) when looking for package configuration files. This is useful on Windows since the Program Files folder is in CMAKE_SYSTEM_PREFIX_PATH. These paths are the Windows equivalent to the Apple convention application and framework paths we already search. See issue #8264. --- Source/cmFindPackageCommand.cxx | 27 +++++++++++++++++++ Tests/FindPackageTest/Baz 1.1/BazConfig.cmake | 1 + .../Baz 1.1/BazConfigVersion.cmake | 8 ++++++ .../Baz 1.2/CMake/BazConfig.cmake | 1 + .../Baz 1.2/CMake/BazConfigVersion.cmake | 8 ++++++ Tests/FindPackageTest/CMakeLists.txt | 6 ++++- 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 Tests/FindPackageTest/Baz 1.1/BazConfig.cmake create mode 100644 Tests/FindPackageTest/Baz 1.1/BazConfigVersion.cmake create mode 100644 Tests/FindPackageTest/Baz 1.2/CMake/BazConfig.cmake create mode 100644 Tests/FindPackageTest/Baz 1.2/CMake/BazConfigVersion.cmake diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index 9e998aad5..9577b42d2 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -222,6 +222,8 @@ cmFindPackageCommand::cmFindPackageCommand() "UNIX (U), or Apple (A) conventions.\n" " / (W)\n" " /(cmake|CMake)/ (W)\n" + " /*/ (W)\n" + " /*/(cmake|CMake)/ (W)\n" " /(share|lib)/cmake/*/ (U)\n" " /(share|lib)/*/ (U)\n" " /(share|lib)/*/(cmake|CMake)/ (U)\n" @@ -1783,6 +1785,31 @@ bool cmFindPackageCommand::SearchPrefix(std::string const& prefix_in) } } + // PREFIX/(Foo|foo|FOO).*/ + { + cmFindPackageFileList lister(this); + lister + / cmFileListGeneratorFixed(prefix) + / cmFileListGeneratorProject(this->Names); + if(lister.Search()) + { + return true; + } + } + + // PREFIX/(Foo|foo|FOO).*/(cmake|CMake)/ + { + cmFindPackageFileList lister(this); + lister + / cmFileListGeneratorFixed(prefix) + / cmFileListGeneratorProject(this->Names) + / cmFileListGeneratorCaseInsensitive("cmake"); + if(lister.Search()) + { + return true; + } + } + // Construct list of common install locations (lib and share). std::vector common; if(this->UseLib64Paths) diff --git a/Tests/FindPackageTest/Baz 1.1/BazConfig.cmake b/Tests/FindPackageTest/Baz 1.1/BazConfig.cmake new file mode 100644 index 000000000..deffa5729 --- /dev/null +++ b/Tests/FindPackageTest/Baz 1.1/BazConfig.cmake @@ -0,0 +1 @@ +# Test config file. diff --git a/Tests/FindPackageTest/Baz 1.1/BazConfigVersion.cmake b/Tests/FindPackageTest/Baz 1.1/BazConfigVersion.cmake new file mode 100644 index 000000000..321fa118e --- /dev/null +++ b/Tests/FindPackageTest/Baz 1.1/BazConfigVersion.cmake @@ -0,0 +1,8 @@ +SET(PACKAGE_VERSION 1.1) +IF("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 1) + SET(PACKAGE_VERSION_COMPATIBLE 1) + IF("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 1) + SET(PACKAGE_VERSION_EXACT 1) + ENDIF("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 1) +ENDIF("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 1) + diff --git a/Tests/FindPackageTest/Baz 1.2/CMake/BazConfig.cmake b/Tests/FindPackageTest/Baz 1.2/CMake/BazConfig.cmake new file mode 100644 index 000000000..deffa5729 --- /dev/null +++ b/Tests/FindPackageTest/Baz 1.2/CMake/BazConfig.cmake @@ -0,0 +1 @@ +# Test config file. diff --git a/Tests/FindPackageTest/Baz 1.2/CMake/BazConfigVersion.cmake b/Tests/FindPackageTest/Baz 1.2/CMake/BazConfigVersion.cmake new file mode 100644 index 000000000..4576809f5 --- /dev/null +++ b/Tests/FindPackageTest/Baz 1.2/CMake/BazConfigVersion.cmake @@ -0,0 +1,8 @@ +SET(PACKAGE_VERSION 1.2) +IF("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 1) + SET(PACKAGE_VERSION_COMPATIBLE 1) + IF("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 2) + SET(PACKAGE_VERSION_EXACT 1) + ENDIF("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 2) +ENDIF("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 1) + diff --git a/Tests/FindPackageTest/CMakeLists.txt b/Tests/FindPackageTest/CMakeLists.txt index 30a1dd122..fe901ad59 100644 --- a/Tests/FindPackageTest/CMakeLists.txt +++ b/Tests/FindPackageTest/CMakeLists.txt @@ -36,7 +36,7 @@ FIND_PACKAGE(VersionTestD 1.2.3.4) # For purposes of the test wipe out previous find results. SET(PACKAGES foo Foo Bar TFramework Tframework TApp Tapp Special - VersionedA VersionedB VersionedC + VersionedA VersionedB VersionedC VersionedD VersionedE wibbleA wibbleB RecursiveA RecursiveB RecursiveC ) @@ -61,6 +61,8 @@ FIND_PACKAGE(Special NAMES Suffix SuffixTest PATH_SUFFIXES test) FIND_PACKAGE(VersionedA 2 NAMES zot) FIND_PACKAGE(VersionedB 3.1 EXACT NAMES zot) FIND_PACKAGE(VersionedC 4.0 EXACT NAMES zot) +FIND_PACKAGE(VersionedD 1.1 EXACT NAMES Baz) +FIND_PACKAGE(VersionedE 1.2 EXACT NAMES Baz) # HINTS should override the system but PATHS should not LIST(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/A") @@ -88,6 +90,8 @@ SET(Tapp_EXPECTED SET(VersionedA_EXPECTED "lib/zot-2.0/zot-config.cmake") SET(VersionedB_EXPECTED "lib/zot-3.1/zot-config.cmake") SET(VersionedC_EXPECTED "lib/cmake/zot-4.0/zot-config.cmake") +SET(VersionedD_EXPECTED "Baz 1.1/BazConfig.cmake") +SET(VersionedE_EXPECTED "Baz 1.2/CMake/BazConfig.cmake") SET(wibbleA_EXPECTED "A/wibble-config.cmake") SET(wibbleB_EXPECTED "B/wibble-config.cmake") SET(RecursiveA_EXPECTED "lib/RecursiveA/recursivea-config.cmake")