1include(RunCMake) 2 3run_cmake(CopyFileErrorNoCopyFile) 4run_cmake(NoArgs) 5run_cmake(OneArg) 6run_cmake(TwoArgs) 7run_cmake(NoCopyFile) 8run_cmake(NoCopyFile2) 9run_cmake(NoCopyFileError) 10run_cmake(NoOutputVariable) 11run_cmake(NoOutputVariable2) 12run_cmake(NoSources) 13run_cmake(BadLinkLibraries) 14run_cmake(BadSources1) 15run_cmake(BadSources2) 16run_cmake(NonSourceCopyFile) 17run_cmake(NonSourceCompileDefinitions) 18 19run_cmake(EnvConfig) 20 21set(RunCMake_TEST_OPTIONS --debug-trycompile) 22run_cmake(PlatformVariables) 23run_cmake(WarnDeprecated) 24unset(RunCMake_TEST_OPTIONS) 25 26run_cmake(TargetTypeExe) 27run_cmake(TargetTypeInvalid) 28run_cmake(TargetTypeStatic) 29 30if (CMAKE_SYSTEM_NAME MATCHES "^(Linux|Darwin|Windows)$" AND 31 CMAKE_C_COMPILER_ID MATCHES "^(MSVC|GNU|Clang|AppleClang)$") 32 set (RunCMake_TEST_OPTIONS -DRunCMake_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}) 33 run_cmake(LinkOptions) 34 unset (RunCMake_TEST_OPTIONS) 35endif() 36 37if(CMAKE_C_STANDARD_DEFAULT) 38 run_cmake(CStandard) 39elseif(DEFINED CMAKE_C_STANDARD_DEFAULT) 40 run_cmake(CStandardNoDefault) 41endif() 42if(CMAKE_OBJC_STANDARD_DEFAULT) 43 run_cmake(ObjCStandard) 44endif() 45if(CMAKE_CXX_STANDARD_DEFAULT) 46 run_cmake(CxxStandard) 47elseif(DEFINED CMAKE_CXX_STANDARD_DEFAULT) 48 run_cmake(CxxStandardNoDefault) 49endif() 50if(CMAKE_OBJCXX_STANDARD_DEFAULT) 51 run_cmake(ObjCxxStandard) 52endif() 53if(CMake_TEST_CUDA) 54 run_cmake(CudaStandard) 55endif() 56if(CMake_TEST_ISPC) 57 run_cmake(ISPCTargets) 58 run_cmake(ISPCInvalidTarget) 59 set(ninja "") 60 if(RunCMake_GENERATOR MATCHES "Ninja") 61 set(ninja "Ninja") 62 endif() 63 run_cmake(ISPCDuplicateTarget${ninja}) 64endif() 65if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.4) 66 run_cmake(CStandardGNU) 67endif() 68if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4) 69 run_cmake(CxxStandardGNU) 70endif() 71 72run_cmake(CMP0056) 73run_cmake(CMP0066) 74run_cmake(CMP0067) 75 76if(RunCMake_GENERATOR MATCHES "Make|Ninja") 77 # Use a single build tree for a few tests without cleaning. 78 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/RerunCMake-build) 79 set(RunCMake_TEST_NO_CLEAN 1) 80 file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") 81 file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") 82 set(in_tc "${RunCMake_TEST_BINARY_DIR}/TryCompileInput.c") 83 file(WRITE "${in_tc}" "int main(void) { return 0; }\n") 84 85 # Older Ninja keeps all rerun output on stdout 86 set(ninja "") 87 if(RunCMake_GENERATOR STREQUAL "Ninja") 88 execute_process(COMMAND ${RunCMake_MAKE_PROGRAM} --version 89 OUTPUT_VARIABLE ninja_version OUTPUT_STRIP_TRAILING_WHITESPACE) 90 if(ninja_version VERSION_LESS 1.5) 91 set(ninja -ninja-no-console) 92 endif() 93 endif() 94 95 message(STATUS "RerunCMake: first configuration...") 96 run_cmake(RerunCMake) 97 if(NOT CMake_TEST_FILESYSTEM_1S) 98 set(RunCMake_TEST_OUTPUT_MERGE 1) 99 run_cmake_command(RerunCMake-nowork${ninja} ${CMAKE_COMMAND} --build .) 100 unset(RunCMake_TEST_OUTPUT_MERGE) 101 endif() 102 103 execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1) # handle 1s resolution 104 message(STATUS "RerunCMake: modify try_compile input...") 105 file(WRITE "${in_tc}" "does-not-compile\n") 106 run_cmake_command(RerunCMake-rerun${ninja} ${CMAKE_COMMAND} --build .) 107 if(NOT CMake_TEST_FILESYSTEM_1S) 108 set(RunCMake_TEST_OUTPUT_MERGE 1) 109 run_cmake_command(RerunCMake-nowork${ninja} ${CMAKE_COMMAND} --build .) 110 unset(RunCMake_TEST_OUTPUT_MERGE) 111 endif() 112 113 unset(RunCMake_TEST_BINARY_DIR) 114 unset(RunCMake_TEST_NO_CLEAN) 115endif() 116 117if(UNIX) 118 run_cmake(CleanupNoFollowSymlink) 119endif() 120