Sfoglia il codice sorgente

Start testing expected values for compiler flags.

Should help catch unhandled flag warnings so far not handled by
check_cxx_compiler_flag FAIL_REGEXen.
Stephen Kelly 14 anni fa
parent
commit
afae7a95a0
2 ha cambiato i file con 65 aggiunte e 0 eliminazioni
  1. 2 0
      Tests/CMakeLists.txt
  2. 63 0
      Tests/Module/CheckCXXCompilerFlag/CMakeLists.txt

+ 2 - 0
Tests/CMakeLists.txt

@@ -223,6 +223,8 @@ IF(BUILD_TESTING)
 
   ADD_TEST_MACRO(Module.GenerateExportHeader GenerateExportHeader)
 
+  ADD_TEST_MACRO(Module.CheckCXXCompilerFlag CheckCXXCompilerFlag)
+
   ADD_TEST(LinkFlags-prepare
     ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE}
     --build-and-test

+ 63 - 0
Tests/Module/CheckCXXCompilerFlag/CMakeLists.txt

@@ -0,0 +1,63 @@
+cmake_minimum_required(VERSION 2.8)
+project(CheckCXXCompilerFlag)
+
+macro(TEST_FAIL value msg)
+  if (${value})
+    message (SEND_ERROR "Test fail:" ${msg} ${Out} )
+  endif ()
+endmacro()
+
+macro(TEST_PASS value msg)
+  if (NOT ${value})
+    message (SEND_ERROR "Test fail:" ${msg} ${Out} )
+  endif ()
+endmacro()
+
+if(CMAKE_COMPILER_IS_GNUCXX)
+  exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE     _gcc_version_info)
+  string (REGEX MATCH "[345]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}")
+  # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the
+  # patch level, handle this here:
+  if(NOT _gcc_version)
+    string (REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0" _gcc_version "${_gcc_version_info}")
+  endif()
+endif()
+
+if(CMAKE_COMPILER_ID MATCHES Clang)
+  exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE     _clang_version_info)
+  string (REGEX MATCH "version [345]\\.[0-9]" _clang_version "${_clang_version_info}")
+endif()
+
+message("Platform:\n  WIN32: ${WIN32}\n  UNIX: ${UNIX}\n  APPLE: ${APPLE}\n  MINGW: ${MINGW}\n  CYGWIN: ${CYGWIN}\n"
+  "  MSVC: ${MSVC}\n  MSVC60: ${MSVC60}\n  MSVC70: ${MSVC70}\n  MSVC71: ${MSVC71}\n  MSVC80: ${MSVC80}\n  MSVC90: ${MSVC90}\n  MSVC10: ${MSVC10}\n"
+  "  GCC: ${_gcc_version}\n"
+  "  Clang: ${_clang_version}\n"
+)
+
+include(CheckCXXCompilerFlag)
+
+check_cxx_compiler_flag(-fvisibility=hidden HAS_HIDDEN_VISIBILITY)
+
+message("HAS_HIDDEN_VISIBILITY: ${HAS_HIDDEN_VISIBILITY}\n\nCOMPILE OUTPUT:\n${OUTPUT}")
+
+if(CMAKE_COMPILER_IS_GNUCXX)
+  test_pass(HAS_HIDDEN_VISIBILITY "GCC should support hidden visibility, but does not.")
+else()
+  message("Unhandled Platform")
+endif()
+
+#
+# This is a no-op executable... If this test is going to fail, it fails during
+# the configure step while cmake is configuring this CMakeLists.txt file...
+#
+
+file(WRITE
+  "${CMAKE_CURRENT_BINARY_DIR}/main.cxx"
+  "int main() { return 0; }
+"
+)
+
+add_executable(
+  CheckCXXCompilerFlag
+  "${CMAKE_CURRENT_BINARY_DIR}/main.cxx"
+)