diff options
author | Alex Merry <alex.merry@kde.org> | 2014-12-28 15:03:07 +0000 |
---|---|---|
committer | Alex Merry <alex.merry@kde.org> | 2015-01-24 14:45:33 +0000 |
commit | 959c374c022394a116e8ceb2b1fce2df11752068 (patch) | |
tree | 2f743ea16d9982c41f5328c83d11802882213913 /tests | |
parent | cf5ccc7d9eba368846fae043855d9b064dac786d (diff) | |
download | extra-cmake-modules-959c374c022394a116e8ceb2b1fce2df11752068.tar.gz extra-cmake-modules-959c374c022394a116e8ceb2b1fce2df11752068.tar.bz2 |
Add SameMajorVersionWithPreleases compat option to ecm_setup_version.
SameMajorVersionWithPreleases is intended implement the versioning
scheme followed by many KDE projects: minor releases after some high
number (eg: 90) are considered to be pre-releases of the next major
version, and are not compatible with the current major version. This
allows alpha and beta releases to be ordered correctly by
version-number-aware software like package managers (an alpha of version
2 should have a higher number than any release of version 1, but less
than version 2.0).
So a request for version 2.1.0 of a piece of software should not be
satisfied by 2.93.4, because that is actually a pre-release of version
3. On the other hand, a request for version 2.91.0 should be satisfied
by version 3.1.0.
Note that prereleases are not considered unless explicitly requested, so
2.93.4 will not satisfy requests for version 3 (or version 2) of a piece
of software.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ECMSetupVersionTest/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/ECMSetupVersionTest/old_version_file_prereleases/CMakeLists.txt | 189 | ||||
-rw-r--r-- | tests/ECMSetupVersionTest/old_version_file_prereleases/main.c | 4 | ||||
-rw-r--r-- | tests/test_helpers.cmake | 4 |
4 files changed, 196 insertions, 2 deletions
diff --git a/tests/ECMSetupVersionTest/CMakeLists.txt b/tests/ECMSetupVersionTest/CMakeLists.txt index b0845e57..c15af921 100644 --- a/tests/ECMSetupVersionTest/CMakeLists.txt +++ b/tests/ECMSetupVersionTest/CMakeLists.txt @@ -19,6 +19,7 @@ add_version_test(old_version_file dummy) add_version_test(old_version_file_abspath dummy) add_version_test(old_version_file_anynewer dummy) add_version_test(old_version_file_exact dummy) +add_version_test(old_version_file_prereleases dummy) add_version_test(old_version_file_samemajor dummy) add_version_test(old_header check_header) add_version_test(old_header_abspath check_header) diff --git a/tests/ECMSetupVersionTest/old_version_file_prereleases/CMakeLists.txt b/tests/ECMSetupVersionTest/old_version_file_prereleases/CMakeLists.txt new file mode 100644 index 00000000..e498fce6 --- /dev/null +++ b/tests/ECMSetupVersionTest/old_version_file_prereleases/CMakeLists.txt @@ -0,0 +1,189 @@ +cmake_minimum_required(VERSION 2.8.12) + +project(old_version_file_prereleases) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../modules) +include(ECMSetupVersion) + +ecm_setup_version(2.3.4 + VARIABLE_PREFIX Foo + PACKAGE_VERSION_FILE FooVersion.cmake + COMPATIBILITY SameMajorVersionWithPrereleases + FIRST_PRERELEASE_VERSION 90 +) + +include(../../test_helpers.cmake) +include(../version_helpers.cmake) + +macro(find_foo version) + test_version_file("${CMAKE_CURRENT_BINARY_DIR}/FooVersion.cmake" "${version}") + assert_var_str_value(PACKAGE_VERSION "2.3.4") +endmacro() + +standard_version_var_checks(Foo 2.3.4) + +# too old - fails +find_foo("3.1.1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# wrong major version - fails +find_foo("1.1.1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# wrong major version - fails +find_foo("1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# prerelease for wrong major version - fails +find_foo("2.90.0") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# prerelease for correct major version - succeeds +find_foo("1.90") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# prerelease for correct major version - succeeds +find_foo("1.90.1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# prerelease for correct major version - succeeds +find_foo("1.95.0") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# correct major version, more recent - succeeds +find_foo("2.1.1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# correct major version - succeeds +find_foo("2") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# correct major version, but too old - fails +find_foo("2.4.4") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# exact - succeeds +find_foo("2.3.4") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT TRUE) + + + + +ecm_setup_version(2.90.0 + VARIABLE_PREFIX Foo3Prerelease + PACKAGE_VERSION_FILE Foo3PrereleaseVersion.cmake + COMPATIBILITY SameMajorVersionWithPrereleases + FIRST_PRERELEASE_VERSION 90 +) + +macro(find_foo version) + test_version_file("${CMAKE_CURRENT_BINARY_DIR}/Foo3PrereleaseVersion.cmake" "${version}") + assert_var_str_value(PACKAGE_VERSION "2.90.0") +endmacro() + +standard_version_var_checks(Foo3Prerelease 2.90.0) + +# too old - fails +find_foo("3.1.1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# too old - fails +find_foo("2.90.1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# wrong major version - fails +find_foo("1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# wrong major version - fails +find_foo("2") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# correct major version, but don't want a prerelease - fails +find_foo("3") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# wrong major version - fails +find_foo("2.89.9") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# exact version - succeeds +find_foo("2.90.0") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT TRUE) + + + + +ecm_setup_version(2.93.4 + VARIABLE_PREFIX Foo3Prerelease2 + PACKAGE_VERSION_FILE Foo3Prerelease2Version.cmake + COMPATIBILITY SameMajorVersionWithPrereleases + FIRST_PRERELEASE_VERSION 90 +) + +macro(find_foo version) + test_version_file("${CMAKE_CURRENT_BINARY_DIR}/Foo3Prerelease2Version.cmake" "${version}") + assert_var_str_value(PACKAGE_VERSION "2.93.4") +endmacro() + +standard_version_var_checks(Foo3Prerelease2 2.93.4) + +# too old - fails +find_foo("3.1.1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# too old - fails +find_foo("2.94.0") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# wrong major version - fails +find_foo("1") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# wrong major version - fails +find_foo("2") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# correct major version, but don't want a prerelease - fails +find_foo("3") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# wrong major version - fails +find_foo("2.89.9") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# correct major version - succeeds +find_foo("2.90.0") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED) + +# exact version - succeeds +find_foo("2.93.4") +assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE) +assert_var_bool_value(PACKAGE_VERSION_EXACT TRUE) + +add_executable(dummy main.c) diff --git a/tests/ECMSetupVersionTest/old_version_file_prereleases/main.c b/tests/ECMSetupVersionTest/old_version_file_prereleases/main.c new file mode 100644 index 00000000..c13815ce --- /dev/null +++ b/tests/ECMSetupVersionTest/old_version_file_prereleases/main.c @@ -0,0 +1,4 @@ +int main() +{ + return 0; +} diff --git a/tests/test_helpers.cmake b/tests/test_helpers.cmake index 73be343e..236a1868 100644 --- a/tests/test_helpers.cmake +++ b/tests/test_helpers.cmake @@ -38,9 +38,9 @@ macro(assert_var_bool_value varname value) assert_var_defined(${varname}) endif() if(${value} AND NOT ${varname}) - message(FATAL_ERROR "${varname} was FALSE") + message(SEND_ERROR "${varname} was FALSE") elseif(${varname} AND NOT ${value}) - message(FATAL_ERROR "${varname} was TRUE") + message(SEND_ERROR "${varname} was TRUE") endif() endmacro() |