1include(RunCMake) 2 3run_cmake(Conflict1) 4run_cmake(Conflict2) 5run_cmake(Conflict3) 6run_cmake(Conflict4) 7run_cmake(Conflict5) 8run_cmake(Conflict6) 9run_cmake(Debug) 10run_cmake(Genex1) 11run_cmake(Genex2) 12 13set(RunCMake_TEST_OPTIONS "-DPIE_SUPPORTED=${RunCMake_BINARY_DIR}/PIESupported.cmake") 14run_cmake(CheckPIESupported) 15include ("${RunCMake_BINARY_DIR}/PIESupported.cmake" OPTIONAL) 16 17if (PIE_SUPPORTED OR NO_PIE_SUPPORTED) 18 if (CMAKE_SYSTEM_NAME MATCHES "^(Linux|(Free|Net|Open)BSD)$") 19 # try to locate readelf needed for validation 20 find_program (READELF NAMES readelf) 21 endif() 22 if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") 23 # try to locate otool needed for validation 24 find_program (OTOOL NAMES otool) 25 endif() 26 27 if ((READELF OR OTOOL) AND 28 (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" 29 OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" 30 OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")) 31 macro(run_cmake_target test subtest) 32 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build) 33 set(RunCMake_TEST_NO_CLEAN 1) 34 set(RunCMake_TEST_CONFIG Release) 35 run_cmake_command(${test}-${subtest} ${CMAKE_COMMAND} --build . --config Release --target ${subtest} ${ARGN}) 36 37 unset(RunCMake_TEST_BINARY_DIR) 38 unset(RunCMake_TEST_NO_CLEAN) 39 endmacro() 40 41 set(RunCMake_TEST_SOURCE_DIR "${RunCMake_SOURCE_DIR}") 42 set(RunCMake_TEST_OUTPUT_MERGE TRUE) 43 if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG) 44 set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release) 45 endif() 46 47 run_cmake(PIE) 48 if (PIE_SUPPORTED) 49 run_cmake_target(PIE pie_on) 50 endif() 51 if (NO_PIE_SUPPORTED) 52 run_cmake_target(PIE pie_off) 53 endif() 54 55 run_cmake(CMP0083) 56 run_cmake_target(CMP0083 cmp0083_ref) 57 58 # retrieve default mode 59 include("${RunCMake_SOURCE_DIR}/PIE_validator.cmake") 60 include("${RunCMake_BINARY_DIR}/CMP0083-build/Release/CMP0083_config.cmake") 61 check_executable("${cmp0083_ref}" cmp0083_ref_mode) 62 63 if ((cmp0083_ref_mode STREQUAL "PIE" AND NO_PIE_SUPPORTED) 64 OR (cmp0083_ref_mode STREQUAL "NO_PIE" AND PIE_SUPPORTED)) 65 run_cmake_target(CMP0083 cmp0083_new) 66 endif() 67 run_cmake_target(CMP0083 cmp0083_old) 68 69 unset(RunCMake_TEST_SOURCE_DIR) 70 unset(RunCMake_TEST_OPTIONS) 71 unset(RunCMake_TEST_OUTPUT_MERGE) 72 endif() 73endif() 74