1message ("-- Configuring C++11")
2message ("-- System: ${CMAKE_SYSTEM_NAME}")
3
4include (CheckCXXCompilerFlag)
5
6# NOTE: Phase out -std=gnu++0x and --std=c++0x as soon as realistically possible.
7CHECK_CXX_COMPILER_FLAG("-std=c++11"   _HAS_CXX11)
8CHECK_CXX_COMPILER_FLAG("-std=c++0x"   _HAS_CXX0X)
9CHECK_CXX_COMPILER_FLAG("-std=gnu++0x" _HAS_GNU0X)
10
11if (_HAS_CXX11)
12  set (_CXX11_FLAGS "-std=c++11")
13elseif (_HAS_CXX0X)
14  message (WARNING "Enabling -std=c++0x draft compile flag. Your compiler does not support the standard '-std=c++11' option.  Consider upgrading.")
15  set (_CXX11_FLAGS "-std=c++0x")
16elseif (_HAS_GNU0X)
17  message (WARNING "Enabling -std=gnu++0x draft compile flag. Your compiler does not support the standard '-std=c++11' option. Consider upgrading.")
18  set (_CXX11_FLAGS "-std=gnu++0x")
19else (_HAS_CXX11)
20 message (FATAL_ERROR "C++11 support missing. Try upgrading your C++ compiler. If you have a good reason for using an outdated compiler, please let us know at support@gothenburgbitfactory.org.")
21endif (_HAS_CXX11)
22
23if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
24  set (LINUX true)
25elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
26  set (DARWIN true)
27  set (_CXX11_FLAGS "${_CXX11_FLAGS} -stdlib=libc++")
28elseif (${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD")
29  set (KFREEBSD true)
30elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
31  set (FREEBSD true)
32elseif (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
33  set (OPENBSD true)
34elseif (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
35  set (NETBSD true)
36elseif (${CMAKE_SYSTEM_NAME} MATCHES "DragonFly")
37  set (DRAGONFLY true)
38elseif (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
39  set (SOLARIS true)
40elseif (${CMAKE_SYSTEM_NAME} STREQUAL "GNU")
41  set (GNUHURD true)
42elseif (${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN")
43  set (CYGWIN true)
44  # NOTE: Not setting -std=gnu++0x leads to compile errors even with
45  #       GCC 4.8.3, and debugging those leads to insanity. Adding this
46  #       workaround instead of fixing Cygwin.
47  set (_CXX11_FLAGS "-std=gnu++0x")
48else (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
49  set (UNKNOWN true)
50endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
51
52set (CMAKE_CXX_FLAGS "${_CXX11_FLAGS} ${CMAKE_CXX_FLAGS}")
53set (CMAKE_CXX_FLAGS "-Wall -Wextra -Wsign-compare -Wreturn-type ${CMAKE_CXX_FLAGS}")
54