find_package: Extend search path for combined Windows/UNIX convention
Find packages that install their cmake package configuration files in `lib/cmake/<name>` when they are installed in the default Windows CMAKE_INSTALL_PREFIX, `C:/Program Files/<name>`. Closes: #16212
This commit is contained in:
parent
ff5c89de0c
commit
828d6c137d
|
@ -201,6 +201,9 @@ Each entry is meant for installation trees following Windows (W), UNIX
|
|||
<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/ (U)
|
||||
<prefix>/(lib/<arch>|lib|share)/<name>*/ (U)
|
||||
<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/ (U)
|
||||
<prefix>/<name>*/(lib/<arch>|lib|share)/cmake/<name>*/ (W/U)
|
||||
<prefix>/<name>*/(lib/<arch>|lib|share)/<name>*/ (W/U)
|
||||
<prefix>/<name>*/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/ (W/U)
|
||||
|
||||
On systems supporting OS X Frameworks and Application Bundles the
|
||||
following directories are searched for frameworks or bundles
|
||||
|
|
|
@ -1961,6 +1961,44 @@ bool cmFindPackageCommand::SearchPrefix(std::string const& prefix_in)
|
|||
}
|
||||
}
|
||||
|
||||
// PREFIX/(Foo|foo|FOO).*/(lib/ARCH|lib|share)/cmake/(Foo|foo|FOO).*/
|
||||
{
|
||||
cmFindPackageFileList lister(this);
|
||||
lister / cmFileListGeneratorFixed(prefix) /
|
||||
cmFileListGeneratorProject(this->Names) /
|
||||
cmFileListGeneratorEnumerate(common) /
|
||||
cmFileListGeneratorFixed("cmake") /
|
||||
cmFileListGeneratorProject(this->Names);
|
||||
if (lister.Search()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// PREFIX/(Foo|foo|FOO).*/(lib/ARCH|lib|share)/(Foo|foo|FOO).*/
|
||||
{
|
||||
cmFindPackageFileList lister(this);
|
||||
lister / cmFileListGeneratorFixed(prefix) /
|
||||
cmFileListGeneratorProject(this->Names) /
|
||||
cmFileListGeneratorEnumerate(common) /
|
||||
cmFileListGeneratorProject(this->Names);
|
||||
if (lister.Search()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// PREFIX/(Foo|foo|FOO).*/(lib/ARCH|lib|share)/(Foo|foo|FOO).*/(cmake|CMake)/
|
||||
{
|
||||
cmFindPackageFileList lister(this);
|
||||
lister / cmFileListGeneratorFixed(prefix) /
|
||||
cmFileListGeneratorProject(this->Names) /
|
||||
cmFileListGeneratorEnumerate(common) /
|
||||
cmFileListGeneratorProject(this->Names) /
|
||||
cmFileListGeneratorCaseInsensitive("cmake");
|
||||
if (lister.Search()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
# Test config file.
|
|
@ -0,0 +1,7 @@
|
|||
set(PACKAGE_VERSION 1.3)
|
||||
if("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 1)
|
||||
set(PACKAGE_VERSION_COMPATIBLE 1)
|
||||
if("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 3)
|
||||
set(PACKAGE_VERSION_EXACT 1)
|
||||
endif()
|
||||
endif()
|
|
@ -0,0 +1 @@
|
|||
# Test config file.
|
|
@ -0,0 +1,7 @@
|
|||
set(PACKAGE_VERSION 2.0)
|
||||
if("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 2)
|
||||
set(PACKAGE_VERSION_COMPATIBLE 1)
|
||||
if("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 0)
|
||||
set(PACKAGE_VERSION_EXACT 1)
|
||||
endif()
|
||||
endif()
|
|
@ -0,0 +1 @@
|
|||
# Test config file.
|
|
@ -0,0 +1,7 @@
|
|||
set(PACKAGE_VERSION 2.1)
|
||||
if("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 2)
|
||||
set(PACKAGE_VERSION_COMPATIBLE 1)
|
||||
if("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 1)
|
||||
set(PACKAGE_VERSION_EXACT 1)
|
||||
endif()
|
||||
endif()
|
|
@ -102,6 +102,7 @@ endif()
|
|||
set(PACKAGES
|
||||
foo Foo Bar Blub TFramework Tframework TApp Tapp Special
|
||||
VersionedA VersionedB VersionedC VersionedD VersionedE
|
||||
VersionedF VersionedG VersionedH
|
||||
WrongA WrongB WrongC WrongD
|
||||
wibbleA wibbleB
|
||||
RecursiveA RecursiveB RecursiveC
|
||||
|
@ -142,6 +143,10 @@ 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)
|
||||
find_package(VersionedF 1.3 EXACT NAMES Baz)
|
||||
find_package(VersionedG 2.0 EXACT NAMES Baz)
|
||||
find_package(VersionedH 2.1 EXACT NAMES Baz)
|
||||
|
||||
|
||||
# Test Config files which set Xyz_FOUND themselves:
|
||||
find_package(SetFoundTRUE NO_MODULE)
|
||||
|
@ -158,12 +163,12 @@ find_package(WrongB 1.2 EXACT NAMES Baz)
|
|||
|
||||
# Test wrong initial path when result is missing.
|
||||
set(WrongC_DIR "${VersionedD_DIR}")
|
||||
find_package(WrongC 1.3 EXACT QUIET NAMES Baz)
|
||||
find_package(WrongC 1.4 EXACT QUIET NAMES Baz)
|
||||
|
||||
# Test wrong initial cache entry of UNINITIALIZED type when result is missing.
|
||||
set(WrongD_DIR "${VersionedD_DIR}" CACHE UNINITIALIZED "Wrong Value" FORCE)
|
||||
get_property(type CACHE WrongD_DIR PROPERTY TYPE)
|
||||
find_package(WrongD 1.3 EXACT QUIET NAMES Baz)
|
||||
find_package(WrongD 1.4 EXACT QUIET NAMES Baz)
|
||||
|
||||
# HINTS should override the system but PATHS should not
|
||||
list(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/A")
|
||||
|
@ -216,6 +221,9 @@ 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(VersionedF_EXPECTED "Baz 1.3/lib/cmake/Baz/BazConfig.cmake")
|
||||
set(VersionedG_EXPECTED "Baz 2.0/share/Baz 2/BazConfig.cmake")
|
||||
set(VersionedH_EXPECTED "Baz 2.1/lib/Baz 2/cmake/BazConfig.cmake")
|
||||
set(WrongA_EXPECTED "${VersionedE_EXPECTED}")
|
||||
set(WrongB_EXPECTED "${VersionedE_EXPECTED}")
|
||||
set(WrongC_MISSING "WrongC_DIR-NOTFOUND")
|
||||
|
|
Loading…
Reference in New Issue