ソースを参照

Merge topic 'CheckSourceCompiles-Swift'

3fc971c38b CheckSourceCompiles: For Swift executable, name source 'main.swift'
2345139ab5 CheckSourceCompiles: Add support for Swift
4451a1f54f Tests: Factor out a CMake_TEST_Swift variable for Swift test conditions
f78ad6223a Tests: Provide Apple inspection results to CMakeOnly and RunCMake tests

Acked-by: Kitware Robot <[email protected]>
Acked-by: Saleem Abdulrasool <[email protected]>
Merge-request: !7783
Brad King 3 年 前
コミット
765d8eda88

+ 9 - 2
Modules/Internal/CheckSourceCompiles.cmake

@@ -9,7 +9,7 @@ cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
 
 function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
   if(NOT DEFINED "${_var}")
-
+    set(_lang_filename "src")
     if(_lang STREQUAL "C")
       set(_lang_textual "C")
       set(_lang_ext "c")
@@ -34,6 +34,13 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
     elseif(_lang STREQUAL "OBJCXX")
       set(_lang_textual "Objective-C++")
       set(_lang_ext "mm")
+    elseif(_lang STREQUAL "Swift")
+      set(_lang_textual "Swift")
+      set(_lang_ext "swift")
+      if (NOT DEFINED CMAKE_TRY_COMPILE_TARGET_TYPE
+          OR CMAKE_TRY_COMPILE_TARGET_TYPE STREQUAL "EXECUTABLE")
+        set(_lang_filename "main")
+      endif()
     else()
       message (SEND_ERROR "check_source_compiles: ${_lang}: unknown language.")
       return()
@@ -92,7 +99,7 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
     endif()
     string(APPEND _source "\n")
     try_compile(${_var}
-      SOURCE_FROM_VAR "src.${_SRC_EXT}" _source
+      SOURCE_FROM_VAR "${_lang_filename}.${_SRC_EXT}" _source
       COMPILE_DEFINITIONS -D${_var} ${CMAKE_REQUIRED_DEFINITIONS}
       ${CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS}
       ${CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES}

+ 24 - 18
Tests/CMakeLists.txt

@@ -271,14 +271,6 @@ if(BUILD_TESTING)
     find_package(Qt5Widgets QUIET NO_MODULE)
   endif()
 
-  if(NOT CMake_TEST_EXTERNAL_CMAKE)
-    add_subdirectory(CMakeLib)
-  endif()
-  add_subdirectory(CMakeOnly)
-  add_subdirectory(RunCMake)
-
-  add_subdirectory(FindPackageModeMakefileTest)
-
   # Collect a list of all test build directories.
   set(TEST_BUILD_DIRS)
 
@@ -342,6 +334,21 @@ if(BUILD_TESTING)
     endif()
   endif()
 
+  if(CMake_TEST_XCODE_VERSION AND CMAKE_OSX_SDKVERSION AND CMAKE_OSX_SDKPRODUCT)
+    if((NOT CMake_TEST_XCODE_VERSION VERSION_LESS 6.1) AND
+      ((NOT CMAKE_OSX_SDKPRODUCT STREQUAL "Mac OS X") OR
+      (NOT CMAKE_OSX_SDKVERSION VERSION_LESS 10.10)))
+      if(CMAKE_GENERATOR STREQUAL "Xcode")
+        set(CMake_TEST_XCODE_SWIFT 1)
+      endif()
+    endif()
+  endif()
+  if(NOT DEFINED CMake_TEST_Swift)
+    if(CMAKE_Swift_COMPILER OR CMake_TEST_XCODE_SWIFT)
+      set(CMake_TEST_Swift 1)
+    endif()
+  endif()
+
   # Use 1500 or CTEST_TEST_TIMEOUT for long test timeout value,
   # whichever is greater.
   set(CMAKE_LONG_TEST_TIMEOUT 1500)
@@ -352,6 +359,14 @@ if(BUILD_TESTING)
     set(CMAKE_LONG_TEST_TIMEOUT 1500)
   endif()
 
+  if(NOT CMake_TEST_EXTERNAL_CMAKE)
+    add_subdirectory(CMakeLib)
+  endif()
+  add_subdirectory(CMakeOnly)
+  add_subdirectory(RunCMake)
+
+  add_subdirectory(FindPackageModeMakefileTest)
+
   add_test(NAME CMake.Copyright
     COMMAND ${CMAKE_CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/CMakeCopyright.cmake)
 
@@ -380,16 +395,7 @@ if(BUILD_TESTING)
   ADD_TEST_MACRO(MissingSourceFile MissingSourceFile)
   set_tests_properties(MissingSourceFile PROPERTIES
     PASS_REGULAR_EXPRESSION "CMake Error at CMakeLists.txt:3 \\(add_executable\\):[ \r\n]*Cannot find source file:[ \r\n]*DoesNotExist/MissingSourceFile.c")
-  if(CMake_TEST_XCODE_VERSION AND CMAKE_OSX_SDKVERSION AND CMAKE_OSX_SDKPRODUCT)
-    if((NOT CMake_TEST_XCODE_VERSION VERSION_LESS 6.1) AND
-       ((NOT CMAKE_OSX_SDKPRODUCT STREQUAL "Mac OS X") OR
-        (NOT CMAKE_OSX_SDKVERSION VERSION_LESS 10.10)))
-      if(CMAKE_GENERATOR STREQUAL "Xcode")
-        set(CMake_TEST_XCODE_SWIFT 1)
-      endif()
-    endif()
-  endif()
-  if(CMAKE_Swift_COMPILER OR CMake_TEST_XCODE_SWIFT)
+  if(CMake_TEST_Swift)
     ADD_TEST_MACRO(SwiftOnly SwiftOnly)
     if(CMake_TEST_XCODE_SWIFT)
       ADD_TEST_MACRO(SwiftMix SwiftMix)

+ 2 - 1
Tests/RunCMake/CMakeLists.txt

@@ -752,7 +752,8 @@ add_RunCMake_test(CheckCompilerFlag   -DCMake_TEST_CUDA=${CMake_TEST_CUDA}
 add_RunCMake_test(CheckSourceCompiles -DCMake_TEST_CUDA=${CMake_TEST_CUDA}
                                       -DCMake_TEST_ISPC=${CMake_TEST_ISPC}
                                       -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}
-                                      -DCMake_TEST_HIP=${CMake_TEST_HIP})
+                                      -DCMake_TEST_HIP=${CMake_TEST_HIP}
+                                      -DCMake_TEST_Swift=${CMake_TEST_Swift})
 add_RunCMake_test(CheckSourceRuns     -DCMake_TEST_CUDA=${CMake_TEST_CUDA}
                                       -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}
                                       -DCMake_TEST_HIP=${CMake_TEST_HIP})

+ 15 - 0
Tests/RunCMake/CheckSourceCompiles/CheckSourceCompilesSwift.cmake

@@ -0,0 +1,15 @@
+enable_language(Swift)
+include(CheckSourceCompiles)
+
+set(Swift 1) # test that this is tolerated
+
+check_source_compiles(Swift "baz()" SHOULD_FAIL)
+
+if(SHOULD_FAIL)
+  message(SEND_ERROR "invalid Swift source didn't fail.")
+endif()
+
+check_source_compiles(Swift "print(\"Hello, CMake\")" SHOULD_BUILD)
+if(NOT SHOULD_BUILD)
+  message(SEND_ERROR "Test failed for valid Swift source.")
+endif()

+ 4 - 0
Tests/RunCMake/CheckSourceCompiles/RunCMakeTest.cmake

@@ -31,3 +31,7 @@ endif()
 if(CMake_TEST_HIP)
   run_cmake(CheckSourceCompilesHIP)
 endif()
+
+if(CMake_TEST_Swift)
+  run_cmake(CheckSourceCompilesSwift)
+endif()