dust3d/thirdparty/cgal/CGAL-5.1/cmake/modules/CGAL_VersionUtils.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()