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