Przeglądaj źródła

Swift: Add proper Swift compiler test

This catches for example the unavailability of Swift with
Xcode Beta6 and macosx10.10 SDK.
Gregor Jasny 10 lat temu
rodzic
commit
9cdf6ef48d
1 zmienionych plików z 51 dodań i 1 usunięć
  1. 51 1
      Modules/CMakeTestSwiftCompiler.cmake

+ 51 - 1
Modules/CMakeTestSwiftCompiler.cmake

@@ -12,4 +12,54 @@
 # (To distribute this file outside of CMake, substitute the full
 #  License text for the above reference.)
 
-set(CMAKE_Swift_COMPILER_WORKS 1)
+if(CMAKE_Swift_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_Swift_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeSwiftCompiler.cmake.
+unset(CMAKE_Swift_COMPILER_WORKS CACHE)
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that that selected C++ compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_Swift_COMPILER_WORKS)
+  PrintTestCompilerStatus("Swift" "")
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift
+    "import Foundation\n"
+    "print(\"CMake\")\n")
+  try_compile(CMAKE_Swift_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift
+    OUTPUT_VARIABLE __CMAKE_Swift_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_Swift_COMPILER_WORKS ${CMAKE_Swift_COMPILER_WORKS})
+  unset(CMAKE_Swift_COMPILER_WORKS CACHE)
+  set(Swift_TEST_WAS_RUN 1)
+endif()
+
+if(NOT CMAKE_Swift_COMPILER_WORKS)
+  PrintTestCompilerStatus("Swift" " -- broken")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+    "Determining if the Swift compiler works failed with "
+    "the following output:\n${__CMAKE_Swift_COMPILER_OUTPUT}\n\n")
+  message(FATAL_ERROR "The Swift compiler \"${CMAKE_Swift_COMPILER}\" "
+    "is not able to compile a simple test program.\nIt fails "
+    "with the following output:\n ${__CMAKE_Swift_COMPILER_OUTPUT}\n\n"
+    "CMake will not be able to correctly generate this project.")
+else()
+  if(Swift_TEST_WAS_RUN)
+    PrintTestCompilerStatus("Swift" " -- works")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Determining if the Swift compiler works passed with "
+      "the following output:\n${__CMAKE_Swift_COMPILER_OUTPUT}\n\n")
+  endif()
+endif()
+
+unset(__CMAKE_Swift_COMPILER_OUTPUT)