Tests: add MajorVersionSelection tests
For things where we may have 2 major versions of the same software installed in parallel (think of Qt and Python) make sure our version selection gets this right.
This commit is contained in:
parent
f551fa6245
commit
d1f3bfe50e
|
@ -38,3 +38,21 @@ add_test(CMakeOnly.ProjectInclude ${CMAKE_CMAKE_COMMAND}
|
|||
-DCMAKE_ARGS=-DCMAKE_PROJECT_ProjectInclude_INCLUDE=${CMAKE_CURRENT_SOURCE_DIR}/ProjectInclude/include.cmake
|
||||
-P ${CMAKE_CURRENT_BINARY_DIR}/Test.cmake
|
||||
)
|
||||
|
||||
include(${CMAKE_SOURCE_DIR}/Modules/CMakeParseArguments.cmake)
|
||||
|
||||
function(add_major_test module)
|
||||
cmake_parse_arguments(MAJOR_TEST "NOLANG" "VERSION_VAR" "VERSIONS" ${ARGN})
|
||||
foreach (_version IN LISTS MAJOR_TEST_VERSIONS)
|
||||
add_test(CMakeOnly.MajorVersionSelection-${module}_${_version}
|
||||
${CMAKE_CMAKE_COMMAND}
|
||||
-DTEST=MajorVersionSelection-${module}_${_version}
|
||||
-DTEST_SOURCE=MajorVersionSelection
|
||||
"-DCMAKE_ARGS=-DMAJOR_TEST_MODULE=${module};-DMAJOR_TEST_VERSION=${_version};-DMAJOR_TEST_NO_LANGUAGES=${MAJOR_TEST_NOLANG};-DMAJOR_TEST_VERSION_VAR=${MAJOR_TEST_VERSION_VAR}"
|
||||
-P ${CMAKE_CURRENT_BINARY_DIR}/Test.cmake
|
||||
)
|
||||
endforeach ()
|
||||
endfunction()
|
||||
|
||||
add_major_test(PythonLibs VERSIONS 2 3 VERSION_VAR PYTHONLIBS_VERSION_STRING)
|
||||
add_major_test(PythonInterp NOLANG VERSIONS 2 3 VERSION_VAR PYTHON_VERSION_STRING)
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
if (NOT MAJOR_TEST_MODULE OR NOT MAJOR_TEST_VERSION)
|
||||
message(FATAL_ERROR "test selection variables not set up")
|
||||
endif ()
|
||||
|
||||
if (MAJOR_TEST_NO_LANGUAGES)
|
||||
project(major_detect_${MAJOR_TEST_MODULE}_${MAJOR_TEST_VERSION} NONE)
|
||||
else ()
|
||||
project(major_detect_${MAJOR_TEST_MODULE}_${MAJOR_TEST_VERSION})
|
||||
endif ()
|
||||
|
||||
find_package(${MAJOR_TEST_MODULE} ${MAJOR_TEST_VERSION})
|
||||
|
||||
if (MAJOR_TEST_VERSION_VAR)
|
||||
set(VERSION_VAR "${MAJOR_TEST_VERSION_VAR}")
|
||||
else ()
|
||||
set(VERSION_VAR "${MAJOR_TEST_MODULE}_VERSION_STRING")
|
||||
endif ()
|
||||
|
||||
string(TOUPPER "${MAJOR_TEST_MODULE}" MODULE_UPPER)
|
||||
|
||||
if ( ( ${MAJOR_TEST_MODULE}_FOUND OR ${MODULE_UPPER}_FOUND ) AND "${VERSION_VAR}")
|
||||
message(STATUS "${VERSION_VAR} is '${${VERSION_VAR}}'")
|
||||
if ("${VERSION_VAR}" VERSION_LESS MAJOR_TEST_VERSION)
|
||||
message(SEND_ERROR "Found version ${${VERSION_VAR}} is less than requested major version ${MAJOR_TEST_VERSION}")
|
||||
endif ()
|
||||
math(EXPR V_PLUS_ONE "${MAJOR_TEST_VERSION} + 1")
|
||||
if ("${VERSION_VAR}" VERSION_GREATER V_PLUS_ONE)
|
||||
message(SEND_ERROR "Found version ${${VERSION_VAR}} is greater than requested major version ${MAJOR_TEST_VERSION}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if ( ( ${MAJOR_TEST_MODULE}_FOUND OR ${MODULE_UPPER}_FOUND ) AND ${MAJOR_TEST_MODULE}_VERSION_MAJOR)
|
||||
message(STATUS "${MAJOR_TEST_MODULE}_VERSION_MAJOR is '${${MAJOR_TEST_MODULE}_VERSION_MAJOR}'")
|
||||
if (NOT ${MAJOR_TEST_VERSION} EQUAL ${MAJOR_TEST_MODULE}_VERSION_MAJOR)
|
||||
message(SEND_ERROR "We requested major version ${MAJOR_TEST_VERSION} but ${MAJOR_TEST_MODULE} set ${MAJOR_TEST_MODULE}_VERSION_MAJOR to ${${MAJOR_TEST_MODULE}_VERSION_MAJOR}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if ( ( ${MAJOR_TEST_MODULE}_FOUND OR ${MODULE_UPPER}_FOUND ) AND ${MODULE_UPPER}_VERSION_MAJOR)
|
||||
message(STATUS "${MODULE_UPPER}_VERSION_MAJOR is '${${MODULE_UPPER}_VERSION_MAJOR}'")
|
||||
if (NOT ${MAJOR_TEST_VERSION} EQUAL ${MODULE_UPPER}_VERSION_MAJOR)
|
||||
message(SEND_ERROR "We requested major version ${MAJOR_TEST_VERSION} but ${MAJOR_TEST_MODULE} set ${MODULE_UPPER}_VERSION_MAJOR to ${${MODULE_UPPER}_VERSION_MAJOR}")
|
||||
endif ()
|
||||
endif ()
|
|
@ -1,4 +1,8 @@
|
|||
set(source_dir "@CMAKE_CURRENT_SOURCE_DIR@/${TEST}")
|
||||
if (NOT TEST_SOURCE)
|
||||
set(TEST_SOURCE "${TEST}")
|
||||
endif ()
|
||||
|
||||
set(source_dir "@CMAKE_CURRENT_SOURCE_DIR@/${TEST_SOURCE}")
|
||||
set(binary_dir "@CMAKE_CURRENT_BINARY_DIR@/${TEST}-build")
|
||||
file(REMOVE_RECURSE "${binary_dir}")
|
||||
file(MAKE_DIRECTORY "${binary_dir}")
|
||||
|
|
Loading…
Reference in New Issue