mirror of
https://github.com/fmtlib/fmt.git
synced 2025-07-31 03:07:36 +02:00
outlined the compiler feature tests to improve script readability
This commit is contained in:
@ -23,39 +23,12 @@ message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
check_cxx_compiler_flag(-std=c++11 HAVE_STD_CPP11_FLAG)
|
|
||||||
if (HAVE_STD_CPP11_FLAG)
|
|
||||||
# Check if including cmath works with -std=c++11 and -O3.
|
|
||||||
# It may not in MinGW due to bug http://ehc.ac/p/mingw/bugs/2250/.
|
|
||||||
set(CMAKE_REQUIRED_FLAGS "-std=c++11 -O3")
|
|
||||||
check_cxx_source_compiles("
|
|
||||||
#include <cmath>
|
|
||||||
int main() {}" FMT_CPP11_CMATH)
|
|
||||||
# Check if including <unistd.h> works with -std=c++11.
|
|
||||||
# It may not in MinGW due to bug http://sourceforge.net/p/mingw/bugs/2024/.
|
|
||||||
check_cxx_source_compiles("
|
|
||||||
#include <unistd.h>
|
|
||||||
int main() {}" FMT_CPP11_UNISTD_H)
|
|
||||||
if (FMT_CPP11_CMATH AND FMT_CPP11_UNISTD_H)
|
|
||||||
set(CPP11_FLAG -std=c++11)
|
|
||||||
else ()
|
|
||||||
check_cxx_compiler_flag(-std=gnu++11 HAVE_STD_GNUPP11_FLAG)
|
|
||||||
if (HAVE_STD_CPP11_FLAG)
|
|
||||||
set(CPP11_FLAG -std=gnu++11)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
set(CMAKE_REQUIRED_FLAGS )
|
|
||||||
else ()
|
|
||||||
check_cxx_compiler_flag(-std=c++0x HAVE_STD_CPP0X_FLAG)
|
|
||||||
if (HAVE_STD_CPP0X_FLAG)
|
|
||||||
set(CPP11_FLAG -std=c++0x)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/support/cmake")
|
"${CMAKE_CURRENT_SOURCE_DIR}/support/cmake")
|
||||||
|
|
||||||
|
include(testCxx11)
|
||||||
|
|
||||||
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
# If Microsoft SDK is installed create script run-msbuild.bat that
|
# If Microsoft SDK is installed create script run-msbuild.bat that
|
||||||
# calls SetEnv.cmd to to set up build environment and runs msbuild.
|
# calls SetEnv.cmd to to set up build environment and runs msbuild.
|
||||||
|
58
support/cmake/testCxx11.cmake
Normal file
58
support/cmake/testCxx11.cmake
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
include(CheckCXXCompilerFlag)
|
||||||
|
|
||||||
|
check_cxx_compiler_flag(-std=c++11 HAVE_STD_CPP11_FLAG)
|
||||||
|
if (HAVE_STD_CPP11_FLAG)
|
||||||
|
# Check if including cmath works with -std=c++11 and -O3.
|
||||||
|
# It may not in MinGW due to bug http://ehc.ac/p/mingw/bugs/2250/.
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "-std=c++11 -O3")
|
||||||
|
check_cxx_source_compiles("
|
||||||
|
#include <cmath>
|
||||||
|
int main() {}" FMT_CPP11_CMATH)
|
||||||
|
# Check if including <unistd.h> works with -std=c++11.
|
||||||
|
# It may not in MinGW due to bug http://sourceforge.net/p/mingw/bugs/2024/.
|
||||||
|
check_cxx_source_compiles("
|
||||||
|
#include <unistd.h>
|
||||||
|
int main() {}" FMT_CPP11_UNISTD_H)
|
||||||
|
if (FMT_CPP11_CMATH AND FMT_CPP11_UNISTD_H)
|
||||||
|
set(CPP11_FLAG -std=c++11)
|
||||||
|
else ()
|
||||||
|
check_cxx_compiler_flag(-std=gnu++11 HAVE_STD_GNUPP11_FLAG)
|
||||||
|
if (HAVE_STD_CPP11_FLAG)
|
||||||
|
set(CPP11_FLAG -std=gnu++11)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
set(CMAKE_REQUIRED_FLAGS )
|
||||||
|
else ()
|
||||||
|
check_cxx_compiler_flag(-std=c++0x HAVE_STD_CPP0X_FLAG)
|
||||||
|
if (HAVE_STD_CPP0X_FLAG)
|
||||||
|
set(CPP11_FLAG -std=c++0x)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${CPP11_FLAG})
|
||||||
|
# Check if variadic templates are working and not affected by GCC bug 39653:
|
||||||
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39653
|
||||||
|
check_cxx_source_compiles("
|
||||||
|
template <class T, class ...Types>
|
||||||
|
struct S { typedef typename S<Types...>::type type; };
|
||||||
|
int main() {}" SUPPORTS_VARIADIC_TEMPLATES)
|
||||||
|
|
||||||
|
# Check if initializer lists are supported.
|
||||||
|
check_cxx_source_compiles("
|
||||||
|
#include <initializer_list>
|
||||||
|
int main() {}" SUPPORTS_INITIALIZER_LIST)
|
||||||
|
|
||||||
|
# Check if enum bases are available
|
||||||
|
check_cxx_source_compiles("
|
||||||
|
enum C : char {A};
|
||||||
|
int main() {}"
|
||||||
|
SUPPORTS_ENUM_BASE)
|
||||||
|
|
||||||
|
# Check if type traits are available
|
||||||
|
check_cxx_source_compiles("
|
||||||
|
#include <type_traits>
|
||||||
|
class C { void operator=(const C&); };
|
||||||
|
int main() { static_assert(!std::is_copy_assignable<C>::value, \"\"); }"
|
||||||
|
SUPPORTS_TYPE_TRAITS)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS )
|
@ -28,18 +28,8 @@ endif ()
|
|||||||
|
|
||||||
# Check if variadic templates are working and not affected by GCC bug 39653:
|
# Check if variadic templates are working and not affected by GCC bug 39653:
|
||||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39653
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39653
|
||||||
check_cxx_source_compiles("
|
if (NOT SUPPORTS_VARIADIC_TEMPLATES OR NOT SUPPORTS_INITIALIZER_LIST)
|
||||||
template <class T, class ...Types>
|
target_compile_definitions(gmock PUBLIC GTEST_LANG_CXX11=0)
|
||||||
struct S { typedef typename S<Types...>::type type; };
|
|
||||||
int main() {}" FMT_VARIADIC_TEMPLATES)
|
|
||||||
|
|
||||||
# Check if initializer lists are supported.
|
|
||||||
check_cxx_source_compiles("
|
|
||||||
#include <initializer_list>
|
|
||||||
int main() {}" FMT_INITIALIZER_LIST)
|
|
||||||
|
|
||||||
if (NOT FMT_VARIADIC_TEMPLATES OR NOT FMT_INITIALIZER_LIST)
|
|
||||||
add_definitions(-DGTEST_LANG_CXX11=0)
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Workaround a bug in implementation of variadic templates in MSVC11.
|
# Workaround a bug in implementation of variadic templates in MSVC11.
|
||||||
@ -91,11 +81,7 @@ if (CPP11_FLAG)
|
|||||||
set_target_properties(util-test PROPERTIES COMPILE_FLAGS ${CPP11_FLAG})
|
set_target_properties(util-test PROPERTIES COMPILE_FLAGS ${CPP11_FLAG})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
check_cxx_source_compiles("
|
if (SUPPORTS_ENUM_BASE)
|
||||||
enum C : char {A};
|
|
||||||
int main() {}"
|
|
||||||
HAVE_ENUM_BASE)
|
|
||||||
if (HAVE_ENUM_BASE)
|
|
||||||
set_target_properties(util-test
|
set_target_properties(util-test
|
||||||
PROPERTIES COMPILE_DEFINITIONS "FMT_USE_ENUM_BASE=1")
|
PROPERTIES COMPILE_DEFINITIONS "FMT_USE_ENUM_BASE=1")
|
||||||
endif ()
|
endif ()
|
||||||
@ -104,12 +90,7 @@ foreach (src ${FMT_SOURCES})
|
|||||||
set(FMT_TEST_SOURCES ${FMT_TEST_SOURCES} ../${src})
|
set(FMT_TEST_SOURCES ${FMT_TEST_SOURCES} ../${src})
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
check_cxx_source_compiles("
|
if (SUPPORTS_TYPE_TRAITS)
|
||||||
#include <type_traits>
|
|
||||||
class C { void operator=(const C&); };
|
|
||||||
int main() { static_assert(!std::is_copy_assignable<C>::value, \"\"); }"
|
|
||||||
HAVE_TYPE_TRAITS)
|
|
||||||
if (HAVE_TYPE_TRAITS)
|
|
||||||
foreach (target format-test util-test)
|
foreach (target format-test util-test)
|
||||||
set_target_properties(${target}
|
set_target_properties(${target}
|
||||||
PROPERTIES COMPILE_DEFINITIONS "FMT_USE_TYPE_TRAITS=1")
|
PROPERTIES COMPILE_DEFINITIONS "FMT_USE_TYPE_TRAITS=1")
|
||||||
|
Reference in New Issue
Block a user