blob: 3717981eb022edc386ec2b5322e4b4ea9d81db4b [file]
function (run_cxx_module_install_prep kind case component config expect_build)
cmake_parse_arguments(PARSE_ARGV 5 prep
"EXCLUDE_FROM_ALL;EMPTY_DESTINATION;NO_MODULE_DIRECTORY" "CONFIGURATIONS" "")
set(test "install-prep-${kind}-${case}")
if (kind STREQUAL "GeneratedSource")
set(directory install-prep)
set(source_destination sources)
elseif (kind STREQUAL "BMI")
set(directory install-prep-BMI)
set(module_target install_bmi)
set(source_destination sources)
else ()
set(directory install-prep-Metadata)
set(module_target export_interfaces)
set(source_destination lib/cxx/miu)
endif ()
set(RunCMake_TEST_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/${directory}")
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test}-build")
set(prefix "${RunCMake_BINARY_DIR}/${test}-install")
file(REMOVE_RECURSE "${prefix}")
set(rule_options)
if (prep_EXCLUDE_FROM_ALL)
list(APPEND rule_options EXCLUDE_FROM_ALL)
endif ()
if (prep_CONFIGURATIONS)
list(APPEND rule_options CONFIGURATIONS "${prep_CONFIGURATIONS}")
endif ()
string(REPLACE ";" "\\;" rule_options "${rule_options}")
set(RunCMake_TEST_OPTIONS
"-DCMAKE_INSTALL_PREFIX=${prefix}"
"-Dprep_test=ON"
"-Dprep_rule_options=${rule_options}"
"-Dprep_empty_destination=${prep_EMPTY_DESTINATION}"
"-Dprep_no_module_directory=${prep_NO_MODULE_DIRECTORY}"
"-DCMake_TEST_MODULE_COMPILATION_RULES=${CMake_TEST_MODULE_COMPILATION_RULES}"
)
if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
list(APPEND RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=${config}")
else ()
list(APPEND RunCMake_TEST_OPTIONS "-DCMAKE_BUILD_TYPE=${config}")
endif ()
run_cmake("${test}")
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake-check-file "install-prep-build-check.cmake")
run_cmake_command("${test}-build" "${CMAKE_COMMAND}"
--build . --config "${config}" --target "install_prep/${component}")
unset(RunCMake-check-file)
# Component-specific BMI installation has separate limitations. Check the
# prepared BMI above; exercise installation with the full-install case.
if ((expect_build AND (kind STREQUAL "Metadata" OR component STREQUAL "all"))
OR kind STREQUAL "GeneratedSource")
set(install_args)
if (NOT component STREQUAL "all")
list(APPEND install_args --component "${component}")
endif ()
set(RunCMake-check-file "install-prep-install-check.cmake")
run_cmake_command("${test}-install" "${CMAKE_COMMAND}"
--install . --config "${config}" ${install_args})
endif ()
endfunction ()
# Preparing a generated module source must not compile it to a BMI.
if ("named" IN_LIST CMake_TEST_MODULE_COMPILATION)
run_cxx_module_install_prep(GeneratedSource sources Sources Debug 0)
endif ()
if ("install_bmi" IN_LIST CMake_TEST_MODULE_COMPILATION)
run_cxx_module_install_prep(BMI all all Debug 1)
run_cxx_module_install_prep(BMI component BMI Debug 1)
run_cxx_module_install_prep(BMI excluded-all all Debug 0 EXCLUDE_FROM_ALL)
run_cxx_module_install_prep(BMI excluded-component BMI Debug 1 EXCLUDE_FROM_ALL)
run_cxx_module_install_prep(BMI config-inactive BMI Debug 0 CONFIGURATIONS Release)
run_cxx_module_install_prep(BMI config-active BMI Release 1 CONFIGURATIONS Release)
run_cxx_module_install_prep(BMI sources Sources Debug 0)
run_cxx_module_install_prep(BMI empty-destination BMI Debug 0 EMPTY_DESTINATION)
endif ()
if ("export_bmi" IN_LIST CMake_TEST_MODULE_COMPILATION)
run_cxx_module_install_prep(Metadata all all Debug 1)
run_cxx_module_install_prep(Metadata component Metadata Debug 1)
run_cxx_module_install_prep(Metadata excluded-all all Debug 0 EXCLUDE_FROM_ALL)
run_cxx_module_install_prep(Metadata excluded-component Metadata Debug 1 EXCLUDE_FROM_ALL)
run_cxx_module_install_prep(Metadata config-inactive Metadata Debug 0 CONFIGURATIONS Release)
run_cxx_module_install_prep(Metadata config-active Metadata Release 1 CONFIGURATIONS Release)
run_cxx_module_install_prep(Metadata sources Sources Debug 0)
run_cxx_module_install_prep(Metadata no-module-directory Metadata Debug 0 NO_MODULE_DIRECTORY)
endif ()