1# This is a basic version file for the Config-mode of find_package(). 2# It is used by write_basic_package_version_file() as input file for configure_file() 3# to create a version-file which can be installed along a config.cmake file. 4# 5# The created file sets PACKAGE_VERSION_EXACT if the current version string and 6# the requested version string are exactly the same and it sets 7# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, 8# but only if the requested major and minor versions are the same as the current 9# one. 10# The variable CVF_VERSION must be set before calling configure_file(). 11 12 13set(PACKAGE_VERSION "@CVF_VERSION@") 14 15if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) 16 set(PACKAGE_VERSION_COMPATIBLE FALSE) 17else() 18 19 if("@CVF_VERSION@" MATCHES "^([0-9]+)\\.([0-9]+)") 20 set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") 21 set(CVF_VERSION_MINOR "${CMAKE_MATCH_2}") 22 23 if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0) 24 string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}") 25 endif() 26 if(NOT CVF_VERSION_MINOR VERSION_EQUAL 0) 27 string(REGEX REPLACE "^0+" "" CVF_VERSION_MINOR "${CVF_VERSION_MINOR}") 28 endif() 29 else() 30 set(CVF_VERSION_MAJOR "@CVF_VERSION@") 31 set(CVF_VERSION_MINOR "") 32 endif() 33 34 if(PACKAGE_FIND_VERSION_RANGE) 35 # both endpoints of the range must have the expected major and minor versions 36 math (EXPR CVF_VERSION_MINOR_NEXT "${CVF_VERSION_MINOR} + 1") 37 if (NOT (PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR 38 AND PACKAGE_FIND_VERSION_MIN_MINOR STREQUAL CVF_VERSION_MINOR) 39 OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" 40 AND NOT (PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR 41 AND PACKAGE_FIND_VERSION_MAX_MINOR STREQUAL CVF_VERSION_MINOR)) 42 OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" 43 AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL ${CVF_VERSION_MAJOR}.${CVF_VERSION_MINOR_NEXT}))) 44 set(PACKAGE_VERSION_COMPATIBLE FALSE) 45 elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR 46 AND PACKAGE_FIND_VERSION_MIN_MINOR STREQUAL CVF_VERSION_MINOR 47 AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX) 48 OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX))) 49 set(PACKAGE_VERSION_COMPATIBLE TRUE) 50 else() 51 set(PACKAGE_VERSION_COMPATIBLE FALSE) 52 endif() 53 else() 54 if(NOT PACKAGE_FIND_VERSION_MAJOR VERSION_EQUAL 0) 55 string(REGEX REPLACE "^0+" "" PACKAGE_FIND_VERSION_MAJOR "${PACKAGE_FIND_VERSION_MAJOR}") 56 endif() 57 if(NOT PACKAGE_FIND_VERSION_MINOR VERSION_EQUAL 0) 58 string(REGEX REPLACE "^0+" "" PACKAGE_FIND_VERSION_MINOR "${PACKAGE_FIND_VERSION_MINOR}") 59 endif() 60 61 if((PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) AND 62 (PACKAGE_FIND_VERSION_MINOR STREQUAL CVF_VERSION_MINOR)) 63 set(PACKAGE_VERSION_COMPATIBLE TRUE) 64 else() 65 set(PACKAGE_VERSION_COMPATIBLE FALSE) 66 endif() 67 68 if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) 69 set(PACKAGE_VERSION_EXACT TRUE) 70 endif() 71 endif() 72endif() 73 74 75# if the installed project requested no architecture check, don't perform the check 76if("@CVF_ARCH_INDEPENDENT@") 77 return() 78endif() 79 80# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: 81if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "") 82 return() 83endif() 84 85# check that the installed version has the same 32/64bit-ness as the one which is currently searching: 86if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@") 87 math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") 88 set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") 89 set(PACKAGE_VERSION_UNSUITABLE TRUE) 90endif() 91