RunCMakeTest.cmake 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. include(RunCMake)
  2. if(RunCMake_GENERATOR STREQUAL Xcode)
  3. if(XCODE_VERSION VERSION_LESS 6.1)
  4. run_cmake(XcodeTooOld)
  5. elseif(CMake_TEST_Swift)
  6. run_cmake(CMP0157-NEW)
  7. run_cmake(CMP0157-OLD)
  8. run_cmake(CMP0157-WARN)
  9. endif()
  10. elseif(RunCMake_GENERATOR STREQUAL Ninja)
  11. if(CMake_TEST_Swift)
  12. if (CMAKE_SYSTEM_NAME MATCHES "Windows")
  13. run_cmake_with_options(Win32ExecutableDisallowed)
  14. else()
  15. run_cmake_with_options(Win32ExecutableIgnored)
  16. set(RunCMake_TEST_OPTIONS -DCMAKE_SYSTEM_NAME=Darwin)
  17. run_cmake(SwiftMultiArch)
  18. unset(RunCMake_TEST_OPTIONS)
  19. endif()
  20. # Test that a second build with no changes does nothing.
  21. block()
  22. run_cmake(NoWorkToDo)
  23. set(RunCMake_TEST_NO_CLEAN 1)
  24. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/NoWorkToDo-build)
  25. set(RunCMake_TEST_OUTPUT_MERGE 1)
  26. run_cmake_command(NoWorkToDo-build ${CMAKE_COMMAND} --build .)
  27. run_cmake_command(NoWorkToDo-nowork ${CMAKE_COMMAND} --build . -- -d explain)
  28. file(WRITE ${RunCMake_TEST_BINARY_DIR}/hello.swift "//No-op change\n")
  29. run_cmake_command(NoWorkToDo-norelink ${CMAKE_COMMAND} --build . -- -d explain)
  30. run_cmake_command(NoWorkToDo-nowork ${CMAKE_COMMAND} --build . -- -d explain)
  31. endblock()
  32. # Test that intermediate static libraries are rebuilt when the public
  33. # interface of their dependency changes
  34. block()
  35. set(IncrementalSwift_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/IncrementalSwift-build)
  36. set(IncrementalSwift_TEST_NO_CLEAN 1)
  37. set(IncrementalSwift_TEST_OUTPUT_MERGE 1)
  38. # Since files are modified during test, the files are created in the cmake
  39. # file into the build directory
  40. run_cmake(IncrementalSwift)
  41. run_cmake_command(IncrementalSwift-first ${CMAKE_COMMAND} --build ${IncrementalSwift_TEST_BINARY_DIR})
  42. # Modify public interface of libA requiring rebuild of libB
  43. file(WRITE ${IncrementalSwift_TEST_BINARY_DIR}/a.swift
  44. "public func callA() -> Float { return 32.0 }\n")
  45. # Note: We still expect this to fail, but instead of failure at link time,
  46. # it should fail while re-compiling libB because the function changed
  47. run_cmake_command(IncrementalSwift-second ${CMAKE_COMMAND} --build ${IncrementalSwift_TEST_BINARY_DIR} -- -d explain)
  48. endblock()
  49. block()
  50. set(CMP0157-OLD_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0157-OLD-build)
  51. set(CMP0157-OLD_TEST_NO_CLEAN 1)
  52. set(CMP0157-OLD_TEST_OUTPUT_MERGE 1)
  53. run_cmake(CMP0157-NEW)
  54. run_cmake(CMP0157-OLD)
  55. # -n: dry-run to avoid actually compiling, -v: verbose to capture executed command
  56. run_cmake_command(CMP0157-OLD-build ${CMAKE_COMMAND} --build ${CMP0157-OLD_TEST_BINARY_DIR} -- -n -v)
  57. run_cmake(CMP0157-WARN)
  58. endblock()
  59. block()
  60. set(CompileCommands_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CompileCommands-build)
  61. run_cmake(CompileCommands)
  62. run_cmake_command(CompileCommands-check ${CMAKE_COMMAND} --build ${CompileCommands_TEST_BINARY_DIR})
  63. endblock()
  64. block()
  65. set(ForceResponseFile_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ForceResponseFile-build)
  66. run_cmake(ForceResponseFile)
  67. # -v: verbose to capture executed commands -n: dry-run to avoid actually compiling
  68. run_cmake_command(ForceResponseFile-check ${CMAKE_COMMAND} --build ${ForceResponseFile_TEST_BINARY_DIR} -- -vn)
  69. endblock()
  70. block()
  71. if(CMAKE_SYSTEM_NAME MATCHES Windows)
  72. set(ImportLibraryFlags_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SwiftLibraryModuleCommand-build)
  73. run_cmake(ImportLibraryFlags)
  74. run_cmake_command(ImportLibraryFlags-check ${CMAKE_COMMAND} --build ${SwiftLibraryModuleCommand_TEST_BINARY_DIR} -- -n -v)
  75. endif()
  76. endblock()
  77. block()
  78. set(SwiftLibraryModuleCommand_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SwiftLibraryModuleCommand-build)
  79. run_cmake(SwiftLibraryModuleCommand)
  80. run_cmake_command(SwiftLibraryModuleCommand-check ${CMAKE_COMMAND} --build ${SwiftLibraryModuleCommand_TEST_BINARY_DIR} -- -n -v)
  81. endblock()
  82. endif()
  83. elseif(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config")
  84. if(CMake_TEST_Swift)
  85. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release")
  86. run_cmake(SwiftSimple)
  87. run_cmake(CMP0157-NEW)
  88. run_cmake(CMP0157-OLD)
  89. run_cmake(CMP0157-WARN)
  90. unset(RunCMake_TEST_OPTIONS)
  91. endif()
  92. else()
  93. run_cmake(NotSupported)
  94. endif()