Add test of all available CPack generators. Add this test with the goal of increasing coverage of the cpack source code, even/especially when the underlying packager tool is not installed. The test does not fail if there is a cpack problem with a certain generator. I expect some generators will fail on every machine running a CMake dashboard.
This commit is contained in:
parent
78174651b6
commit
e1458ae4ab
|
@ -141,6 +141,7 @@ MACRO(CMAKE_SETUP_TESTING)
|
|||
# cmake.
|
||||
SET(CMAKE_CTEST_COMMAND "${EXECUTABLE_OUTPUT_PATH}/ctest")
|
||||
SET(CMAKE_CMAKE_COMMAND "${EXECUTABLE_OUTPUT_PATH}/cmake")
|
||||
SET(CMAKE_CPACK_COMMAND "${EXECUTABLE_OUTPUT_PATH}/cpack")
|
||||
ENDIF(BUILD_TESTING)
|
||||
|
||||
# configure some files for testing
|
||||
|
|
|
@ -456,6 +456,40 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel
|
|||
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CPackComponents")
|
||||
ENDIF(CTEST_RUN_CPackComponents)
|
||||
|
||||
# By default, turn this test off (because it takes a long time...)
|
||||
#
|
||||
if(NOT DEFINED CTEST_RUN_CPackTestAllGenerators)
|
||||
set(CTEST_RUN_CPackTestAllGenerators OFF)
|
||||
|
||||
# ...but: if it appears to be a coverage dashboard, or long tests are
|
||||
# on, then set it to the generic CTEST_TEST_CPACK setting.
|
||||
#
|
||||
if(CMAKE_CXX_FLAGS MATCHES "-ftest-coverage" OR
|
||||
NOT "$ENV{COVFILE}" STREQUAL "" OR
|
||||
CMAKE_RUN_LONG_TESTS)
|
||||
set(CTEST_RUN_CPackTestAllGenerators ${CTEST_TEST_CPACK})
|
||||
endif(CMAKE_CXX_FLAGS MATCHES "-ftest-coverage" OR
|
||||
NOT "$ENV{COVFILE}" STREQUAL "" OR
|
||||
CMAKE_RUN_LONG_TESTS)
|
||||
endif(NOT DEFINED CTEST_RUN_CPackTestAllGenerators)
|
||||
|
||||
IF(CTEST_RUN_CPackTestAllGenerators)
|
||||
ADD_TEST(CPackTestAllGenerators ${CMAKE_CTEST_COMMAND}
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/CPackTestAllGenerators"
|
||||
"${CMake_BINARY_DIR}/Tests/CPackTestAllGenerators"
|
||||
--build-generator ${CMAKE_TEST_GENERATOR}
|
||||
--build-project CPackTestAllGenerators
|
||||
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
|
||||
--test-command
|
||||
${CMAKE_CMAKE_COMMAND}
|
||||
-D dir=${CMake_BINARY_DIR}/Tests/CPackTestAllGenerators
|
||||
-D cpack=${CMAKE_CPACK_COMMAND}
|
||||
-P ${CMake_SOURCE_DIR}/Tests/CPackTestAllGenerators/RunCPack.cmake
|
||||
)
|
||||
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CPackTestAllGenerators")
|
||||
ENDIF(CTEST_RUN_CPackTestAllGenerators)
|
||||
|
||||
IF(CTEST_package_X11_TEST)
|
||||
SET(X11_build_target_arg --build-target package)
|
||||
ELSE(CTEST_package_X11_TEST)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
cmake_minimum_required(VERSION 2.8)
|
||||
project(CPackTestAllGenerators)
|
||||
add_subdirectory(../CTestTest/SmallAndFast SmallAndFast)
|
||||
install(FILES RunCPack.cmake DESTINATION .)
|
||||
include(CPack)
|
|
@ -0,0 +1,55 @@
|
|||
if(NOT DEFINED cpack)
|
||||
message(FATAL_ERROR "cpack not defined")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED dir)
|
||||
message(FATAL_ERROR "dir not defined")
|
||||
endif()
|
||||
|
||||
# Analyze 'cpack --help' output for list of available generators:
|
||||
#
|
||||
execute_process(COMMAND ${cpack} --help
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE stdout
|
||||
ERROR_VARIABLE stderr
|
||||
WORKING_DIRECTORY ${dir})
|
||||
|
||||
string(REPLACE ";" "\\;" stdout ${stdout})
|
||||
string(REPLACE "\n" "E;" stdout ${stdout})
|
||||
|
||||
set(collecting 0)
|
||||
set(generators)
|
||||
foreach(eline ${stdout})
|
||||
string(REGEX REPLACE "^(.*)E$" "\\1" line ${eline})
|
||||
if(collecting AND NOT line STREQUAL "")
|
||||
string(REGEX REPLACE "^ ([^ ]+) += (.*)$" "\\1" gen "${line}")
|
||||
string(REGEX REPLACE "^ ([^ ]+) += (.*)$" "\\2" doc "${line}")
|
||||
set(generators ${generators} ${gen})
|
||||
endif()
|
||||
if(line STREQUAL "Generators")
|
||||
set(collecting 1)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Call cpack with -G on each available generator. We do not care if this
|
||||
# succeeds or not. We expect it *not* to succeed if the underlying packaging
|
||||
# tools are not installed on the system... This test is here simply to add
|
||||
# coverage for the various cpack generators, even/especially to test ones
|
||||
# where the tools are not installed.
|
||||
#
|
||||
message(STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
|
||||
|
||||
message(STATUS "CPack generators='${generators}'")
|
||||
|
||||
foreach(g ${generators})
|
||||
message(STATUS "Calling cpack -G ${g}...")
|
||||
execute_process(COMMAND ${cpack} -G ${g}
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE stdout
|
||||
ERROR_VARIABLE stderr
|
||||
WORKING_DIRECTORY ${dir})
|
||||
message(STATUS "result='${result}'")
|
||||
message(STATUS "stdout='${stdout}'")
|
||||
message(STATUS "stderr='${stderr}'")
|
||||
message(STATUS "")
|
||||
endforeach()
|
Loading…
Reference in New Issue