]> code.bitgloo.com Git - clyne/entityx.git/commitdiff
fix C++11 feature checking for Microsoft Visual C++ Build Tools 2015
authorJarrett Chisholm <jarrettchisholm@gmail.com>
Mon, 16 Jan 2017 03:45:02 +0000 (22:45 -0500)
committerJarrett Chisholm <jarrettchisholm@gmail.com>
Mon, 16 Jan 2017 03:45:02 +0000 (22:45 -0500)
CMakeLists.txt
CheckCXX11Features.cmake [deleted file]

index b2232342cc1ce46bff3ebe85333aa545a1c99218..cd8ed6017b959b36e2d7e044a07ec5094b46cd32 100644 (file)
@@ -54,9 +54,6 @@ if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
 endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
 set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
 
-# C++11 feature checks
-include(CheckCXX11Features.cmake)
-
 set(OLD_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 if ((MAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
@@ -115,16 +112,6 @@ if (NOT CMAKE_BUILD_TYPE)
     set(CMAKE_BUILD_TYPE "Release")
 endif()
 
-message(STATUS "-- Checking C++ features")
-require(HAS_CXX11_AUTO "C++11 auto support")
-require(HAS_CXX11_NULLPTR "C++11 nullptr support")
-require(HAS_CXX11_RVALUE_REFERENCES "C++11 rvalue reference support")
-#require(HAS_CXX11_CSTDINT_H "C++11 stdint support")
-require(HAS_CXX11_VARIADIC_TEMPLATES "C++11 variadic templates")
-require(HAS_CXX11_RVALUE_REFERENCES "C++11 rvalue references")
-require(HAS_CXX11_LONG_LONG "C++11 long long")
-require(HAS_CXX11_LAMBDA "C++11 lambdas")
-
 message(STATUS "-- Checking misc features")
 require(HAVE_STDINT_H "stdint.h")
 
@@ -135,16 +122,16 @@ set(sources entityx/System.cc entityx/Event.cc entityx/Entity.cc entityx/help/Ti
 
 if (ENTITYX_BUILD_SHARED)
     message(STATUS "-- Building shared libraries (-DENTITYX_BUILD_SHARED=0 to only build static libraries)")
-    add_library(entityx_shared SHARED ${sources})
+    add_library(entityx SHARED ${sources})
 
-    set_target_properties(entityx_shared PROPERTIES
+    set_target_properties(entityx PROPERTIES
         OUTPUT_NAME entityx
         DEBUG_POSTFIX -d
         VERSION ${ENTITYX_VERSION}
         SOVERSION ${ENTITYX_MAJOR_VERSION}
         FOLDER entityx)
-    set(install_libs entityx_shared)
-    set_property(TARGET entityx_shared APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
+    set(install_libs entityx)
+    set_property(TARGET entityx APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
           $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
 else()
     add_library(entityx STATIC ${sources})
@@ -154,6 +141,19 @@ else()
           $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
 endif (ENTITYX_BUILD_SHARED)
 
+# Make sure C++11 features are available
+target_compile_features(entityx PUBLIC cxx_auto_type)
+target_compile_features(entityx PUBLIC cxx_nullptr)
+target_compile_features(entityx PUBLIC cxx_static_assert)
+target_compile_features(entityx PUBLIC cxx_decltype)
+target_compile_features(entityx PUBLIC cxx_constexpr)
+target_compile_features(entityx PUBLIC cxx_sizeof_member)
+target_compile_features(entityx PUBLIC cxx_variadic_templates)
+target_compile_features(entityx PUBLIC cxx_rvalue_references)
+target_compile_features(entityx PUBLIC cxx_long_long_type)
+target_compile_features(entityx PUBLIC cxx_lambdas)
+target_compile_features(entityx PUBLIC cxx_func_identifier)
+
 if (ENTITYX_BUILD_TESTING)
     enable_testing()
     create_test(pool_test entityx/help/Pool_test.cc ${install_libs})
diff --git a/CheckCXX11Features.cmake b/CheckCXX11Features.cmake
deleted file mode 100644 (file)
index 96e2b23..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# Checks for C++11 features
-#  CXX11_FEATURE_LIST - a list containing all supported features
-#  HAS_CXX11_AUTO               - auto keyword
-#  HAS_CXX11_NULLPTR            - nullptr
-#  HAS_CXX11_LAMBDA             - lambdas
-#  HAS_CXX11_STATIC_ASSERT      - static_assert()
-#  HAS_CXX11_RVALUE_REFERENCES  - rvalue references
-#  HAS_CXX11_DECLTYPE           - decltype keyword
-#  HAS_CXX11_CSTDINT_H          - cstdint header
-#  HAS_CXX11_LONG_LONG          - long long signed & unsigned types
-#  HAS_CXX11_VARIADIC_TEMPLATES - variadic templates
-#  HAS_CXX11_CONSTEXPR          - constexpr keyword
-#  HAS_CXX11_SIZEOF_MEMBER      - sizeof() non-static members
-#  HAS_CXX11_FUNC               - __func__ preprocessor constant
-#
-# Original script by Rolf Eike Beer
-# Modifications by Andreas Weis
-#
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3)
-
-SET(CHECK_CXX11_OLD_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
-IF(CMAKE_COMPILER_IS_GNUCXX)
-       SET(CMAKE_CXX_FLAGS "-std=c++0x")
-ELSE("${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}" MATCHES ".*clang.*")
-       SET(CMAKE_CXX_FLAGS "-std=c++11")
-ENDIF()
-
-MACRO(CXX11_CHECK_FEATURE FEATURE_NAME FEATURE_NUMBER RESULT_VAR)
-       IF (NOT DEFINED ${RESULT_VAR})
-               SET(_bindir "${CMAKE_CURRENT_BINARY_DIR}/cxx11/cxx11_${FEATURE_NAME}")
-
-               IF (${FEATURE_NUMBER})
-                       SET(_SRCFILE_BASE ${CMAKE_CURRENT_LIST_DIR}/cxx11/c++11-test-${FEATURE_NAME}-N${FEATURE_NUMBER})
-                       SET(_LOG_NAME "\"${FEATURE_NAME}\" (N${FEATURE_NUMBER})")
-               ELSE (${FEATURE_NUMBER})
-                       SET(_SRCFILE_BASE ${CMAKE_CURRENT_LIST_DIR}/cxx11/c++11-test-${FEATURE_NAME})
-                       SET(_LOG_NAME "\"${FEATURE_NAME}\"")
-               ENDIF (${FEATURE_NUMBER})
-               MESSAGE(STATUS "Checking C++11 support for ${_LOG_NAME}")
-
-               SET(_SRCFILE "${_SRCFILE_BASE}.cpp")
-               SET(_SRCFILE_FAIL "${_SRCFILE_BASE}_fail.cpp")
-               SET(_SRCFILE_FAIL_COMPILE "${_SRCFILE_BASE}_fail_compile.cpp")
-
-               IF (CROSS_COMPILING)
-                       try_compile(${RESULT_VAR} "${_bindir}" "${_SRCFILE}")
-                       IF (${RESULT_VAR} AND EXISTS ${_SRCFILE_FAIL})
-                               try_compile(${RESULT_VAR} "${_bindir}_fail" "${_SRCFILE_FAIL}")
-                       ENDIF (${RESULT_VAR} AND EXISTS ${_SRCFILE_FAIL})
-               ELSE (CROSS_COMPILING)
-                       try_run(_RUN_RESULT_VAR _COMPILE_RESULT_VAR
-                                       "${_bindir}" "${_SRCFILE}")
-                       IF (_COMPILE_RESULT_VAR AND NOT _RUN_RESULT_VAR)
-                               SET(${RESULT_VAR} TRUE)
-                       ELSE (_COMPILE_RESULT_VAR AND NOT _RUN_RESULT_VAR)
-                               SET(${RESULT_VAR} FALSE)
-                       ENDIF (_COMPILE_RESULT_VAR AND NOT _RUN_RESULT_VAR)
-                       IF (${RESULT_VAR} AND EXISTS ${_SRCFILE_FAIL})
-                               try_run(_RUN_RESULT_VAR _COMPILE_RESULT_VAR
-                                               "${_bindir}_fail" "${_SRCFILE_FAIL}")
-                               IF (_COMPILE_RESULT_VAR AND _RUN_RESULT_VAR)
-                                       SET(${RESULT_VAR} TRUE)
-                               ELSE (_COMPILE_RESULT_VAR AND _RUN_RESULT_VAR)
-                                       SET(${RESULT_VAR} FALSE)
-                               ENDIF (_COMPILE_RESULT_VAR AND _RUN_RESULT_VAR)
-                       ENDIF (${RESULT_VAR} AND EXISTS ${_SRCFILE_FAIL})
-               ENDIF (CROSS_COMPILING)
-               IF (${RESULT_VAR} AND EXISTS ${_SRCFILE_FAIL_COMPILE})
-                       try_compile(_TMP_RESULT "${_bindir}_fail_compile" "${_SRCFILE_FAIL_COMPILE}")
-                       IF (_TMP_RESULT)
-                               SET(${RESULT_VAR} FALSE)
-                       ELSE (_TMP_RESULT)
-                               SET(${RESULT_VAR} TRUE)
-                       ENDIF (_TMP_RESULT)
-               ENDIF (${RESULT_VAR} AND EXISTS ${_SRCFILE_FAIL_COMPILE})
-
-               IF (${RESULT_VAR})
-                       MESSAGE(STATUS "Checking C++11 support for ${_LOG_NAME} -- works")
-                       LIST(APPEND CXX11_FEATURE_LIST ${RESULT_VAR})
-               ELSE (${RESULT_VAR})
-                       MESSAGE(STATUS "Checking C++11 support for ${_LOG_NAME} -- not supported")
-               ENDIF (${RESULT_VAR})
-               SET(${RESULT_VAR} ${${RESULT_VAR}} CACHE INTERNAL "C++11 support for ${_LOG_NAME}")
-       ENDIF (NOT DEFINED ${RESULT_VAR})
-ENDMACRO(CXX11_CHECK_FEATURE)
-
-CXX11_CHECK_FEATURE("auto"               2546 HAS_CXX11_AUTO)
-CXX11_CHECK_FEATURE("nullptr"            2431 HAS_CXX11_NULLPTR)
-CXX11_CHECK_FEATURE("lambda"             2927 HAS_CXX11_LAMBDA)
-CXX11_CHECK_FEATURE("static_assert"      1720 HAS_CXX11_STATIC_ASSERT)
-CXX11_CHECK_FEATURE("rvalue_references"  2118 HAS_CXX11_RVALUE_REFERENCES)
-CXX11_CHECK_FEATURE("decltype"           2343 HAS_CXX11_DECLTYPE)
-CXX11_CHECK_FEATURE("cstdint"            ""   HAS_CXX11_CSTDINT_H)
-CXX11_CHECK_FEATURE("long_long"          1811 HAS_CXX11_LONG_LONG)
-CXX11_CHECK_FEATURE("variadic_templates" 2555 HAS_CXX11_VARIADIC_TEMPLATES)
-CXX11_CHECK_FEATURE("constexpr"          2235 HAS_CXX11_CONSTEXPR)
-CXX11_CHECK_FEATURE("sizeof_member"      2253 HAS_CXX11_SIZEOF_MEMBER)
-CXX11_CHECK_FEATURE("__func__"           2340 HAS_CXX11_FUNC)
-
-SET(CXX11_FEATURE_LIST ${CXX11_FEATURE_LIST} CACHE STRING "C++11 feature support list")
-MARK_AS_ADVANCED(FORCE CXX11_FEATURE_LIST)
-
-SET(CMAKE_CXX_FLAGS ${CHECK_CXX11_OLD_CMAKE_CXX_FLAGS})
-UNSET(CHECK_CXX11_OLD_CMAKE_CXX_FLAGS)
-