• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1set(PACKAGE_VERSION "@protobuf_VERSION@")
2set(${PACKAGE_FIND_NAME}_VERSION_PRERELEASE "@protobuf_VERSION_PRERELEASE@" PARENT_SCOPE)
3
4# Prerelease versions cannot be passed in directly via the find_package command,
5# so we allow users to specify it in a variable
6if(NOT DEFINED "${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE")
7  set("${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE}" "")
8else()
9  set(PACKAGE_FIND_VERSION ${PACKAGE_FIND_VERSION}-${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE})
10endif()
11set(PACKAGE_FIND_VERSION_PRERELEASE "${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE}")
12
13# VERSION_EQUAL ignores the prerelease strings, so we use STREQUAL.
14if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
15  set(PACKAGE_VERSION_EXACT TRUE)
16endif()
17
18set(PACKAGE_VERSION_COMPATIBLE TRUE) #Assume true until shown otherwise
19
20if(NOT PACKAGE_FIND_VERSION_MAJOR EQUAL "@protobuf_VERSION_MAJOR@")
21  set(PACKAGE_VERSION_COMPATIBLE FALSE)
22elseif(PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
23  set(PACKAGE_VERSION_COMPATIBLE FALSE)
24elseif(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
25  # Do not match prerelease versions to non-prerelease version requests.
26  if(NOT "@protobuf_VERSION_PRERELEASE@" STREQUAL "" AND PACKAGE_FIND_VERSION_PRERELEASE STREQUAL "")
27    message(AUTHOR_WARNING "To use this prerelease version of ${PACKAGE_FIND_NAME}, set ${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE to '@protobuf_VERSION_PRERELEASE@' or greater.")
28    set(PACKAGE_VERSION_COMPATIBLE FALSE)
29  endif()
30
31  # Not robustly SemVer compliant, but protobuf never uses '.' separated prerelease identifiers.
32  if(PACKAGE_FIND_VERSION_PRERELEASE STRGREATER "@protobuf_VERSION_PRERELEASE@")
33    set(PACKAGE_VERSION_COMPATIBLE FALSE)
34  endif()
35endif()
36
37# Check and save build options used to create this package
38macro(_check_and_save_build_option OPTION VALUE)
39  if(DEFINED ${PACKAGE_FIND_NAME}_${OPTION} AND
40    NOT ${PACKAGE_FIND_NAME}_${OPTION} EQUAL VALUE)
41    set(PACKAGE_VERSION_UNSUITABLE TRUE)
42  endif()
43  set(${PACKAGE_FIND_NAME}_${OPTION} ${VALUE})
44endmacro()
45_check_and_save_build_option(WITH_ZLIB @protobuf_WITH_ZLIB@)
46_check_and_save_build_option(MSVC_STATIC_RUNTIME @protobuf_MSVC_STATIC_RUNTIME@)
47_check_and_save_build_option(BUILD_SHARED_LIBS @protobuf_BUILD_SHARED_LIBS@)
48
49# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
50if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "" AND NOT "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
51  # check that the installed version has the same 32/64bit-ness as the one which is currently searching:
52  if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
53    math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
54    set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
55    set(PACKAGE_VERSION_UNSUITABLE TRUE)
56  endif()
57endif()
58
59