aboutsummaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt81
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