|
|
@@ -3,24 +3,44 @@
|
|
|
|
|
|
set(PACKAGE_VERSION "@<@PROJECT_VERSION@>@")
|
|
|
|
|
|
-if(PACKAGE_FIND_VERSION_RANGE)
|
|
|
- # Package version must be in the requested version range
|
|
|
- if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
|
|
|
- OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
|
|
|
- OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
|
|
|
- set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
|
+if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
|
|
|
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
|
+else()
|
|
|
+
|
|
|
+ if("${PACKAGE_VERSION}" MATCHES "^([0-9]+)\\.")
|
|
|
+ set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
|
|
+ if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
|
|
|
+ string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
|
|
|
+ endif()
|
|
|
+ else()
|
|
|
+ set(CVF_VERSION_MAJOR "${PACKAGE_VERSION}")
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(PACKAGE_FIND_VERSION_RANGE)
|
|
|
+ # both endpoints of the range must have the expected major version
|
|
|
+ math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1")
|
|
|
+ if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
|
|
|
+ OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR)
|
|
|
+ OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT)))
|
|
|
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
|
+ elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
|
|
|
+ AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX)
|
|
|
+ OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX)))
|
|
|
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
|
else()
|
|
|
- set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
|
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
|
endif()
|
|
|
-else()
|
|
|
- if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
|
|
|
- set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
|
+ else()
|
|
|
+ if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
|
|
|
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
|
else()
|
|
|
- set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
|
- if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
|
|
|
- set(PACKAGE_VERSION_EXACT TRUE)
|
|
|
- endif()
|
|
|
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
|
|
|
+ set(PACKAGE_VERSION_EXACT TRUE)
|
|
|
endif()
|
|
|
+ endif()
|
|
|
endif()
|
|
|
|
|
|
# if the using project doesn't have CMAKE_SIZEOF_VOID_P set, fail.
|