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