RunCMakeTest.cmake 2.3 KB

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