diff options
author | Alec Thomas <alec@swapoff.org> | 2017-02-07 17:59:53 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-07 17:59:53 -0800 |
commit | 87ca0003248bdf5a5b8e8e8f957e0ff3efbf5aae (patch) | |
tree | f4527c9a0f658593a88deb4f29603a9c9fb17cce | |
parent | 5d3e2d44a60d1a8dac26df9422a1bb965a14fb4c (diff) | |
parent | ef27fc380e6a2f6c2c159762e587d7c44e28a5d9 (diff) |
Merge pull request #174 from jarrettchisholm/master
Fix C++11 feature checking for Microsoft Visual C++ Build Tools 2015
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | CMakeLists.txt | 39 | ||||
-rw-r--r-- | CheckCXX11Features.cmake | 105 |
3 files changed, 22 insertions, 124 deletions
diff --git a/.travis.yml b/.travis.yml index 8f6fb3c..c06dba4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,11 +5,13 @@ compiler: before_install: - sudo apt-add-repository -y ppa:jkeiren/ppa - if test $CC = gcc; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi + - sudo add-apt-repository -y ppa:george-edison55/precise-backports - sudo apt-get update -qq - if test $CC = gcc; then sudo apt-get install --yes --force-yes gcc-4.7 g++-4.7; fi - if test $CC = gcc; then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 20; fi - if test $CC = gcc; then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 20; fi - if test $CC = gcc; then sudo update-alternatives --config gcc; fi - if test $CC = gcc; then sudo update-alternatives --config g++; fi + - sudo apt-get install --yes --force-yes cmake cmake-data script: ./scripts/travis.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index b223234..8a2b5d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,9 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.1) set(ENTITYX_MAJOR_VERSION 1) set(ENTITYX_MINOR_VERSION 1) set(ENTITYX_PATCH_VERSION 2) set(ENTITYX_VERSION ${ENTITYX_MAJOR_VERSION}.${ENTITYX_MINOR_VERSION}.${ENTITYX_PATCH_VERSION}) +set(CMAKE_CXX_EXTENSIONS OFF) project(EntityX) @@ -28,7 +29,7 @@ include(CheckCXXSourceCompiles) # Default compiler args if (CMAKE_CXX_COMPILER_ID MATCHES "(GNU|.*Clang)") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Werror -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=sign-compare -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Werror -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=sign-compare") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") set(CMAKE_CXX_FLAGS_MINSIZEREL "-g -Os -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-g -O2 -DNDEBUG") @@ -54,9 +55,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 +113,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 +123,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 +142,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 index 96e2b23..0000000 --- a/CheckCXX11Features.cmake +++ /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) - |