summaryrefslogtreecommitdiffstats
path: root/Tests/Module/CheckCXXCompilerFlag/CMakeLists.txt
blob: fcffa8778f12ce6b600194dffe7756a09d03c29c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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_CXX_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)
  if(NOT WIN32)
#     test_pass(HAS_HIDDEN_VISIBILITY "GCC should support hidden visibility, but does not.")
  endif()
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"
)