diff --git a/cmake/modules/InstallationHelper.cmake b/cmake/modules/InstallationHelper.cmake --- a/cmake/modules/InstallationHelper.cmake +++ b/cmake/modules/InstallationHelper.cmake @@ -3,24 +3,35 @@ include(GNUInstallDirs) function(install_target _target) + cmake_parse_arguments(ARG + "" + "COMPONENT" + "" + ${ARGN} + ) + + if(NOT ARG_COMPONENT) + set(ARG_COMPONENT ${PROJECT_NAME}) + endif() + install( TARGETS ${_target} RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - COMPONENT ${PROJECT_NAME} - ${ARGN} + COMPONENT ${ARG_COMPONENT} + ${ARG_UNPARSED_ARGUMENTS} ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - COMPONENT ${PROJECT_NAME} - ${ARGN} + COMPONENT ${ARG_COMPONENT} + ${ARG_UNPARSED_ARGUMENTS} LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - COMPONENT ${PROJECT_NAME} - ${ARGN} + COMPONENT ${ARG_COMPONENT} + ${ARG_UNPARSED_ARGUMENTS} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - COMPONENT ${PROJECT_NAME} - ${ARGN} + COMPONENT ${ARG_COMPONENT} + ${ARG_UNPARSED_ARGUMENTS} ) endfunction() diff --git a/cmake/modules/TestSuite.cmake b/cmake/modules/TestSuite.cmake --- a/cmake/modules/TestSuite.cmake +++ b/cmake/modules/TestSuite.cmake @@ -50,7 +50,7 @@ add_custom_target(${TARGET} COMMENT "Running ${NAME} test suite" - COMMAND cmake -E echo "PASSED: ${NAME} test suite" + COMMAND "${CMAKE_COMMAND}" -E echo "PASSED: ${NAME} test suite" ) foreach(PARENT_TARGET ${ARGN}) @@ -74,6 +74,36 @@ set_property(GLOBAL APPEND PROPERTY JOB_POOLS ${POOL}=${JOBS}) endfunction() +include(InstallationHelper) +function(install_test SUITE NAME) + # Allow for installing all tests ... + if(NOT TARGET install-tests) + add_custom_target(install-tests) + endif() + + # ... a complete test suite ... + if(NOT TARGET install-test-suite-${SUITE}) + add_custom_target(install-test-suite-${SUITE}) + endif() + + if(NOT TARGET install-${SUITE}-${NAME}) + install_target(${NAME} COMPONENT ${SUITE}-${NAME} EXCLUDE_FROM_ALL) + + # ... or a single test + add_custom_target(install-${SUITE}-${NAME} + COMMENT "Installing ${NAME} from test suite ${SUITE}" + COMMAND + "${CMAKE_COMMAND}" + -DCOMPONENT="${SUITE}-${NAME}" + -DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}" + -P cmake_install.cmake + DEPENDS ${NAME} + ) + add_dependencies(install-test-suite-${SUITE} install-${SUITE}-${NAME}) + add_dependencies(install-tests install-${SUITE}-${NAME}) + endif() +endfunction() + set(TEST_RUNNER_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/../templates/TestRunner.cmake.in") function(add_test_runner SUITE NAME EXECUTABLE) cmake_parse_arguments(ARG "JUNIT" "" "" ${ARGN}) @@ -114,6 +144,8 @@ "${NAME}" ) endif() + + install_test(${SUITE} ${EXECUTABLE}) endfunction() function(add_test_to_suite SUITE NAME)