diff options
author | Michael Stürmer <michael.stuermer@schaeffler.com> | 2016-12-12 13:52:29 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-12-15 14:16:30 (GMT) |
commit | 5c6c0344d32f9282059d46b6fe6f9925ac1f1202 (patch) | |
tree | fc9ce79ea985322807b73cbcd30bcc5cff5ce24d /Modules/CMakeTestCSharpCompiler.cmake | |
parent | 3874843f0f5be9d53001517b3697e0d092f0e845 (diff) | |
download | CMake-5c6c0344d32f9282059d46b6fe6f9925ac1f1202.zip CMake-5c6c0344d32f9282059d46b6fe6f9925ac1f1202.tar.gz CMake-5c6c0344d32f9282059d46b6fe6f9925ac1f1202.tar.bz2 |
C# support: add compiler detection for MSVC
Diffstat (limited to 'Modules/CMakeTestCSharpCompiler.cmake')
-rw-r--r-- | Modules/CMakeTestCSharpCompiler.cmake | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Modules/CMakeTestCSharpCompiler.cmake b/Modules/CMakeTestCSharpCompiler.cmake new file mode 100644 index 0000000..21b7236 --- /dev/null +++ b/Modules/CMakeTestCSharpCompiler.cmake @@ -0,0 +1,68 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +if(CMAKE_CSharp_COMPILER_FORCED) + # The compiler configuration was forced by the user. + # Assume the user has configured all compiler information. + set(CMAKE_CSharp_COMPILER_WORKS TRUE) + return() +endif() + +include(CMakeTestCompilerCommon) + +unset(CMAKE_CSharp_COMPILER_WORKS CACHE) + +set(test_compile_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCSharpCompiler.cs") + +# 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_CSharp_COMPILER_WORKS) + PrintTestCompilerStatus("C#" "${CMAKE_CSharp_COMPILER}") + file(WRITE "${test_compile_file}" + "namespace Test {" + " public class CSharp {" + " static void Main(string[] args) {}" + " }" + "}" + ) + try_compile(CMAKE_CSharp_COMPILER_WORKS ${CMAKE_BINARY_DIR} "${test_compile_file}" + OUTPUT_VARIABLE __CMAKE_CSharp_COMPILER_OUTPUT + ) + # Move result from cache to normal variable. + set(CMAKE_CSharp_COMPILER_WORKS ${CMAKE_CSharp_COMPILER_WORKS}) + unset(CMAKE_CSharp_COMPILER_WORKS CACHE) + if(NOT CMAKE_CSharp_COMPILER_WORKS) + message("forcing compiler works to true (will be removed once C# support is integrated)") + set(CMAKE_CSharp_COMPILER_WORKS 1) + endif() + set(CSharp_TEST_WAS_RUN 1) +endif() + +if(NOT CMAKE_CSharp_COMPILER_WORKS) + PrintTestCompilerStatus("C#" "${CMAKE_CSharp_COMPILER} -- broken") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the C# compiler works failed with " + "the following output:\n${__CMAKE_CSharp_COMPILER_OUTPUT}\n\n") + message(FATAL_ERROR "The C# compiler \"${CMAKE_CSharp_COMPILER}\" " + "is not able to compile a simple test program.\nIt fails " + "with the following output:\n ${__CMAKE_CSharp_COMPILER_OUTPUT}\n\n" + "CMake will not be able to correctly generate this project.") +else() + if(CSharp_TEST_WAS_RUN) + PrintTestCompilerStatus("C#" "${CMAKE_CSharp_COMPILER} -- works") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the C# compiler works passed with " + "the following output:\n${__CMAKE_CSharp_COMPILER_OUTPUT}\n\n") + endif() + + # Re-configure to save learned information. + configure_file( + ${CMAKE_ROOT}/Modules/CMakeCSharpCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeCSharpCompiler.cmake + @ONLY + ) + include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCSharpCompiler.cmake) +endif() |