Procházet zdrojové kódy

CheckCompilerFlag: Add tests to verify module correctness

Robert Maynard před 5 roky
rodič
revize
8ac9719659

+ 1 - 0
Tests/RunCMake/CMakeLists.txt

@@ -538,6 +538,7 @@ add_RunCMake_test(target_compile_features)
 add_RunCMake_test(target_compile_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
 add_RunCMake_test(target_include_directories)
 add_RunCMake_test(target_sources)
+add_RunCMake_test(CheckCompilerFlag)
 add_RunCMake_test(CheckSourceCompiles)
 add_RunCMake_test(CheckSourceRuns)
 add_RunCMake_test(CheckModules)

+ 5 - 0
Tests/RunCMake/CheckCompilerFlag/CMakeLists.txt

@@ -0,0 +1,5 @@
+cmake_minimum_required(VERSION 3.13)
+
+project(${RunCMake_TEST} LANGUAGES NONE)
+
+include(${RunCMake_TEST}.cmake)

+ 15 - 0
Tests/RunCMake/CheckCompilerFlag/CheckCCompilerFlag.cmake

@@ -0,0 +1,15 @@
+
+enable_language (C)
+include(CheckCompilerFlag)
+
+check_compiler_flag(C "-_this_is_not_a_flag_" SHOULD_FAIL)
+if(SHOULD_FAIL)
+  message(SEND_ERROR "invalid C compile flag didn't fail.")
+endif()
+
+if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang" AND NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+  check_compiler_flag(C "-x c" SHOULD_WORK)
+  if(NOT SHOULD_WORK)
+    message(SEND_ERROR "${CMAKE_C_COMPILER_ID} compiler flag '-x c' check failed")
+  endif()
+endif()

+ 15 - 0
Tests/RunCMake/CheckCompilerFlag/CheckCXXCompilerFlag.cmake

@@ -0,0 +1,15 @@
+
+enable_language (CXX)
+include(CheckCompilerFlag)
+
+check_compiler_flag(CXX "-_this_is_not_a_flag_" SHOULD_FAIL)
+if(SHOULD_FAIL)
+  message(SEND_ERROR "invalid CXX compile flag didn't fail.")
+endif()
+
+if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" AND NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+  check_compiler_flag(CXX "-x c++" SHOULD_WORK)
+  if(NOT SHOULD_WORK)
+    message(SEND_ERROR "${CMAKE_CXX_COMPILER_ID} compiler flag '-x c++' check failed")
+  endif()
+endif()

+ 14 - 0
Tests/RunCMake/CheckCompilerFlag/CheckFortranCompilerFlag.cmake

@@ -0,0 +1,14 @@
+enable_language (Fortran)
+include(CheckCompilerFlag)
+
+check_compiler_flag(Fortran "-_this_is_not_a_flag_" SHOULD_FAIL)
+if(SHOULD_FAIL)
+  message(SEND_ERROR "invalid Fortran compile flag didn't fail.")
+endif()
+
+if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
+  check_compiler_flag(Fortran "-Wall" SHOULD_WORK)
+  if(NOT SHOULD_WORK)
+    message(SEND_ERROR "${CMAKE_Fortran_COMPILER_ID} compiler flag '-Wall' check failed")
+  endif()
+endif()

+ 12 - 0
Tests/RunCMake/CheckCompilerFlag/CheckOBJCCompilerFlag.cmake

@@ -0,0 +1,12 @@
+enable_language (OBJC)
+include(CheckCompilerFlag)
+
+check_compiler_flag(OBJC "-_this_is_not_a_flag_" SHOULD_FAIL)
+if(SHOULD_FAIL)
+  message(SEND_ERROR "invalid OBJC compile flag didn't fail.")
+endif()
+
+check_compiler_flag(OBJC "-Wall" SHOULD_WORK)
+if(NOT SHOULD_WORK)
+  message(SEND_ERROR "${CMAKE_OBJC_COMPILER_ID} compiler flag '-Wall' check failed")
+endif()

+ 12 - 0
Tests/RunCMake/CheckCompilerFlag/CheckOBJCXXCompilerFlag.cmake

@@ -0,0 +1,12 @@
+enable_language (OBJCXX)
+include(CheckCompilerFlag)
+
+check_compiler_flag(OBJCXX "-_this_is_not_a_flag_" SHOULD_FAIL)
+if(SHOULD_FAIL)
+  message(SEND_ERROR "invalid OBJCXX compile flag didn't fail.")
+endif()
+
+check_compiler_flag(OBJCXX "-Wall" SHOULD_WORK)
+if(NOT SHOULD_WORK)
+  message(SEND_ERROR "${CMAKE_OBJCXX_COMPILER_ID} compiler flag '-Wall' check failed")
+endif()

+ 1 - 0
Tests/RunCMake/CheckCompilerFlag/NonExistentLanguage-result.txt

@@ -0,0 +1 @@
+1

+ 2 - 0
Tests/RunCMake/CheckCompilerFlag/NonExistentLanguage-stderr.txt

@@ -0,0 +1,2 @@
+CMake Error at .*CheckCompilerFlag\.cmake:[0-9]+ \(message\):
+  check_compiler_flag: FAKE_LANG: unknown language.

+ 3 - 0
Tests/RunCMake/CheckCompilerFlag/NonExistentLanguage.cmake

@@ -0,0 +1,3 @@
+
+include(CheckCompilerFlag)
+check_compiler_flag(FAKE_LANG "int main() {return 0;}" SHOULD_BUILD)

+ 1 - 0
Tests/RunCMake/CheckCompilerFlag/NotEnabledLanguage-result.txt

@@ -0,0 +1 @@
+1

+ 2 - 0
Tests/RunCMake/CheckCompilerFlag/NotEnabledLanguage-stderr.txt

@@ -0,0 +1,2 @@
+CMake Error at .*CheckCompilerFlag\.cmake:[0-9]+ \(message\):
+  check_compiler_flag: C: needs to be enabled before use.

+ 3 - 0
Tests/RunCMake/CheckCompilerFlag/NotEnabledLanguage.cmake

@@ -0,0 +1,3 @@
+
+include(CheckCompilerFlag)
+check_compiler_flag(C "int main() {return 0;}" SHOULD_BUILD)

+ 16 - 0
Tests/RunCMake/CheckCompilerFlag/RunCMakeTest.cmake

@@ -0,0 +1,16 @@
+include(RunCMake)
+
+run_cmake(NotEnabledLanguage)
+run_cmake(NonExistentLanguage)
+
+run_cmake(CheckCCompilerFlag)
+run_cmake(CheckCXXCompilerFlag)
+
+if (APPLE)
+  run_cmake(CheckOBJCCompilerFlag)
+  run_cmake(CheckOBJCXXCompilerFlag)
+endif()
+
+if (CMAKE_Fortran_COMPILER_ID)
+  run_cmake(CheckFortranCompilerFlag)
+endif()