RunCMakeTest.cmake 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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 "Clang"
  26. OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
  27. macro(run_cmake_target test subtest)
  28. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
  29. set(RunCMake_TEST_NO_CLEAN 1)
  30. set(RunCMake_TEST_CONFIG Release)
  31. run_cmake_command(${test}-${subtest} ${CMAKE_COMMAND} --build . --config Release --target ${subtest} ${ARGN})
  32. unset(RunCMake_TEST_BINARY_DIR)
  33. unset(RunCMake_TEST_NO_CLEAN)
  34. endmacro()
  35. set(RunCMake_TEST_SOURCE_DIR "${RunCMake_SOURCE_DIR}")
  36. set(RunCMake_TEST_OUTPUT_MERGE TRUE)
  37. if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
  38. set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
  39. endif()
  40. run_cmake(PIE)
  41. if (PIE_SUPPORTED)
  42. run_cmake_target(PIE pie_on)
  43. endif()
  44. if (NO_PIE_SUPPORTED)
  45. run_cmake_target(PIE pie_off)
  46. endif()
  47. run_cmake(CMP0083)
  48. run_cmake_target(CMP0083 cmp0083_ref)
  49. # retrieve default mode
  50. include("${RunCMake_SOURCE_DIR}/PIE_validator.cmake")
  51. include("${RunCMake_BINARY_DIR}/CMP0083-build/Release/CMP0083_config.cmake")
  52. check_executable("${cmp0083_ref}" cmp0083_ref_mode)
  53. if ((cmp0083_ref_mode STREQUAL "PIE" AND NO_PIE_SUPPORTED)
  54. OR (cmp0083_ref_mode STREQUAL "NO_PIE" AND PIE_SUPPORTED))
  55. run_cmake_target(CMP0083 cmp0083_new)
  56. endif()
  57. run_cmake_target(CMP0083 cmp0083_old)
  58. unset(RunCMake_TEST_SOURCE_DIR)
  59. unset(RunCMake_TEST_OPTIONS)
  60. unset(RunCMake_TEST_OUTPUT_MERGE)
  61. endif()
  62. endif()