1# Version checking for @PROJECT_VARIANT_NAME@ 2 3set (PACKAGE_VERSION "@PROJ_VERSION@") 4set (PACKAGE_VERSION_MAJOR "@PROJ_VERSION_MAJOR@") 5set (PACKAGE_VERSION_MINOR "@PROJ_VERSION_MINOR@") 6set (PACKAGE_VERSION_PATCH "@PROJ_VERSION_PATCH@") 7 8# These variable definitions parallel those in @PROJECT_NAME@'s 9# cmake/CMakeLists.txt. 10if (MSVC) 11 # For checking the compatibility of MSVC_TOOLSET_VERSION; see 12 # https://docs.microsoft.com/en-us/cpp/porting/overview-of-potential-upgrade-issues-visual-cpp 13 # Assume major version number is obtained by dropping the last decimal 14 # digit. 15 math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_TOOLSET_VERSION}/10") 16endif () 17if (CMAKE_CROSSCOMPILING) 18 # Ensure that all "true" (resp. "false") settings are represented by 19 # the same string. 20 set (CMAKE_CROSSCOMPILING_STR "ON") 21else () 22 set (CMAKE_CROSSCOMPILING_STR "OFF") 23endif () 24 25if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_VARIANT_NAME@") 26 # Check package name (in particular, because of the way cmake finds 27 # package config files, the capitalization could easily be "wrong"). 28 # This is necessary to ensure that the automatically generated 29 # variables, e.g., <package>_FOUND, are consistently spelled. 30 set (REASON "package = @PROJECT_VARIANT_NAME@, NOT ${PACKAGE_FIND_NAME}") 31 set (PACKAGE_VERSION_UNSUITABLE TRUE) 32elseif (NOT (APPLE OR (NOT DEFINED CMAKE_SIZEOF_VOID_P) OR 33 CMAKE_SIZEOF_VOID_P EQUAL "@CMAKE_SIZEOF_VOID_P@")) 34 # Reject if there's a 32-bit/64-bit mismatch (not necessary with Apple 35 # since a multi-architecture library is built for that platform). 36 set (REASON "sizeof(*void) = @CMAKE_SIZEOF_VOID_P@") 37 set (PACKAGE_VERSION_UNSUITABLE TRUE) 38elseif (MSVC AND NOT ( 39 # toolset version must be at least as great as @PROJECT_NAME@'s 40 MSVC_TOOLSET_VERSION GREATER_EQUAL @MSVC_TOOLSET_VERSION@ 41 # and major versions must match 42 AND MSVC_TOOLSET_MAJOR EQUAL @MSVC_TOOLSET_MAJOR@ )) 43 # Reject if there's a mismatch in MSVC compiler versions 44 set (REASON "MSVC_TOOLSET_VERSION = @MSVC_TOOLSET_VERSION@") 45 set (PACKAGE_VERSION_UNSUITABLE TRUE) 46elseif (NOT CMAKE_CROSSCOMPILING_STR STREQUAL "@CMAKE_CROSSCOMPILING_STR@") 47 # Reject if there's a mismatch in ${CMAKE_CROSSCOMPILING} 48 set (REASON "cross-compiling = @CMAKE_CROSSCOMPILING@") 49 set (PACKAGE_VERSION_UNSUITABLE TRUE) 50elseif (CMAKE_CROSSCOMPILING AND 51 NOT (CMAKE_SYSTEM_NAME STREQUAL "@CMAKE_SYSTEM_NAME@" AND 52 CMAKE_SYSTEM_PROCESSOR STREQUAL "@CMAKE_SYSTEM_PROCESSOR@")) 53 # Reject if cross-compiling and there's a mismatch in the target system 54 set (REASON "target = @CMAKE_SYSTEM_NAME@-@CMAKE_SYSTEM_PROCESSOR@") 55 set (PACKAGE_VERSION_UNSUITABLE TRUE) 56elseif (PACKAGE_FIND_VERSION) 57 if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) 58 set (PACKAGE_VERSION_EXACT TRUE) 59 elseif (PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION 60 AND PACKAGE_FIND_VERSION_MAJOR EQUAL PACKAGE_VERSION_MAJOR) 61 set (PACKAGE_VERSION_COMPATIBLE TRUE) 62 endif () 63endif () 64 65# If unsuitable, append the reason to the package version so that it's 66# visible to the user. 67if (PACKAGE_VERSION_UNSUITABLE) 68 set (PACKAGE_VERSION "${PACKAGE_VERSION} (${REASON})") 69endif () 70