mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-05 13:50:10 -05:00
9a8700296c
The test is getting fairly large and timing out more and more often. Split out actual compilation tests.
138 lines
4.0 KiB
CMake
138 lines
4.0 KiB
CMake
include(RunCMake)
|
|
|
|
set(stdlib_custom_json)
|
|
if (CMake_TEST_CXX_STDLIB_MODULES_JSON)
|
|
list(APPEND stdlib_custom_json
|
|
-DCMAKE_CXX_STDLIB_MODULES_JSON=${CMake_TEST_CXX_STDLIB_MODULES_JSON})
|
|
endif ()
|
|
|
|
run_cmake(Inspect ${stdlib_custom_json})
|
|
include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake")
|
|
|
|
# Test negative cases where C++20 modules do not work.
|
|
run_cmake(NoCXX)
|
|
if ("cxx_std_20" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
|
# This test requires that the compiler be told to compile in an older-than-20
|
|
# standard. If the compiler forces a standard to be used, skip it.
|
|
if (NOT forced_cxx_standard)
|
|
run_cmake(NoCXX20)
|
|
if(CMAKE_CXX_STANDARD_DEFAULT AND CMAKE_CXX20_STANDARD_COMPILE_OPTION)
|
|
run_cmake_with_options(ImplicitCXX20 -DCMAKE_CXX20_STANDARD_COMPILE_OPTION=${CMAKE_CXX20_STANDARD_COMPILE_OPTION})
|
|
endif()
|
|
endif ()
|
|
|
|
run_cmake(NoScanningSourceFileProperty)
|
|
run_cmake(NoScanningTargetProperty)
|
|
run_cmake(NoScanningVariable)
|
|
run_cmake(CMP0155-OLD)
|
|
run_cmake(CMP0155-NEW)
|
|
run_cmake(CMP0155-NEW-with-rule)
|
|
endif ()
|
|
|
|
if (RunCMake_GENERATOR MATCHES "Ninja")
|
|
execute_process(
|
|
COMMAND "${CMAKE_MAKE_PROGRAM}" --version
|
|
RESULT_VARIABLE res
|
|
OUTPUT_VARIABLE ninja_version
|
|
ERROR_VARIABLE err
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if (res)
|
|
message(WARNING
|
|
"Failed to determine `ninja` version: ${err}")
|
|
set(ninja_version "0")
|
|
endif ()
|
|
endif ()
|
|
|
|
set(generator_supports_cxx_modules 0)
|
|
if (RunCMake_GENERATOR MATCHES "Ninja" AND
|
|
ninja_version VERSION_GREATER_EQUAL "1.11" AND
|
|
"cxx_std_20" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
|
set(generator_supports_cxx_modules 1)
|
|
endif ()
|
|
|
|
if (RunCMake_GENERATOR MATCHES "Visual Studio" AND
|
|
CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "19.34")
|
|
set(generator_supports_cxx_modules 1)
|
|
endif ()
|
|
|
|
# Test behavior when the generator does not support C++20 modules.
|
|
if (NOT generator_supports_cxx_modules)
|
|
if ("cxx_std_20" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
|
run_cmake(NoDyndepSupport)
|
|
endif ()
|
|
|
|
# Bail; the remaining tests require the generator to successfully generate
|
|
# with C++20 modules in the source list.
|
|
return ()
|
|
endif ()
|
|
|
|
set(fileset_types
|
|
Modules)
|
|
set(scopes
|
|
Interface
|
|
Private
|
|
Public)
|
|
set(target_types
|
|
Interface
|
|
Static
|
|
)
|
|
foreach (fileset_type IN LISTS fileset_types)
|
|
foreach (scope IN LISTS scopes)
|
|
foreach (target_type IN LISTS target_types)
|
|
run_cmake("FileSet${fileset_type}${scope}On${target_type}")
|
|
endforeach ()
|
|
endforeach ()
|
|
run_cmake("FileSet${fileset_type}InterfaceImported")
|
|
|
|
# Test the error messages when a non-C++ source file is found in the source
|
|
# list.
|
|
run_cmake("NotCompiledSource${fileset_type}")
|
|
run_cmake("NotCXXSource${fileset_type}")
|
|
endforeach ()
|
|
|
|
if ("cxx_std_23" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
|
run_cmake(CXXImportStdConfig)
|
|
run_cmake(CXXImportStdHeadTarget)
|
|
run_cmake(CXXImportStdLinkLanguage)
|
|
run_cmake(CXXImportStdInvalidGenex)
|
|
endif ()
|
|
|
|
if ("cxx_std_23" IN_LIST CMAKE_CXX_COMPILE_FEATURES AND
|
|
NOT have_cxx23_import_std)
|
|
run_cmake(NoCXX23TargetUnset)
|
|
run_cmake(NoCXX23TargetNotRequired)
|
|
run_cmake(NoCXX23TargetRequired)
|
|
endif ()
|
|
|
|
if ("cxx_std_26" IN_LIST CMAKE_CXX_COMPILE_FEATURES AND
|
|
NOT have_cxx26_import_std)
|
|
run_cmake(NoCXX26TargetUnset)
|
|
run_cmake(NoCXX26TargetNotRequired)
|
|
run_cmake(NoCXX26TargetRequired)
|
|
endif ()
|
|
|
|
run_cmake(InstallBMI)
|
|
run_cmake(InstallBMIGenericArgs)
|
|
run_cmake(InstallBMIIgnore)
|
|
|
|
run_cmake(ExportBuildCxxModules)
|
|
run_cmake(ExportBuildCxxModulesTargets)
|
|
run_cmake(ExportInstallCxxModules)
|
|
|
|
# Generator-specific tests.
|
|
if (RunCMake_GENERATOR MATCHES "Ninja")
|
|
run_cmake(NinjaDependInfoFileSet)
|
|
run_cmake(NinjaDependInfoExport)
|
|
run_cmake(NinjaDependInfoExportFilesystemSafe)
|
|
run_cmake(NinjaDependInfoBMIInstall)
|
|
run_cmake(NinjaForceResponseFile) # issue#25367
|
|
run_cmake(NinjaDependInfoCompileDatabase)
|
|
elseif (RunCMake_GENERATOR MATCHES "Visual Studio")
|
|
run_cmake(VisualStudioNoSyntheticTargets)
|
|
else ()
|
|
message(FATAL_ERROR
|
|
"Please add 'DependInfo' tests for the '${RunCMake_GENERATOR}' generator.")
|
|
endif ()
|