1set(min_ver 2.7.20090305) 2cmake_minimum_required(VERSION ${min_ver}) 3 4if("${CMAKE_VERSION}" VERSION_LESS "${min_ver}") 5 message(FATAL_ERROR 6 "CMAKE_VERSION=[${CMAKE_VERSION}] is less than [${min_ver}]") 7else() 8 message("CMAKE_VERSION=[${CMAKE_VERSION}] is not less than [${min_ver}]") 9endif() 10 11set(EQUALV "1 1") 12list(APPEND EQUALV "1.0 1") 13list(APPEND EQUALV "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 1") 14list(APPEND EQUALV "1.2.3.4.5.6.7 1.2.3.4.5.6.7") 15list(APPEND EQUALV "1.2.3.4.5.6.7.8.9 1.2.3.4.5.6.7.8.9") 16 17foreach(v IN LISTS EQUALV) 18 string(REGEX MATCH "(.*) (.*)" _dummy "${v}") 19 # modify any of the operands to see the negative check also works 20 if("${CMAKE_MATCH_1}.2" VERSION_EQUAL CMAKE_MATCH_2) 21 message(FATAL_ERROR "${CMAKE_MATCH_1}.2 is equal ${CMAKE_MATCH_2}?") 22 else() 23 message(STATUS "${CMAKE_MATCH_1}.2 is not equal ${CMAKE_MATCH_2}") 24 endif() 25 26 if(CMAKE_MATCH_1 VERSION_EQUAL "${CMAKE_MATCH_2}.2") 27 message(FATAL_ERROR "${CMAKE_MATCH_1} is equal ${CMAKE_MATCH_2}.2?") 28 else() 29 message(STATUS "${CMAKE_MATCH_1} is not equal ${CMAKE_MATCH_2}.2") 30 endif() 31endforeach() 32 33# test the negative outcomes first, due to the implementation the positive 34# allow some additional strings to pass that would not fail for the negative 35# tests 36 37list(APPEND EQUALV "1a 1") 38list(APPEND EQUALV "1.1a 1.1") 39list(APPEND EQUALV "1.0a 1") 40list(APPEND EQUALV "1a 1.0") 41 42foreach(v IN LISTS EQUALV) 43 # check equal versions 44 string(REGEX MATCH "(.*) (.*)" _dummy "${v}") 45 if(CMAKE_MATCH_1 VERSION_EQUAL CMAKE_MATCH_2) 46 message(STATUS "${CMAKE_MATCH_1} is equal ${CMAKE_MATCH_2}") 47 else() 48 message(FATAL_ERROR "${CMAKE_MATCH_1} is not equal ${CMAKE_MATCH_2}?") 49 endif() 50 51 # still equal, but inverted order of operands 52 string(REGEX MATCH "(.*) (.*)" _dummy "${v}") 53 if(CMAKE_MATCH_2 VERSION_EQUAL CMAKE_MATCH_1) 54 message(STATUS "${CMAKE_MATCH_2} is equal ${CMAKE_MATCH_1}") 55 else() 56 message(FATAL_ERROR "${CMAKE_MATCH_2} is not equal ${CMAKE_MATCH_1}?") 57 endif() 58endforeach() 59 60set(LESSV "1.2.3.4.5.6.7.8 1.2.3.4.5.6.7.9") 61list(APPEND LESSV "1.2.3.4.5.6.7 1.2.3.4.5.6.7.9") 62list(APPEND LESSV "1 1.0.0.1") 63foreach(v IN LISTS LESSV) 64 string(REGEX MATCH "(.*) (.*)" _dummy "${v}") 65 # check less 66 if(CMAKE_MATCH_1 VERSION_LESS CMAKE_MATCH_2) 67 message(STATUS "${CMAKE_MATCH_1} is less than ${CMAKE_MATCH_2}") 68 else() 69 message(FATAL_ERROR "${CMAKE_MATCH_1} is not less than ${CMAKE_MATCH_2}?") 70 endif() 71 72 # check greater 73 if(CMAKE_MATCH_2 VERSION_GREATER CMAKE_MATCH_1) 74 message(STATUS "${CMAKE_MATCH_2} is greater than ${CMAKE_MATCH_1}") 75 else() 76 message(FATAL_ERROR "${CMAKE_MATCH_2} is not greater than ${CMAKE_MATCH_1}?") 77 endif() 78 79 # check less negative case 80 if(NOT CMAKE_MATCH_2 VERSION_LESS CMAKE_MATCH_1) 81 message(STATUS "${CMAKE_MATCH_2} is not less than ${CMAKE_MATCH_1}") 82 else() 83 message(FATAL_ERROR "${CMAKE_MATCH_2} is less than ${CMAKE_MATCH_1}?") 84 endif() 85 86 # check greater or equal (same as less negative) 87 if(CMAKE_MATCH_2 VERSION_GREATER_EQUAL CMAKE_MATCH_1) 88 message(STATUS "${CMAKE_MATCH_2} is not less than ${CMAKE_MATCH_1}") 89 else() 90 message(FATAL_ERROR "${CMAKE_MATCH_2} is less than ${CMAKE_MATCH_1}?") 91 endif() 92 93 # check greater negative case 94 if(NOT CMAKE_MATCH_1 VERSION_GREATER CMAKE_MATCH_2) 95 message(STATUS "${CMAKE_MATCH_1} is not greater than ${CMAKE_MATCH_2}") 96 else() 97 message(FATAL_ERROR "${CMAKE_MATCH_1} is greater than ${CMAKE_MATCH_2}?") 98 endif() 99 100 # check less or equal (same as greater negative) case 101 if(CMAKE_MATCH_1 VERSION_LESS_EQUAL CMAKE_MATCH_2) 102 message(STATUS "${CMAKE_MATCH_1} is not greater than ${CMAKE_MATCH_2}") 103 else() 104 message(FATAL_ERROR "${CMAKE_MATCH_1} is greater than ${CMAKE_MATCH_2}?") 105 endif() 106endforeach() 107