# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. include(RunCMake) #[[ set(RunPack_GENERATORS ...) run_cpack( # general options [CONFIG ] # Build/package given configuration (default "Release"). [GENERATORS ...] # Tell cpack to use the given generator(s). [SAMPLE ] # Use RunCPack/ project (default ). # build step [BUILD] # Build the test project before packaging. # package,cpack- steps [PACKAGE] # Run cpack via buildsystem "package" target. [NO_CPACK] # Do not run cpack directly. # verify step [NO_VERIFY] # Do not run verify step. [GLOB ...] # Match expected package files with globbing patterns. [VERIFY ...] # Run custom verification command on each package file. ) #]] function(run_cpack case) cmake_parse_arguments(PARSE_ARGV 1 run_cpack # Zero-value "BUILD;PACKAGE;NO_CPACK;NO_VERIFY" # One-value "CONFIG;SAMPLE" # Multi-value "GENERATORS;GLOB;VERIFY" ) if(DEFINED RunCPack_UNPARSED_ARGUMENTS) message(FATAL_ERROR "Unknown arguments:\n ${RunCPack_UNPARSED_ARGUMENTS}") endif() if(DEFINED RunCPack_KEYWORDS_MISSING_VALUES) message(FATAL_ERROR "Keywords missing values:\n ${RunCPack_KEYWORDS_MISSING_VALUES}") endif() if(run_cpack_GENERATORS) set(RunCPack_GENERATORS "${run_cpack_GENERATORS}") elseif(NOT RunCPack_GENERATORS) message(FATAL_ERROR "RunCPack_GENERATORS not defined by caller!") endif() if(run_cpack_CONFIG) set(RunCPack_CONFIG "${run_cpack_CONFIG}") elseif(NOT RunCPack_CONFIG) set(RunCPack_CONFIG "Release") endif() if(run_cpack_SAMPLE) set(RunCPack_SAMPLE "${run_cpack_SAMPLE}") else() set(RunCPack_SAMPLE "${case}") endif() if(run_cpack_GLOB) set(RunCPack_GLOB "${run_cpack_GLOB}") endif() if(run_cpack_VERIFY) set(RunCPack_VERIFY ${run_cpack_VERIFY}) endif() # Configure the sample project. set(RunCMake_TEST_SOURCE_DIR ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/RunCPack/${RunCPack_SAMPLE}) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build) string(APPEND RunCMake_TEST_RAW_ARGS " \"-DCPACK_GENERATOR=${RunCPack_GENERATORS}\"") if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG) list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=${RunCPack_CONFIG}) endif() run_cmake(${case}-cmake) unset(RunCMake_TEST_RAW_ARGS) set(RunCMake_TEST_NO_CLEAN 1) # Optionally build the project. if(run_cpack_BUILD) set(RunCMake_TEST_OUTPUT_MERGE 1) run_cmake_command(${case}-build "${CMAKE_COMMAND}" --build . --config "${RunCPack_CONFIG}") unset(RunCMake_TEST_OUTPUT_MERGE) endif() # Optionally package through the build system. if(run_cpack_PACKAGE) set(RunCMake_TEST_OUTPUT_MERGE 1) run_cmake_command(${case}-package "${CMAKE_COMMAND}" --build . --config "${RunCPack_CONFIG}" --target package) unset(RunCMake_TEST_OUTPUT_MERGE) endif() # Run cpack with each generator. if(NOT run_cpack_NO_CPACK) foreach(RunCPack_GENERATOR IN LISTS RunCPack_GENERATORS) run_cmake_command(${case}-cpack-${RunCPack_GENERATOR} "${CMAKE_CPACK_COMMAND}" -C "${RunCPack_CONFIG}" -G "${RunCPack_GENERATOR}") endforeach() endif() # Verify the resulting package files. if(NOT run_cpack_NO_VERIFY) set(RunCMake_TEST_RAW_ARGS " \"-Dglob=${RunCPack_GLOB}\" \"-Dverify=${RunCPack_VERIFY}\" -P \"${CMAKE_CURRENT_FUNCTION_LIST_DIR}/RunCPack/verify.cmake\"") run_cmake_command(${case}-verify "${CMAKE_COMMAND}" -Ddir=${RunCMake_TEST_BINARY_DIR}) unset(RunCMake_TEST_RAW_ARGS) endif() endfunction()