2008-03-25 18:27:18 +03:00
cmake_minimum_required ( VERSION 2.6 )
2012-08-13 21:47:32 +04:00
project ( FindPackageTest )
2003-07-24 19:33:06 +04:00
2015-05-14 16:51:48 +03:00
# Protect tests from running inside the default install prefix.
set ( CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/NotDefaultPrefix" )
2012-08-13 21:47:32 +04:00
list ( APPEND CMAKE_MODULE_PATH ${ CMAKE_CURRENT_SOURCE_DIR } )
2010-11-18 00:32:53 +03:00
# Look for a package which uses FindPackageHandleStandardArgs.cmake with the
# new (as of cmake 2.8.3) syntax. This works only if CMP0017 is set to NEW,
# because otherwise FindPackageHandleStandardArgs.cmake from the current
# directory is included (via CMAKE_MODULE_PATH).
2012-08-13 21:47:32 +04:00
cmake_policy ( SET CMP0017 NEW )
find_package ( ZLIB QUIET )
2010-11-18 00:32:53 +03:00
2003-07-24 19:33:06 +04:00
# Look for a package that has a find module and may be found.
2012-08-13 21:47:32 +04:00
find_package ( OpenGL QUIET )
2003-07-24 19:33:06 +04:00
# Look for a package that has no find module and will not be found.
2012-08-13 21:47:32 +04:00
find_package ( NotAPackage QUIET )
2003-07-24 19:33:06 +04:00
# Look for a package that has an advanced find module.
2012-08-13 21:47:32 +04:00
find_package ( VTK QUIET )
2003-07-24 19:33:06 +04:00
2012-08-13 21:47:32 +04:00
add_executable ( FindPackageTest FindPackageTest.cxx )
2007-10-26 17:55:40 +04:00
2007-12-19 19:06:47 +03:00
# test behaviour of cmFindBase wrt. the CMAKE_PREFIX_PATH variable
2007-10-26 17:55:40 +04:00
# foo.h should be found in ${CMAKE_CURRENT_SOURCE_DIR}/include:
2012-08-13 21:47:32 +04:00
set ( CMAKE_PREFIX_PATH /blub /blah "${CMAKE_CURRENT_SOURCE_DIR}" )
find_path ( FOO_DIR foo.h )
2007-10-26 17:55:40 +04:00
2012-08-13 21:47:32 +04:00
if ( NOT FOO_DIR )
message ( FATAL_ERROR " Did not find foo.h which is in ${ CMAKE_CURRENT_SOURCE_DIR } /include
2007-12-19 19:06:47 +03:00
C M A K E _ P R E F I X _ P A T H = $ { C M A K E _ P R E F I X _ P A T H } " )
2012-08-13 21:50:14 +04:00
endif ( )
2007-10-26 17:55:40 +04:00
2012-08-13 21:47:32 +04:00
find_package ( VersionTestA 1 )
find_package ( VersionTestB 1.2 )
find_package ( VersionTestC 1.2.3 )
find_package ( VersionTestD 1.2.3.4 )
2008-01-21 16:48:33 +03:00
2012-03-18 22:15:42 +04:00
2012-08-13 21:47:32 +04:00
find_package ( LotsOfComponents COMPONENTS AComp OPTIONAL_COMPONENTS BComp CComp )
if ( NOT LOTSOFCOMPONENTS_FOUND )
message ( SEND_ERROR "LotsOfComponents not found !" )
endif ( )
2012-03-18 22:15:42 +04:00
2013-02-20 22:35:11 +04:00
find_package ( SomePackage )
if ( NOT SomePackage_FOUND )
2015-02-24 00:23:11 +03:00
message ( SEND_ERROR "SomePackage not found !" )
endif ( )
if ( NOT SOMEPACKAGE_FOUND )
message ( SEND_ERROR "SomePackage compatibility name SOMEPACKAGE_FOUND not set!" )
2013-02-20 22:35:11 +04:00
endif ( )
find_package ( UpperCasePackage )
2015-02-24 00:23:11 +03:00
if ( NOT UpperCasePackage_FOUND )
message ( SEND_ERROR "UpperCasePackage not found!" )
endif ( )
2013-02-20 22:35:11 +04:00
if ( NOT UPPERCASEPACKAGE_FOUND )
2015-02-24 00:23:11 +03:00
message ( SEND_ERROR "SomePackage compatibility name SOMEPACKAGE_FOUND not set!" )
2013-02-20 22:35:11 +04:00
endif ( )
2011-04-13 22:28:00 +04:00
#-----------------------------------------------------------------------------
# Test system package registry if possible.
2012-08-13 21:47:32 +04:00
set ( CMakeTestSystemPackage "" )
if ( WIN32 AND NOT CYGWIN )
2011-04-13 22:28:00 +04:00
# Try writing a value to the system package registry.
2012-08-13 21:47:32 +04:00
set ( _data "${FindPackageTest_SOURCE_DIR}/SystemPackage" )
set ( _key "HKLM\\Software\\Kitware\\CMake\\Packages\\CMakeTestSystemPackage" )
set ( _file "${FindPackageTest_BINARY_DIR}/CMakeTestSystemPackage.data" )
file ( WRITE ${ _file } "${_data}\n" )
execute_process (
2011-04-13 22:28:00 +04:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E m d 5 s u m $ { _ f i l e }
O U T P U T _ V A R I A B L E _ o u t p u t E R R O R _ V A R I A B L E _ e r r o r R E S U L T _ V A R I A B L E _ f a i l e d
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
)
2012-08-13 21:47:32 +04:00
string ( REGEX REPLACE " .*" "" _value "${_output}" )
if ( NOT _failed AND _value )
execute_process (
2011-04-13 22:28:00 +04:00
C O M M A N D r e g a d d " $ { _ k e y } " / v " $ { _ v a l u e } " / t R E G _ S Z / d " $ { _ d a t a } " / f
O U T P U T _ V A R I A B L E _ o u t p u t E R R O R _ V A R I A B L E _ o u t p u t R E S U L T _ V A R I A B L E _ f a i l e d
)
2012-08-13 21:47:32 +04:00
endif ( )
2011-04-13 22:28:00 +04:00
# If the above worked, add the rest of the test and a rule to
# cleanup the value.
2012-08-13 21:47:32 +04:00
if ( NOT _failed )
message ( STATUS "HKLM is writable: enabling CMakeTestSystemPackage" )
set ( CMakeTestSystemPackage_CLEANUP reg delete "${_key}" /v "${_value}" /f )
set ( CMakeTestSystemPackage CMakeTestSystemPackage )
else ( )
message ( STATUS "HKLM is readonly: disabling CMakeTestSystemPackage" )
endif ( )
endif ( )
2011-04-13 22:28:00 +04:00
2008-01-21 16:48:33 +03:00
#-----------------------------------------------------------------------------
2012-08-13 21:47:32 +04:00
#set(CMAKE_FIND_DEBUG_MODE 1)
2008-01-17 17:06:36 +03:00
# For purposes of the test wipe out previous find results.
2012-08-13 21:47:32 +04:00
set ( PACKAGES
2011-06-17 00:42:00 +04:00
f o o F o o B a r B l u b T F r a m e w o r k T f r a m e w o r k T A p p T a p p S p e c i a l
2008-12-17 17:24:05 +03:00
V e r s i o n e d A V e r s i o n e d B V e r s i o n e d C V e r s i o n e d D V e r s i o n e d E
2016-08-20 13:06:55 +03:00
V e r s i o n e d F V e r s i o n e d G V e r s i o n e d H
2009-10-07 22:37:30 +04:00
W r o n g A W r o n g B W r o n g C W r o n g D
2008-06-09 23:09:14 +04:00
w i b b l e A w i b b l e B
2008-10-03 18:40:07 +04:00
R e c u r s i v e A R e c u r s i v e B R e c u r s i v e C
2011-06-08 18:28:20 +04:00
A r c h A A r c h B A r c h C A r c h D
2009-11-04 21:14:57 +03:00
E n v A E n v B
2012-03-10 15:18:58 +04:00
S e t F o u n d T R U E S e t F o u n d F A L S E
2011-04-13 22:28:00 +04:00
$ { C M a k e T e s t S y s t e m P a c k a g e }
2008-01-29 04:38:48 +03:00
)
2012-08-13 21:47:32 +04:00
foreach ( p ${ PACKAGES } )
set ( ${ p } _DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE )
2012-08-13 21:50:14 +04:00
endforeach ( )
2008-01-17 17:06:36 +03:00
# Enable framework and bundle searching. Make sure bundles are found
# before unix-syle packages.
2012-08-13 21:47:32 +04:00
set ( CMAKE_FIND_FRAMEWORK LAST )
set ( CMAKE_FIND_APPBUNDLE FIRST )
2008-01-17 17:06:36 +03:00
2009-01-14 17:34:42 +03:00
# Set the wrong answer for a find to make sure it re-finds.
set ( VersionedA_DIR ${ CMAKE_CURRENT_SOURCE_DIR } /lib/cmake/zot-4.0 )
2010-08-13 02:20:47 +04:00
# Test that CMAKE_IGNORE_PATH can ignore the purposely bad package
# files in the lib/cmake/zot-3.1 directory.
set ( CMAKE_IGNORE_PATH ${ CMAKE_CURRENT_SOURCE_DIR } /lib/cmake/zot-3.1 )
2008-01-17 17:06:36 +03:00
# Look for packages with new-style signatures.
2012-08-13 21:47:32 +04:00
find_package ( foo NO_MODULE )
find_package ( Foo CONFIGS FooConfig.cmake )
find_package ( Bar )
set ( CMAKE_DISABLE_FIND_PACKAGE_Blub TRUE )
find_package ( Blub NO_MODULE )
find_package ( TFramework CONFIGS TFrameworkConfig.cmake )
find_package ( Tframework )
find_package ( TApp )
find_package ( Tapp CONFIGS tapp-config.cmake )
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 )
2016-08-20 13:06:55 +03:00
find_package ( VersionedF 1.3 EXACT NAMES Baz )
find_package ( VersionedG 2.0 EXACT NAMES Baz )
find_package ( VersionedH 2.1 EXACT NAMES Baz )
2008-01-17 17:06:36 +03:00
2012-03-10 15:18:58 +04:00
# Test Config files which set Xyz_FOUND themselves:
2012-08-13 21:47:32 +04:00
find_package ( SetFoundTRUE NO_MODULE )
find_package ( SetFoundFALSE NO_MODULE )
2012-03-10 15:18:58 +04:00
2009-10-07 22:37:30 +04:00
# Test wrong initial path when result is present.
2012-08-13 21:47:32 +04:00
set ( WrongA_DIR "${VersionedD_DIR}" )
find_package ( WrongA 1.2 EXACT NAMES Baz )
2009-10-07 22:37:30 +04:00
# Test wrong initial cache entry of UNINITIALIZED type when result is present.
2012-08-13 21:47:32 +04:00
set ( WrongB_DIR "${VersionedD_DIR}" CACHE UNINITIALIZED "Wrong Value" FORCE )
get_property ( type CACHE WrongB_DIR PROPERTY TYPE )
find_package ( WrongB 1.2 EXACT NAMES Baz )
2009-10-07 22:37:30 +04:00
# Test wrong initial path when result is missing.
2012-08-13 21:47:32 +04:00
set ( WrongC_DIR "${VersionedD_DIR}" )
2016-08-20 13:06:55 +03:00
find_package ( WrongC 1.4 EXACT QUIET NAMES Baz )
2009-10-07 22:37:30 +04:00
# Test wrong initial cache entry of UNINITIALIZED type when result is missing.
2012-08-13 21:47:32 +04:00
set ( WrongD_DIR "${VersionedD_DIR}" CACHE UNINITIALIZED "Wrong Value" FORCE )
get_property ( type CACHE WrongD_DIR PROPERTY TYPE )
2016-08-20 13:06:55 +03:00
find_package ( WrongD 1.4 EXACT QUIET NAMES Baz )
2009-10-07 22:37:30 +04:00
2008-06-09 23:09:14 +04:00
# HINTS should override the system but PATHS should not
2012-08-13 21:47:32 +04:00
list ( INSERT CMAKE_SYSTEM_PREFIX_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/A" )
find_package ( wibbleA NAMES wibble PATHS B )
find_package ( wibbleB NAMES wibble HINTS B )
2008-06-09 23:09:14 +04:00
2008-10-03 18:40:07 +04:00
# Look for package with recursive find-modules.
2012-08-13 21:47:32 +04:00
find_package ( RecursiveA COMPONENTS A )
find_package ( RecursiveB 2 )
find_package ( RecursiveC 3.1 EXACT )
2008-10-03 18:40:07 +04:00
2011-06-08 18:28:20 +04:00
# Test architecture-specific search directories.
2012-08-13 21:47:32 +04:00
set ( CMAKE_LIBRARY_ARCHITECTURE arch )
find_package ( ArchA NAMES Bar )
find_package ( ArchB NAMES Foo CONFIGS FooConfig.cmake )
find_package ( ArchC 3.1 EXACT NAMES zot )
find_package ( ArchD 4.0 EXACT NAMES zot )
unset ( CMAKE_LIBRARY_ARCHITECTURE )
2011-06-08 18:28:20 +04:00
2009-11-04 21:14:57 +03:00
# Test <Package>_DIR environment variable.
# We erase the main prefix path to ensure the env var is used.
2012-08-13 21:47:32 +04:00
set ( CMAKE_PREFIX_PATH )
set ( ENV{EnvA_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/lib/zot-3.1" )
find_package ( EnvA 3.1 EXACT QUIET NAMES zot ) # Should Work
find_package ( EnvB 3.1 EXACT QUIET NAMES zot ) # Should Fail
2009-11-04 21:14:57 +03:00
2011-04-13 22:28:00 +04:00
# Test system package registry if available.
2012-08-13 21:47:32 +04:00
if ( CMakeTestSystemPackage )
find_package ( CMakeTestSystemPackage )
execute_process ( COMMAND ${ CMakeTestSystemPackage_CLEANUP }
2011-04-13 22:28:00 +04:00
O U T P U T _ V A R I A B L E _ o u t p u t E R R O R _ V A R I A B L E _ e r r o r )
2012-08-13 21:47:32 +04:00
endif ( )
2011-04-13 22:28:00 +04:00
2008-01-17 17:06:36 +03:00
# Expected locations at which packages should be found.
2012-08-13 21:47:32 +04:00
set ( foo_EXPECTED "lib/foo-1.2/foo-config.cmake" )
set ( Foo_EXPECTED "lib/foo-1.2/CMake/FooConfig.cmake" )
set ( Bar_EXPECTED "lib/Bar/BarConfig.cmake" )
set ( Blub_MISSING "" )
set ( Special_EXPECTED "lib/suffix/test/SuffixTestConfig.cmake" )
set ( TFramework_EXPECTED
2008-01-17 17:06:36 +03:00
" T F r a m e w o r k . f r a m e w o r k / V e r s i o n s / A / R e s o u r c e s / C M a k e / T F r a m e w o r k C o n f i g . c m a k e " )
2012-08-13 21:47:32 +04:00
set ( Tframework_EXPECTED
2008-01-17 17:06:36 +03:00
" T F r a m e w o r k . f r a m e w o r k / V e r s i o n s / A / R e s o u r c e s / t f r a m e w o r k - c o n f i g . c m a k e " )
2012-08-13 21:47:32 +04:00
set ( TApp_EXPECTED
2008-01-17 17:06:36 +03:00
" T A p p . a p p / C o n t e n t s / R e s o u r c e s / T A p p C o n f i g . c m a k e " )
2012-08-13 21:47:32 +04:00
set ( Tapp_EXPECTED
2008-01-17 17:06:36 +03:00
" T A p p . a p p / C o n t e n t s / R e s o u r c e s / c m a k e / t a p p - c o n f i g . c m a k e " )
2012-08-13 21:47:32 +04:00
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" )
2016-08-20 13:06:55 +03:00
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" )
2012-08-13 21:47:32 +04:00
set ( WrongA_EXPECTED "${VersionedE_EXPECTED}" )
set ( WrongB_EXPECTED "${VersionedE_EXPECTED}" )
set ( WrongC_MISSING "WrongC_DIR-NOTFOUND" )
set ( WrongD_MISSING "WrongD_DIR-NOTFOUND" )
set ( wibbleA_EXPECTED "A/wibble-config.cmake" )
set ( wibbleB_EXPECTED "B/wibble-config.cmake" )
set ( RecursiveA_EXPECTED "lib/RecursiveA/recursivea-config.cmake" )
set ( RecursiveB_EXPECTED "lib/zot-2.0/zot-config.cmake" )
set ( RecursiveC_EXPECTED "lib/zot-3.1/zot-config.cmake" )
set ( ArchA_EXPECTED "lib/arch/Bar/BarConfig.cmake" )
set ( ArchB_EXPECTED "lib/arch/foo-1.2/CMake/FooConfig.cmake" )
set ( ArchC_EXPECTED "lib/arch/zot-3.1/zot-config.cmake" )
set ( ArchD_EXPECTED "lib/arch/cmake/zot-4.0/zot-config.cmake" )
set ( EnvA_EXPECTED "lib/zot-3.1/zot-config.cmake" )
set ( EnvB_MISSING "EnvB_DIR-NOTFOUND" )
set ( SetFoundTRUE_EXPECTED "cmake/SetFoundTRUEConfig.cmake" )
set ( SetFoundFALSE_MISSING "${CMAKE_CURRENT_SOURCE_DIR}/cmake" )
set ( CMakeTestSystemPackage_EXPECTED "SystemPackage/CMakeTestSystemPackageConfig.cmake" )
2008-01-17 17:06:36 +03:00
# Check the results.
2012-08-13 21:47:32 +04:00
foreach ( p ${ PACKAGES } )
if ( DEFINED ${ p } _MISSING )
2009-10-07 22:37:30 +04:00
# Check and report failure.
2012-08-13 21:47:32 +04:00
if ( NOT "${${p}_DIR}" STREQUAL "${${p}_MISSING}" )
message ( SEND_ERROR
2009-10-07 22:37:30 +04:00
" P a c k a g e $ { p } s h o u l d h a v e b e e n [ $ { $ { p } _ M I S S I N G } ] b u t "
" w a s [ $ { $ { p } _ D I R } ] " )
2012-08-13 21:47:32 +04:00
endif ( )
if ( ${ p } _FOUND )
message ( SEND_ERROR
2012-03-10 15:18:58 +04:00
" P a c k a g e $ { p } s h o u l d n o t h a v e b e e n f o u n d , b u t $ { p } _ F O U N D i s s e t t o "
" \ " $ { $ { p } _ F O U N D } \ " " )
2012-08-13 21:47:32 +04:00
endif ( )
elseif ( ${ p } _FOUND )
2008-01-17 17:06:36 +03:00
# Convert to relative path for comparison to expected location.
2012-08-13 21:47:32 +04:00
file ( RELATIVE_PATH REL_ ${ p } _CONFIG "${CMAKE_CURRENT_SOURCE_DIR}"
2008-01-17 17:06:36 +03:00
" $ { $ { p } _ C O N F I G } " )
# Debugging output.
2012-08-13 21:47:32 +04:00
if ( CMAKE_FIND_DEBUG_MODE )
message ( "Package ${p} found [${REL_${p}_CONFIG}]" )
2012-08-13 21:50:14 +04:00
endif ( )
2008-01-17 17:06:36 +03:00
# Check and report failure.
2012-08-13 21:47:32 +04:00
if ( NOT "${REL_${p}_CONFIG}" STREQUAL "${${p}_EXPECTED}" )
message ( SEND_ERROR
2008-01-17 17:06:36 +03:00
" P a c k a g e $ { p } s h o u l d h a v e b e e n [ $ { $ { p } _ E X P E C T E D } ] b u t "
" w a s [ $ { R E L _ $ { p } _ C O N F I G } ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2012-08-13 21:47:32 +04:00
else ( )
message ( SEND_ERROR "Package ${p} not found!" )
endif ( )
2012-08-13 21:50:14 +04:00
endforeach ( )
2008-01-29 04:38:48 +03:00
# Check that version information was extracted.
2012-08-13 21:47:32 +04:00
if ( NOT "${VersionedA_VERSION}" STREQUAL "2.0" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e V e r s i o n e d A i s v e r s i o n [ $ { V e r s i o n e d A _ V E R S I O N } ] , n o t [ 2 . 0 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2012-08-13 21:47:32 +04:00
if ( NOT "${VersionedA_VERSION_MAJOR}" STREQUAL "2" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e V e r s i o n e d A i s m a j o r v e r s i o n [ $ { V e r s i o n e d A _ V E R S I O N _ M A J O R } ] , n o t [ 2 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2012-08-13 21:47:32 +04:00
if ( NOT "${VersionedA_VERSION_MINOR}" STREQUAL "0" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e V e r s i o n e d A i s m i n o r v e r s i o n [ $ { V e r s i o n e d A _ V E R S I O N _ M I N O R } ] , n o t [ 0 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2008-01-29 04:38:48 +03:00
2012-08-13 21:47:32 +04:00
if ( NOT "${VersionedB_VERSION}" STREQUAL "3.1" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e V e r s i o n e d B i s v e r s i o n [ $ { V e r s i o n e d B _ V E R S I O N } ] , n o t [ 3 . 1 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2012-08-13 21:47:32 +04:00
if ( NOT "${VersionedB_VERSION_MAJOR}" STREQUAL "3" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e V e r s i o n e d B i s m a j o r v e r s i o n [ $ { V e r s i o n e d B _ V E R S I O N _ M A J O R } ] , n o t [ 3 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2012-08-13 21:47:32 +04:00
if ( NOT "${VersionedB_VERSION_MINOR}" STREQUAL "1" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e V e r s i o n e d B i s m i n o r v e r s i o n [ $ { V e r s i o n e d B _ V E R S I O N _ M I N O R } ] , n o t [ 1 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2008-01-29 04:38:48 +03:00
2012-08-13 21:47:32 +04:00
if ( NOT "${Special_VERSION}" STREQUAL "1.2" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e S p e c i a l i s v e r s i o n [ $ { S p e c i a l _ V E R S I O N } ] , n o t [ 1 . 2 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2012-08-13 21:47:32 +04:00
if ( NOT "${Special_VERSION_MAJOR}" STREQUAL "1" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e S p e c i a l i s m a j o r v e r s i o n [ $ { S p e c i a l _ V E R S I O N _ M A J O R } ] , n o t [ 1 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2012-08-13 21:47:32 +04:00
if ( NOT "${Special_VERSION_MINOR}" STREQUAL "2" )
message ( SEND_ERROR
2008-01-29 04:38:48 +03:00
" P a c k a g e S p e c i a l i s m i n o r v e r s i o n [ $ { S p e c i a l _ V E R S I O N _ M I N O R } ] , n o t [ 2 ] " )
2012-08-13 21:50:14 +04:00
endif ( )
2008-09-10 19:58:40 +04:00
# Test version number comparison.
2012-08-13 21:47:32 +04:00
if ( NOT "1.2.3.4" VERSION_LESS "1.2.3.5" )
message ( SEND_ERROR "1.2.3.4 VERSION_LESS 1.2.3.5 is not true!" )
endif ( )
if ( NOT "1.2" VERSION_LESS "1.10" )
message ( SEND_ERROR "1.2 VERSION_LESS 1.10 is not true!" )
endif ( )
if ( NOT "1.02" VERSION_GREATER "1.1" )
message ( SEND_ERROR "1.02 VERSION_GREATER 1.1 is not true!" )
endif ( )
if ( "1.2.3" VERSION_GREATER "1.2.3.4" )
message ( SEND_ERROR "1.2.3 VERSION_GREATER 1.2.3.4 is not false!" )
endif ( )
if ( NOT "1.2" VERSION_EQUAL "1.2.0.0" )
message ( SEND_ERROR "1.2 VERSION_EQUAL 1.2.0.0 is not true!" )
endif ( )
2009-09-01 22:05:42 +04:00
#-----------------------------------------------------------------------------
# Test export(PACKAGE) with find_package.
2014-05-08 17:48:21 +04:00
# Choose a unique version.
string ( REGEX REPLACE "-.*$" "" version ${ CMAKE_VERSION } )
string ( RANDOM LENGTH 4 ALPHABET "0123456789" v )
2016-07-28 01:43:04 +03:00
string ( APPEND version ".${v}" )
2014-05-08 17:48:21 +04:00
2012-08-13 21:47:32 +04:00
message ( STATUS "Preparing export(PACKAGE) test project" )
try_compile ( EXPORTER_COMPILED
2014-05-09 19:43:15 +04:00
$ { F i n d P a c k a g e T e s t _ B I N A R Y _ D I R } / E x p o r t e r - b u i l d
2009-09-01 22:05:42 +04:00
$ { F i n d P a c k a g e T e s t _ S O U R C E _ D I R } / E x p o r t e r
C M a k e T e s t E x p o r t P a c k a g e d u m m y
2014-04-02 18:32:54 +04:00
C M A K E _ F L A G S " - U C M A K E _ E X P O R T _ N O _ P A C K A G E _ R E G I S T R Y "
2014-05-08 17:48:21 +04:00
- D v e r s i o n = $ { v e r s i o n }
2009-09-01 22:05:42 +04:00
O U T P U T _ V A R I A B L E o u t p u t )
2012-08-13 21:47:32 +04:00
message ( STATUS "Searching for export(PACKAGE) test project" )
set ( CMakeTestExportPackage_DIR "" CACHE FILEPATH
2009-09-01 22:05:42 +04:00
" W i p e o u t f i n d r e s u l t s f o r t e s t i n g . " F O R C E )
2012-08-13 21:47:32 +04:00
find_package ( CMakeTestExportPackage 1. ${ version } EXACT REQUIRED )
2011-08-02 01:29:27 +04:00
2014-04-02 18:32:54 +04:00
message ( STATUS "Searching for export(PACKAGE) test project with CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE" )
set ( CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY TRUE )
set ( CMakeTestExportPackage_DIR "" CACHE FILEPATH
" W i p e o u t f i n d r e s u l t s f o r t e s t i n g . " F O R C E )
find_package ( CMakeTestExportPackage 1. ${ version } EXACT QUIET )
if ( CMakeTestExportPackage_FOUND )
message ( SEND_ERROR "CMakeTestExportPackage should not be FOUND!" )
endif ( )
unset ( CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY )
message ( STATUS "Remove export(PACKAGE) test project" )
file ( REMOVE_RECURSE ${ FindPackageTest_BINARY_DIR } /Exporter-build )
set ( CMakeTestExportPackage_DIR "" CACHE FILEPATH
" W i p e o u t f i n d r e s u l t s f o r t e s t i n g . " F O R C E )
find_package ( CMakeTestExportPackage QUIET ) # Should clean the user package cache
#
message ( STATUS "Preparing export(PACKAGE) test project with CMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE" )
try_compile ( EXPORTER_COMPILED
$ { F i n d P a c k a g e T e s t _ B I N A R Y _ D I R } / E x p o r t e r - b u i l d
$ { F i n d P a c k a g e T e s t _ S O U R C E _ D I R } / E x p o r t e r
C M a k e T e s t E x p o r t P a c k a g e d u m m y
C M A K E _ F L A G S " - D C M A K E _ E X P O R T _ N O _ P A C K A G E _ R E G I S T R Y : B O O L = T R U E "
- D v e r s i o n = $ { v e r s i o n }
O U T P U T _ V A R I A B L E o u t p u t )
message ( STATUS "Searching for export(PACKAGE) test project" )
find_package ( CMakeTestExportPackage 1. ${ version } EXACT QUIET )
if ( CMakeTestExportPackage_FOUND )
message ( SEND_ERROR "CMakeTestExportPackage should not be FOUND!" )
endif ( )
2012-02-17 02:12:14 +04:00
#-----------------------------------------------------------------------------
# Test configure_package_config_file().
include ( CMakePackageConfigHelpers )
2014-07-15 21:51:16 +04:00
# Generate a config file ready to be installed.
2012-02-17 02:12:14 +04:00
set ( INCLUDE_INSTALL_DIR include )
set ( SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/" )
set ( CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
configure_package_config_file ( RelocatableConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/RelocatableConfig.cmake"
I N S T A L L _ D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ P R E F I X } "
P A T H _ V A R S I N C L U D E _ I N S T A L L _ D I R S H A R E _ I N S T A L L _ D I R C U R R E N T _ B U I L D _ D I R
)
2012-03-19 00:26:37 +04:00
set ( Relocatable_FIND_COMPONENTS AComp BComp CComp )
set ( Relocatable_FIND_REQUIRED_BComp 1 )
2012-02-17 02:12:14 +04:00
include ( "${CMAKE_CURRENT_BINARY_DIR}/RelocatableConfig.cmake" )
if ( NOT "${RELOC_INCLUDE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/include" )
message ( SEND_ERROR "RELOC_INCLUDE_DIR set by configure_package_config_file() is set to \" ${ RELOC_INCLUDE_DIR } \" ( expected \"${CMAKE_CURRENT_BINARY_DIR}/include\")")
endif ( )
if ( NOT "${RELOC_SHARE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/share/" )
message ( SEND_ERROR "RELOC_SHARE_DIR set by configure_package_config_file() is set to \" ${ RELOC_SHARE_DIR } \" ( expected \"${CMAKE_CURRENT_BINARY_DIR}/share/\")")
endif ( )
if ( NOT "${RELOC_BUILD_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}" )
message ( SEND_ERROR "RELOC_BUILD_DIR set by configure_package_config_file() is set to \" ${ RELOC_BUILD_DIR } \" ( expected \"${CMAKE_CURRENT_BINARY_DIR}\")")
endif ( )
2012-03-19 00:26:37 +04:00
if ( NOT DEFINED Relocatable_FOUND )
message ( SEND_ERROR "Relocatable_FOUND not defined !" )
endif ( )
if ( Relocatable_FOUND )
message ( SEND_ERROR "Relocatable_FOUND set to TRUE !" )
endif ( )
2014-07-15 21:51:16 +04:00
# Generate a config file for the build tree.
set ( INCLUDE_INSTALL_DIR include )
set ( SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/share/" )
set ( CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
configure_package_config_file ( RelocatableConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/RelocatableConfig.cmake"
I N S T A L L _ D E S T I N A T I O N " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } "
P A T H _ V A R S I N C L U D E _ I N S T A L L _ D I R S H A R E _ I N S T A L L _ D I R C U R R E N T _ B U I L D _ D I R
I N S T A L L _ P R E F I X " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } "
)
set ( Relocatable_FIND_COMPONENTS AComp BComp CComp )
set ( Relocatable_FIND_REQUIRED_BComp 1 )
include ( "${CMAKE_CURRENT_BINARY_DIR}/RelocatableConfig.cmake" )
if ( NOT "${RELOC_INCLUDE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/include" )
message ( SEND_ERROR "RELOC_INCLUDE_DIR set by configure_package_config_file() is set to \" ${ RELOC_INCLUDE_DIR } \" ( expected \"${CMAKE_CURRENT_BINARY_DIR}/include\")")
endif ( )
if ( NOT "${RELOC_SHARE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/share/" )
message ( SEND_ERROR "RELOC_SHARE_DIR set by configure_package_config_file() is set to \" ${ RELOC_SHARE_DIR } \" ( expected \"${CMAKE_CURRENT_BINARY_DIR}/share/\")")
endif ( )
if ( NOT "${RELOC_BUILD_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}" )
message ( SEND_ERROR "RELOC_BUILD_DIR set by configure_package_config_file() is set to \" ${ RELOC_BUILD_DIR } \" ( expected \"${CMAKE_CURRENT_BINARY_DIR}\")")
endif ( )
if ( NOT DEFINED Relocatable_FOUND )
message ( SEND_ERROR "Relocatable_FOUND not defined !" )
endif ( )
if ( Relocatable_FOUND )
message ( SEND_ERROR "Relocatable_FOUND set to TRUE !" )
endif ( )
2011-08-02 01:29:27 +04:00
#-----------------------------------------------------------------------------
# Test write_basic_config_version_file().
2012-05-23 22:48:47 +04:00
# also test that an empty CMAKE_SIZEOF_VOID_P is accepted:
set ( _CMAKE_SIZEOF_VOID_P ${ CMAKE_SIZEOF_VOID_P } )
set ( CMAKE_SIZEOF_VOID_P "" )
2012-02-17 03:36:18 +04:00
write_basic_package_version_file ( ${ CMAKE_CURRENT_BINARY_DIR } /Foo123ConfigVersion.cmake
V E R S I O N 1 . 2 . 3
C O M P A T I B I L I T Y A n y N e w e r V e r s i o n )
2011-08-02 01:29:27 +04:00
2012-05-23 22:48:47 +04:00
set ( CMAKE_SIZEOF_VOID_P ${ _CMAKE_SIZEOF_VOID_P } )
2011-08-02 01:29:27 +04:00
set ( PACKAGE_FIND_VERSION 2.3.4 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Foo123ConfigVersion.cmake )
if ( PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Found Foo123 with version 1.2.3, but 2.3.4 was requested !" )
endif ( )
set ( PACKAGE_FIND_VERSION 0.0.1 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Foo123ConfigVersion.cmake )
if ( NOT PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Did not find Foo123 with version 1.2.3 (0.0.1 was requested) !" )
endif ( )
2012-05-23 22:48:47 +04:00
if ( PACKAGE_VERSION_UNSUITABLE )
message ( SEND_ERROR "PACKAGE_VERSION_UNSUITABLE set, but must not be !" )
endif ( )
2011-08-02 01:29:27 +04:00
set ( PACKAGE_FIND_VERSION 1.0.0 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Foo123ConfigVersion.cmake )
if ( NOT PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Did not find Foo123 with version 1.2.3 (1.0.0 was requested) !" )
endif ( )
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
set ( PACKAGE_FIND_VERSION 1.2.3 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Foo123ConfigVersion.cmake )
if ( NOT PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Did not find Foo123 with version 1.2.3 (1.2.3 was requested) !" )
endif ( )
if ( NOT PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT not set, although it should be !" )
endif ( )
#######################
2012-02-17 03:36:18 +04:00
include ( WriteBasicConfigVersionFile )
2011-08-02 01:29:27 +04:00
write_basic_config_version_file ( ${ CMAKE_CURRENT_BINARY_DIR } /Boo123ConfigVersion.cmake
V E R S I O N 1 . 2 . 3
C O M P A T I B I L I T Y S a m e M a j o r V e r s i o n )
2012-05-23 22:48:47 +04:00
unset ( PACKAGE_VERSION_UNSUITABLE )
2011-08-06 00:42:57 +04:00
set ( PACKAGE_VERSION_EXACT FALSE )
2011-08-02 01:29:27 +04:00
set ( PACKAGE_FIND_VERSION 2.3.4 )
set ( PACKAGE_FIND_VERSION_MAJOR 2 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Boo123ConfigVersion.cmake )
if ( PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Found Boo123 with version 1.2.3, but 2.3.4 was requested !" )
endif ( )
2011-08-06 00:42:57 +04:00
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
2011-08-02 01:29:27 +04:00
set ( PACKAGE_FIND_VERSION 0.0.1 )
set ( PACKAGE_FIND_VERSION_MAJOR 0 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Boo123ConfigVersion.cmake )
if ( PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Found Boo123 with version 1.2.3, but 0.0.1 was requested !" )
endif ( )
2011-08-06 00:42:57 +04:00
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
2011-08-02 01:29:27 +04:00
set ( PACKAGE_FIND_VERSION 1.0.0 )
set ( PACKAGE_FIND_VERSION_MAJOR 1 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Boo123ConfigVersion.cmake )
if ( NOT PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Did not find Boo123 with version 1.2.3 (1.0.0 was requested) !" )
endif ( )
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
set ( PACKAGE_FIND_VERSION 1.2.3 )
set ( PACKAGE_FIND_VERSION_MAJOR 1 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Boo123ConfigVersion.cmake )
if ( NOT PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Did not find Boo123 with version 1.2.3 (1.2.3 was requested) !" )
endif ( )
if ( NOT PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT not set, although it should be !" )
endif ( )
2011-08-06 00:42:57 +04:00
if ( PACKAGE_VERSION_UNSUITABLE )
message ( SEND_ERROR "PACKAGE_VERSION_UNSUITABLE set, but must not be !" )
endif ( )
2012-03-10 19:19:02 +04:00
#######################
write_basic_package_version_file ( ${ CMAKE_CURRENT_BINARY_DIR } /Bar123ConfigVersion.cmake
V E R S I O N 1 . 2 . 3 . 1 7
C O M P A T I B I L I T Y E x a c t V e r s i o n )
2012-05-23 22:48:47 +04:00
unset ( PACKAGE_VERSION_UNSUITABLE )
2012-03-10 19:19:02 +04:00
set ( PACKAGE_VERSION_EXACT FALSE )
set ( PACKAGE_FIND_VERSION 2.3.4 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Bar123ConfigVersion.cmake )
if ( PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Found Bar123 with version 1.2.3 (2.3.4 was requested) !" )
endif ( )
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
set ( PACKAGE_FIND_VERSION 1.2 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Bar123ConfigVersion.cmake )
if ( PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Found Bar123 with version 1.2.3 (1.2 was requested) !" )
endif ( )
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
set ( PACKAGE_FIND_VERSION 1 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Bar123ConfigVersion.cmake )
if ( PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Found Bar123 with version 1.2.3 (1 was requested) !" )
endif ( )
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
set ( PACKAGE_FIND_VERSION 1.2.3.4 )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Bar123ConfigVersion.cmake )
if ( NOT PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Did not find Bar123 with version 1.2.3 (1.2.3.4 was requested) !" )
endif ( )
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
set ( PACKAGE_FIND_VERSION 1.2.3 )
set ( PACKAGE_VERSION_EXACT FALSE )
set ( PACKAGE_VERSION_COMPATIBLE FALSE )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Bar123ConfigVersion.cmake )
if ( NOT PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Did not find Bar123 with version 1.2.3 (1.2.3 was requested) !" )
endif ( )
if ( PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !" )
endif ( )
set ( PACKAGE_FIND_VERSION 1.2.3.17 )
set ( PACKAGE_VERSION_EXACT FALSE )
set ( PACKAGE_VERSION_COMPATIBLE FALSE )
include ( ${ CMAKE_CURRENT_BINARY_DIR } /Bar123ConfigVersion.cmake )
if ( NOT PACKAGE_VERSION_COMPATIBLE )
message ( SEND_ERROR "Did not find Bar123 with version 1.2.3 (1.2.3.17 was requested) !" )
endif ( )
if ( NOT PACKAGE_VERSION_EXACT )
message ( SEND_ERROR "PACKAGE_VERSION_EXACT not set, although it should be !" )
endif ( )
if ( PACKAGE_VERSION_UNSUITABLE )
message ( SEND_ERROR "PACKAGE_VERSION_UNSUITABLE set, but must not be !" )
endif ( )
2016-09-08 21:26:59 +03:00
############################################################################
##Test FIND_PACKAGE using sorting
set ( CMAKE_PREFIX_PATH ${ CMAKE_CURRENT_SOURCE_DIR } )
SET ( CMAKE_FIND_PACKAGE_SORT_ORDER NAME )
SET ( CMAKE_FIND_PACKAGE_SORT_DIRECTION ASC )
set ( SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE )
FIND_PACKAGE ( SortLib CONFIG )
IF ( NOT "${SortLib_VERSION}" STREQUAL "3.1.1" )
message ( SEND_ERROR "FIND_PACKAGE_SORT_ORDER Name Asc! ${SortLib_VERSION}" )
endif ( )
unset ( SortLib_VERSION )
set ( SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE )
SET ( CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL )
SET ( CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC )
FIND_PACKAGE ( SortLib CONFIG )
IF ( NOT "${SortLib_VERSION}" STREQUAL "3.10.1" )
message ( SEND_ERROR "FIND_PACKAGE_SORT_ORDER Natural! Dec ${SortLib_VERSION}" )
endif ( )
set ( SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE )
unset ( SortLib_VERSION )
unset ( CMAKE_FIND_PACKAGE_SORT_ORDER )
unset ( CMAKE_FIND_PACKAGE_SORT_DIRECTION )
set ( CMAKE_PREFIX_PATH )