summaryrefslogtreecommitdiff
path: root/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
diff options
context:
space:
mode:
authorMarc Chevrier <marc.chevrier@gmail.com>2020-12-14 14:55:05 +0100
committerCraig Scott <craig.scott@crascit.com>2020-12-15 09:24:09 +1100
commit55c3b6a77e700554e6303f5cd6c4e443499363d8 (patch)
tree863c579ad420c3f7849ac7e8e46211d1dfcaadae /Modules/BasicConfigVersion-SameMajorVersion.cmake.in
parent82b25be80afc92da045d04a37e121a3fa97392c0 (diff)
downloadcmake-55c3b6a77e700554e6303f5cd6c4e443499363d8.tar.gz
CMakePackageConfigHelpers: Relax restrictions on version range
Diffstat (limited to 'Modules/BasicConfigVersion-SameMajorVersion.cmake.in')
-rw-r--r--Modules/BasicConfigVersion-SameMajorVersion.cmake.in33
1 files changed, 21 insertions, 12 deletions
diff --git a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
index 662900d1bf..dc04e54cd0 100644
--- a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
+++ b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
@@ -9,13 +9,6 @@
# The variable CVF_VERSION must be set before calling configure_file().
-if (PACKAGE_FIND_VERSION_RANGE)
- message(AUTHOR_WARNING
- "`find_package()` specify a version range but the version strategy "
- "(SameMajorVersion) of the module `${PACKAGE_FIND_NAME}` is incompatible "
- "with this request. Only the lower endpoint of the range will be used.")
-endif()
-
set(PACKAGE_VERSION "@CVF_VERSION@")
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
@@ -28,14 +21,30 @@ else()
set(CVF_VERSION_MAJOR "@CVF_VERSION@")
endif()
- if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
- set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ 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 FALSE)
+ endif()
else()
- set(PACKAGE_VERSION_COMPATIBLE FALSE)
- endif()
+ if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ else()
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ endif()
- if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+ if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
set(PACKAGE_VERSION_EXACT TRUE)
+ endif()
endif()
endif()