aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlec Thomas <alec@swapoff.org>2017-02-07 17:59:53 -0800
committerGitHub <noreply@github.com>2017-02-07 17:59:53 -0800
commit87ca0003248bdf5a5b8e8e8f957e0ff3efbf5aae (patch)
treef4527c9a0f658593a88deb4f29603a9c9fb17cce
parent5d3e2d44a60d1a8dac26df9422a1bb965a14fb4c (diff)
parentef27fc380e6a2f6c2c159762e587d7c44e28a5d9 (diff)
Merge pull request #174 from jarrettchisholm/master
Fix C++11 feature checking for Microsoft Visual C++ Build Tools 2015
-rw-r--r--.travis.yml2
-rw-r--r--CMakeLists.txt39
-rw-r--r--CheckCXX11Features.cmake105
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)
-