aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlex Merry <alex.merry@kde.org>2014-12-28 15:03:07 +0000
committerAlex Merry <alex.merry@kde.org>2015-01-24 14:45:33 +0000
commit959c374c022394a116e8ceb2b1fce2df11752068 (patch)
tree2f743ea16d9982c41f5328c83d11802882213913 /tests
parentcf5ccc7d9eba368846fae043855d9b064dac786d (diff)
downloadextra-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.txt1
-rw-r--r--tests/ECMSetupVersionTest/old_version_file_prereleases/CMakeLists.txt189
-rw-r--r--tests/ECMSetupVersionTest/old_version_file_prereleases/main.c4
-rw-r--r--tests/test_helpers.cmake4
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()