229 lines
6.1 KiB
CMake
229 lines
6.1 KiB
CMake
if ( NOT CGAL_VERSION_UTILS_FILE_INCLUDED )
|
|
set( CGAL_VERSION_UTILS_FILE_INCLUDED 1 )
|
|
|
|
#
|
|
# Given a version string of the form "major.[minor.[patch.[tweak]]]"
|
|
# decomposes it into components
|
|
#
|
|
macro( VERSION_DECOMPOSE v major minor patch tweak )
|
|
|
|
string(REPLACE "." ";" VERSION_DECOMPOSE_LIST ${v} )
|
|
|
|
list( LENGTH VERSION_DECOMPOSE_LIST VERSION_DECOMPOSE_LIST_LEN )
|
|
|
|
if ( VERSION_DECOMPOSE_LIST_LEN GREATER 0 )
|
|
list( GET VERSION_DECOMPOSE_LIST 0 ${major} )
|
|
else()
|
|
set ( ${major} -1 )
|
|
endif()
|
|
|
|
if ( VERSION_DECOMPOSE_LIST_LEN GREATER 1 )
|
|
list( GET VERSION_DECOMPOSE_LIST 1 ${minor} )
|
|
else()
|
|
set ( ${minor} -1 )
|
|
endif()
|
|
|
|
if ( VERSION_DECOMPOSE_LIST_LEN GREATER 2 )
|
|
list( GET VERSION_DECOMPOSE_LIST 2 ${patch} )
|
|
else()
|
|
set ( ${patch} -1 )
|
|
endif()
|
|
|
|
if ( VERSION_DECOMPOSE_LIST_LEN GREATER 3 )
|
|
list( GET VERSION_DECOMPOSE_LIST 3 ${tweak} )
|
|
else()
|
|
set ( ${tweak} -1 )
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
#
|
|
# Given two version string of the form "major.[minor.[patch.[tweak]]]"
|
|
# returns TRUE if they are equal, FALSE otherwise.
|
|
#
|
|
macro( IS_VERSION_EQUAL a b r )
|
|
|
|
VERSION_DECOMPOSE( ${a} _IVE_a_major _IVE_a_minor _IVE_a_patch _IVE_a_tweak )
|
|
VERSION_DECOMPOSE( ${b} _IVE_b_major _IVE_b_minor _IVE_b_patch _IVE_b_tweak )
|
|
|
|
set ( ${r} FALSE )
|
|
|
|
if ( _IVE_a_major EQUAL ${_IVE_b_major} )
|
|
if ( _IVE_a_minor EQUAL ${_IVE_b_minor} )
|
|
if ( _IVE_a_patch EQUAL ${_IVE_b_patch} )
|
|
if ( _IVE_a_tweak EQUAL ${_IVE_b_tweak} )
|
|
set ( ${r} TRUE )
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
#
|
|
# Given two version string of the form "major.[minor.[patch.[tweak]]]"
|
|
# returns TRUE if the first is smaller than the second, FALSE otherwise.
|
|
#
|
|
macro( IS_VERSION_LESS a b r )
|
|
|
|
VERSION_DECOMPOSE( ${a} _IVL_a_major _IVL_a_minor _IVL_a_patch _IVL_a_tweak )
|
|
VERSION_DECOMPOSE( ${b} _IVL_b_major _IVL_b_minor _IVL_b_patch _IVL_b_tweak )
|
|
|
|
set ( ${r} FALSE )
|
|
|
|
if ( _IVL_a_major LESS ${_IVL_b_major} )
|
|
set ( ${r} TRUE )
|
|
elseif( _IVL_a_major EQUAL ${_IVL_b_major})
|
|
if ( _IVL_a_minor LESS ${_IVL_b_minor} )
|
|
set ( ${r} TRUE )
|
|
elseif( _IVL_a_minor EQUAL ${_IVL_b_minor} )
|
|
if ( _IVL_a_patch LESS ${_IVL_b_patch} )
|
|
set ( ${r} TRUE )
|
|
elseif( _IVL_a_patch EQUAL ${_IVL_b_patch} )
|
|
if ( _IVL_a_tweak LESS ${_IVL_b_tweak} )
|
|
set ( ${r} TRUE )
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
#
|
|
# Given two version string of the form "major.[minor.[patch.[tweak]]]"
|
|
# returns TRUE if the first is greater than the second, FALSE otherwise.
|
|
#
|
|
macro( IS_VERSION_GREATER a b r )
|
|
|
|
IS_VERSION_LESS( ${a} ${b} _IVG_less )
|
|
|
|
if ( _IVG_less )
|
|
set( ${r} FALSE )
|
|
else()
|
|
|
|
IS_VERSION_EQUAL( ${a} ${b} _IVG_eq )
|
|
|
|
if ( _IVG_eq )
|
|
set( ${r} FALSE )
|
|
else()
|
|
set( ${r} TRUE )
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
# -= TESTING =-
|
|
#
|
|
|
|
|
|
macro ( TEST_VERSION_DECOMPOSE v expected_major expected_minor expected_patch expected_tweak )
|
|
|
|
VERSION_DECOMPOSE( ${v} major minor patch tweak )
|
|
|
|
set ( OK 0 )
|
|
|
|
if ( major EQUAL "${expected_major}" )
|
|
if ( minor EQUAL "${expected_minor}" )
|
|
if ( patch EQUAL "${expected_patch}" )
|
|
if ( tweak EQUAL "${expected_tweak}" )
|
|
set ( OK 1 )
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if ( OK )
|
|
message( STATUS "correct - ${v} -> ${major}, ${minor}, ${patch}, ${tweak} " )
|
|
else()
|
|
message( STATUS "FAILED - ${v} -> ${major}, ${minor}, ${patch}, ${tweak} " )
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
macro ( TEST_VERSION_COMPARISON op v0 v1 expected )
|
|
|
|
if ( "${op}" STREQUAL "<" )
|
|
IS_VERSION_LESS( ${v0} ${v1} result )
|
|
elseif ( "${op}" STREQUAL ">" )
|
|
IS_VERSION_GREATER( ${v0} ${v1} result )
|
|
else()
|
|
IS_VERSION_EQUAL( ${v0} ${v1} result )
|
|
endif()
|
|
|
|
if ( result STREQUAL ${expected} )
|
|
message( STATUS "correct - ${v0} ${op} ${v1} => ${result}" )
|
|
else()
|
|
message( STATUS "FAILED - ${v0} ${op} ${v1} => ${result}" )
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
if ( UNIT_TEST_VERSION_UTILS )
|
|
|
|
TEST_VERSION_DECOMPOSE("1.2.3.4" 1 2 3 4 )
|
|
TEST_VERSION_DECOMPOSE("1.2.3" 1 2 3 -1 )
|
|
TEST_VERSION_DECOMPOSE("1.2" 1 2 -1 -1 )
|
|
TEST_VERSION_DECOMPOSE("1" 1 -1 -1 -1 )
|
|
|
|
TEST_VERSION_COMPARISON( "==" "1.2.3.4" "1.2.3.4" TRUE )
|
|
TEST_VERSION_COMPARISON( "==" "1.2.3" "1.2.3" TRUE )
|
|
TEST_VERSION_COMPARISON( "==" "1.2" "1.2" TRUE )
|
|
TEST_VERSION_COMPARISON( "==" "1" "1" TRUE )
|
|
|
|
TEST_VERSION_COMPARISON( "==" "1.2.3.4" "1.2.3" FALSE )
|
|
TEST_VERSION_COMPARISON( "==" "1.2.3" "1.2" FALSE )
|
|
TEST_VERSION_COMPARISON( "==" "1.2" "1" FALSE )
|
|
|
|
TEST_VERSION_COMPARISON( "==" "1.2.3.4" "1.2.3.5" FALSE )
|
|
TEST_VERSION_COMPARISON( "==" "1.2.3" "1.2.4" FALSE )
|
|
TEST_VERSION_COMPARISON( "==" "1.2" "1.3" FALSE )
|
|
TEST_VERSION_COMPARISON( "==" "1" "2" FALSE )
|
|
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.4" "1.2.3.4" FALSE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3" "1.2.3" FALSE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2" "1.2" FALSE )
|
|
TEST_VERSION_COMPARISON( "<" "1" "1" FALSE )
|
|
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.4" "1.2.3.5" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.4" "1.2.4.5" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.4" "1.3.4.5" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.4" "2.3.4.5" TRUE )
|
|
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.4" "1.2.4" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.4" "1.3" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.4" "2" TRUE )
|
|
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3" "1.2.4" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2" "1.3" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1" "2" TRUE )
|
|
|
|
TEST_VERSION_COMPARISON( "<" "1.2.3.6" "1.2.4.5" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1.2.5.6" "1.3.4.5" TRUE )
|
|
TEST_VERSION_COMPARISON( "<" "1.4.5.6" "2.3.4.5" TRUE )
|
|
|
|
TEST_VERSION_COMPARISON( ">" "1.2.3.4" "1.2.3.4" FALSE )
|
|
TEST_VERSION_COMPARISON( ">" "1.2.3" "1.2.3" FALSE )
|
|
TEST_VERSION_COMPARISON( ">" "1.2" "1.2" FALSE )
|
|
TEST_VERSION_COMPARISON( ">" "1" "1" FALSE )
|
|
|
|
TEST_VERSION_COMPARISON( ">" "1.2.3.5" "1.2.3.4" TRUE )
|
|
|
|
endif()
|
|
|
|
endif()
|