diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 81 |
1 files changed, 70 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e925136..74f6c62f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ INCLUDE(CheckFunctionExists) INCLUDE(CheckSymbolExists) INCLUDE(CheckTypeSize) INCLUDE(CheckLibraryExists) +INCLUDE(CheckCXXSourceCompiles) # CMake configuration @@ -796,6 +797,57 @@ ENDIF() ############################################################################## +# Language features + +# C++11 +INCLUDE(cmake/cmake-cxx11/Modules/CheckCXX11Features.cmake) + +# Smart pointers +CHECK_CXX_SOURCE_COMPILES( + " + #include <memory> + struct A { int foo; }; + int main() { + std::shared_ptr <A> a = std::make_shared <A>(a); + return 0; + } + " + VMIME_HAS_CXX11_SHARED_PTR +) + +IF(CXX11_COMPILER_FLAGS AND VMIME_HAS_CXX11_SHARED_PTR) + + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_COMPILER_FLAGS}") + + IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + ENDIF() + + MESSAGE(STATUS "Checking support for shared_ptr<>: built-in (C++11)") + + SET(VMIME_SHARED_PTR_USE_CXX ON) + SET(VMIME_SHARED_PTR_USE_BOOST OFF) + +ELSE() + + # Depends on Boost library if C++11 is not supported + FIND_PACKAGE(Boost) + + IF(Boost_FOUND) + INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) + ELSE() + MESSAGE(FATAL_ERROR "Boost library is required for shared_ptr<>, unless you compile using C++11") + ENDIF() + + MESSAGE(STATUS "Checking support for shared_ptr<>: boost library") + + SET(VMIME_SHARED_PTR_USE_CXX OFF) + SET(VMIME_SHARED_PTR_USE_BOOST ON) + +ENDIF() + + +############################################################################## # Platform SET(VMIME_PLATFORM_IS_POSIX OFF) @@ -941,20 +993,27 @@ ENDIF() ############################################################################## # Documentation -FIND_PACKAGE(Doxygen) +OPTION( + VMIME_BUILD_DOCUMENTATION + "Build documentation" + ON +) -IF(DOXYGEN_FOUND) - CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile @ONLY) +IF(VMIME_BUILD_DOCUMENTATION) + FIND_PACKAGE(Doxygen) - # Make a target so that documentation can be generated by running "make doc" - ADD_CUSTOM_TARGET( - doc - ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating API documentation with Doxygen" VERBATIM - ) -ENDIF(DOXYGEN_FOUND) + IF(DOXYGEN_FOUND) + CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile @ONLY) + # Make a target so that documentation can be generated by running "make doc" + ADD_CUSTOM_TARGET( + doc + ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating API documentation with Doxygen" VERBATIM + ) + ENDIF(DOXYGEN_FOUND) +ENDIF(VMIME_BUILD_DOCUMENTATION) ############################################################################## # Sanity checks |