ferencd@0: # ferencd@0: # CMake configuration file for VMime ferencd@0: # ferencd@0: # Usage: ferencd@0: # ferencd@0: # . 'cmake -LH' to list build settings variable ferencd@0: # ferencd@0: # . 'cmake -G ' to generate makefiles for a build system ferencd@0: # eg. cmake -G "Unix Makefiles" ferencd@0: # ferencd@0: # For more information, please visit: ferencd@0: # http://www.cmake.org ferencd@0: # ferencd@0: ferencd@0: CMAKE_MINIMUM_REQUIRED(VERSION 2.8.6 FATAL_ERROR) ferencd@0: ferencd@0: INCLUDE(cmake/Utils.cmake) ferencd@0: ferencd@0: INCLUDE(CheckIncludeFiles) ferencd@0: INCLUDE(CheckIncludeFileCXX) ferencd@0: INCLUDE(CheckFunctionExists) ferencd@0: INCLUDE(CheckSymbolExists) ferencd@0: INCLUDE(CheckTypeSize) ferencd@0: INCLUDE(CheckLibraryExists) ferencd@0: INCLUDE(CheckCXXSourceCompiles) ferencd@0: ferencd@0: ferencd@0: # CMake configuration ferencd@0: SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY build/bin) ferencd@0: SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY build/lib) ferencd@0: SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY build/lib) ferencd@0: ferencd@0: SET(CMAKE_VERBOSE_MAKEFILE ON) ferencd@0: ferencd@0: ferencd@0: # Project ferencd@0: PROJECT(vmime) ferencd@0: ferencd@0: # Package version number ferencd@0: SET(VMIME_VERSION_MAJOR 0) ferencd@0: SET(VMIME_VERSION_MINOR 9) ferencd@0: SET(VMIME_VERSION_MICRO 2) ferencd@0: ferencd@0: # API version number (libtool) ferencd@0: # ferencd@0: # Increment this number only immediately before a public release. ferencd@0: # This is independent from package version number. ferencd@0: # ferencd@0: # See: http://www.gnu.org/software/libtool/manual.html#Libtool-versioning ferencd@0: # ferencd@0: # . Implementation changed (eg. bug/security fix): REVISION++ ferencd@0: # . Interfaces added/removed/changed: CURRENT++, REVISION=0 ferencd@0: # . Interfaces added (upward-compatible changes): AGE++ ferencd@0: # . Interfaces removed: AGE=0 ferencd@0: SET(VMIME_API_VERSION_CURRENT 0) ferencd@0: SET(VMIME_API_VERSION_REVISION 0) ferencd@0: SET(VMIME_API_VERSION_AGE 0) ferencd@0: ferencd@0: ferencd@0: SET(VMIME_VERSION ${VMIME_VERSION_MAJOR}.${VMIME_VERSION_MINOR}.${VMIME_VERSION_MICRO}) ferencd@0: SET(VMIME_API_VERSION ${VMIME_API_VERSION_CURRENT}.${VMIME_API_VERSION_REVISION}.${VMIME_API_VERSION_AGE}) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # VMime Library ferencd@0: ferencd@0: # Set base name ferencd@0: SET(VMIME_LIBRARY_NAME vmime) ferencd@0: ferencd@0: # Source files ferencd@0: FILE( ferencd@0: GLOB_RECURSE ferencd@0: VMIME_LIBRARY_SRC_FILES ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/src/vmime/*.cpp ferencd@0: ) ferencd@0: ferencd@0: FILE( ferencd@0: GLOB_RECURSE ferencd@0: VMIME_LIBRARY_INCLUDE_FILES ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/src/vmime/*.hpp ferencd@0: ) ferencd@0: ferencd@0: LIST(APPEND VMIME_LIBRARY_GENERATED_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/vmime/config.hpp") ferencd@0: ferencd@0: INCLUDE_DIRECTORIES( ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR} # for "contrib/" ferencd@0: ${CMAKE_CURRENT_SOURCE_DIR}/src # for "vmime/ ferencd@0: ) ferencd@0: ferencd@0: INCLUDE(GenerateExportHeader) ferencd@0: ADD_COMPILER_EXPORT_FLAGS() ferencd@0: ferencd@0: # Shared library ferencd@0: OPTION( ferencd@0: VMIME_BUILD_SHARED_LIBRARY ferencd@0: "Build shared library" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: ferencd@0: ADD_LIBRARY( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: SHARED ferencd@0: ${VMIME_LIBRARY_SRC_FILES} ferencd@0: ${VMIME_LIBRARY_INCLUDE_FILES} ferencd@0: ) ferencd@0: ferencd@0: GENERATE_EXPORT_HEADER( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: BASE_NAME VMIME ferencd@0: STATIC_DEFINE VMIME_STATIC ferencd@0: EXPORT_FILE_NAME export-shared.hpp ferencd@0: ) ferencd@0: ferencd@0: FILE( ferencd@0: COPY ferencd@0: ${CMAKE_CURRENT_BINARY_DIR}/export-shared.hpp ferencd@0: DESTINATION ferencd@0: ${PROJECT_SOURCE_DIR}/src/vmime ferencd@0: ) ferencd@0: ferencd@0: LIST(APPEND VMIME_LIBRARY_GENERATED_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/vmime/export-shared.hpp") ferencd@0: ferencd@0: SET_TARGET_PROPERTIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: PROPERTIES ferencd@0: VERSION "${VMIME_API_VERSION}" ferencd@0: SOVERSION "${VMIME_API_VERSION_CURRENT}" ferencd@0: COMPILE_FLAGS -DVMIME_SHARED ferencd@0: ) ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: # Static library ferencd@0: # ferencd@0: # Note: cannot have two targets with the same name so the static version has ferencd@0: # '-static' appended and then the name of the output file is set separately. ferencd@0: OPTION( ferencd@0: VMIME_BUILD_STATIC_LIBRARY ferencd@0: "Build static library" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_STATIC_LIBRARY) ferencd@0: ferencd@0: ADD_LIBRARY( ferencd@0: ${VMIME_LIBRARY_NAME}-static ferencd@0: STATIC ferencd@0: ${VMIME_LIBRARY_SRC_FILES} ferencd@0: ${VMIME_LIBRARY_INCLUDE_FILES} ferencd@0: ) ferencd@0: ferencd@0: GENERATE_EXPORT_HEADER( ferencd@0: ${VMIME_LIBRARY_NAME}-static ferencd@0: BASE_NAME VMIME ferencd@0: STATIC_DEFINE VMIME_STATIC ferencd@0: EXPORT_FILE_NAME export-static.hpp ferencd@0: ) ferencd@0: ferencd@0: FILE( ferencd@0: COPY ferencd@0: ${CMAKE_CURRENT_BINARY_DIR}/export-static.hpp ferencd@0: DESTINATION ferencd@0: ${PROJECT_SOURCE_DIR}/src/vmime ferencd@0: ) ferencd@0: ferencd@0: LIST(APPEND VMIME_LIBRARY_GENERATED_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/vmime/export-static.hpp") ferencd@0: ferencd@0: SET_TARGET_PROPERTIES( ferencd@0: ${VMIME_LIBRARY_NAME}-static ferencd@0: PROPERTIES ferencd@0: OUTPUT_NAME ${VMIME_LIBRARY_NAME} ferencd@0: COMPILE_FLAGS -DVMIME_STATIC ferencd@0: ) ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: # Ensure at least one type of library (either shared or static) is build ferencd@0: IF(NOT(VMIME_BUILD_SHARED_LIBRARY OR VMIME_BUILD_STATIC_LIBRARY)) ferencd@0: MESSAGE(FATAL_ERROR "You should select at least one library to build (either VMIME_BUILD_SHARED_LIBRARY or VMIME_BUILD_STATIC_LIBRARY must be set to YES.") ferencd@0: ENDIF() ferencd@0: ferencd@0: # These next two lines are required but it is unclear exactly what they do. ferencd@0: # The CMake FAQ mentions they are necessary and it does not work otherwise. ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: SET_TARGET_PROPERTIES(${VMIME_LIBRARY_NAME} PROPERTIES CLEAN_DIRECT_OUTPUT 1) ferencd@0: ENDIF() ferencd@0: IF(VMIME_BUILD_STATIC_LIBRARY) ferencd@0: SET_TARGET_PROPERTIES(${VMIME_LIBRARY_NAME}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) ferencd@0: ENDIF() ferencd@0: ferencd@0: SET(CMAKE_INSTALL_LIBDIR lib CACHE PATH "Output directory for libraries") ferencd@0: ferencd@0: # Automatically set lib suffix ferencd@0: IF(UNIX AND NOT APPLE AND NOT CMAKE_CROSSCOMPILING AND NOT EXISTS "/etc/debian_version") ferencd@0: IF(CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT LIB_SUFFIX) ferencd@0: # ...only if LIB_SUFFIX is not defined... ferencd@0: IF(NOT DEFINED LIB_SUFFIX) ferencd@0: # ...and if CMAKE_INSTALL_LIBDIR does not already contain the suffix ferencd@0: IF(NOT "${CMAKE_INSTALL_LIBDIR}" MATCHES ".*64.*") ferencd@0: SET(LIB_SUFFIX 64) ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: # Determine library installation dir, in this order: ferencd@0: # 1) use VMIME_INSTALL_LIBDIR if set ferencd@0: # 2) use LIB_INSTALL_DIR if defined ferencd@0: # 3) use CMAKE_INSTALL_LIBDIR if set ferencd@0: # if it is a relative path, prepend CMAKE_INSTALL_PREFIX to it ferencd@0: # 4) use CMAKE_INSTALL_PREFIX/lib ferencd@0: IF(NOT DEFINED VMIME_INSTALL_LIBDIR) ferencd@0: IF(DEFINED LIB_INSTALL_DIR) ferencd@0: SET(VMIME_INSTALL_LIBDIR ${LIB_INSTALL_DIR}) ferencd@0: # respect CMAKE_INSTALL_LIBDIR if set ferencd@0: ELSEIF(DEFINED CMAKE_INSTALL_LIBDIR) ferencd@0: SET(VMIME_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) ferencd@0: IF(IS_ABSOLUTE ${VMIME_INSTALL_LIBDIR}) ferencd@0: SET(VMIME_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}${LIB_SUFFIX}) ferencd@0: ELSE() ferencd@0: SET(VMIME_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}${LIB_SUFFIX}) ferencd@0: ENDIF() ferencd@0: ELSE() ferencd@0: SET(VMIME_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}) ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: # Installation of libraries ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: INSTALL( ferencd@0: TARGETS ${VMIME_LIBRARY_NAME} ferencd@0: LIBRARY DESTINATION "${VMIME_INSTALL_LIBDIR}" COMPONENT sharedlibs ferencd@0: ARCHIVE DESTINATION "${VMIME_INSTALL_LIBDIR}" COMPONENT sharedlibs ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ferencd@0: IF(VMIME_BUILD_STATIC_LIBRARY) ferencd@0: INSTALL( ferencd@0: TARGETS ${VMIME_LIBRARY_NAME}-static ferencd@0: LIBRARY DESTINATION "${VMIME_INSTALL_LIBDIR}" COMPONENT staticlibs ferencd@0: ARCHIVE DESTINATION "${VMIME_INSTALL_LIBDIR}" COMPONENT staticlibs ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ferencd@0: # Installation of header files ferencd@0: INSTALL_HEADERS_WITH_DIRECTORY(VMIME_LIBRARY_INCLUDE_FILES headers src/) ferencd@0: INSTALL_HEADERS_WITH_DIRECTORY(VMIME_LIBRARY_GENERATED_INCLUDE_FILES headers src/) ferencd@0: ferencd@0: #INSTALL( ferencd@0: # FILES ${VMIME_LIBRARY_INCLUDE_FILES} ferencd@0: # DESTINATION include ferencd@0: # COMPONENT headers ferencd@0: #) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Tests ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_BUILD_TESTS ferencd@0: "Build unit tests (this will create a 'run-tests' binary)" ferencd@0: OFF ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_TESTS) ferencd@0: ferencd@0: ENABLE_TESTING() ferencd@0: ferencd@0: INCLUDE(cmake/FindCppUnit.cmake) ferencd@0: INCLUDE_DIRECTORIES(${CPPUNIT_INCLUDE_DIR}) ferencd@0: ferencd@0: FILE( ferencd@0: GLOB_RECURSE ferencd@0: VMIME_TESTS_SRC_FILES ferencd@0: ${CMAKE_SOURCE_DIR}/tests/*Test.cpp ferencd@0: ) ferencd@0: ferencd@0: ADD_LIBRARY( ferencd@0: test-runner ferencd@0: ${CMAKE_SOURCE_DIR}/tests/testRunner.cpp ${CMAKE_SOURCE_DIR}/tests/testUtils.cpp ferencd@0: ) ferencd@0: ferencd@0: # Build one file for each test ferencd@0: FOREACH(VMIME_TEST_SRC_FILE ${VMIME_TESTS_SRC_FILES}) ferencd@0: ferencd@0: # "/path/to/vmime/tests/module/testFile.cpp" --> "module_testFile" ferencd@0: GET_FILENAME_COMPONENT(VMIME_TEST_SRC_PATH "${VMIME_TEST_SRC_FILE}" PATH) ferencd@0: STRING(REPLACE "${CMAKE_SOURCE_DIR}" "" VMIME_TEST_SRC_PATH "${VMIME_TEST_SRC_PATH}") ferencd@0: GET_FILENAME_COMPONENT(VMIME_TEST_NAME "${VMIME_TEST_SRC_FILE}" NAME_WE) ferencd@0: SET(VMIME_TEST_NAME "${VMIME_TEST_SRC_PATH}/${VMIME_TEST_NAME}") ferencd@0: STRING(REPLACE "/" "_" VMIME_TEST_NAME "${VMIME_TEST_NAME}") ferencd@0: STRING(REPLACE "_tests_" "" VMIME_TEST_NAME "${VMIME_TEST_NAME}") ferencd@0: ferencd@0: ADD_EXECUTABLE( ferencd@0: ${VMIME_TEST_NAME} ferencd@0: ${VMIME_TEST_SRC_FILE} ferencd@0: ) ferencd@0: ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_TEST_NAME} ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${CPPUNIT_LIBRARY} test-runner ferencd@0: ) ferencd@0: ferencd@0: ADD_DEPENDENCIES( ferencd@0: ${VMIME_TEST_NAME} ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ) ferencd@0: ferencd@0: ADD_TEST( ferencd@0: ${VMIME_TEST_NAME} ferencd@0: ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${VMIME_TEST_NAME} ferencd@0: ) ferencd@0: ferencd@0: ENDFOREACH() ferencd@0: ferencd@0: # Build one file for all tests ferencd@0: ADD_EXECUTABLE( ferencd@0: "run-tests" ferencd@0: ${VMIME_TESTS_SRC_FILES} ferencd@0: ) ferencd@0: ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: "run-tests" ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${CPPUNIT_LIBRARY} test-runner ferencd@0: ) ferencd@0: ferencd@0: ADD_DEPENDENCIES( ferencd@0: "run-tests" ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ) ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Examples ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_BUILD_SAMPLES ferencd@0: "Build samples (in 'examples' directory)" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Packaging / Distribution ferencd@0: ferencd@0: # Package information ferencd@0: SET(VMIME_PACKAGE_NAME ${VMIME_LIBRARY_NAME}) ferencd@0: SET(VMIME_PACKAGE_VERSION ${VMIME_VERSION}) ferencd@0: SET(VMIME_PACKAGE_CONTACT "Vincent Richard ") ferencd@0: SET(VMIME_PACKAGE_DESCRIPTION "VMime C++ Mail Library (http://www.vmime.org)") ferencd@0: ferencd@0: SET(CPACK_PACKAGE_NAME "${VMIME_PACKAGE_NAME}") ferencd@0: SET(CPACK_PACKAGE_CONTACT "${VMIME_PACKAGE_CONTACT}") ferencd@0: SET(CPACK_PACKAGE_DESCRIPTION "${VMIME_PACKAGE_DESCRIPTION}") ferencd@0: SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${CPACK_PACKAGE_DESCRIPTION}") ferencd@0: SET(CPACK_PACKAGE_VERSION "${VMIME_PACKAGE_VERSION}") ferencd@0: ferencd@0: # Package settings ferencd@0: SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING) ferencd@0: ferencd@0: IF(APPLE) ferencd@0: # CPack/PackageManager won't allow file without recognized extension ferencd@0: # to be used as license file. ferencd@0: CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/COPYING" "${CMAKE_BINARY_DIR}/COPYING.txt" COPYONLY) ferencd@0: SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/COPYING.txt") ferencd@0: ELSE() ferencd@0: SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") ferencd@0: ENDIF(APPLE) ferencd@0: ferencd@0: SET(CPACK_SOURCE_GENERATOR TGZ) ferencd@0: SET(CPACK_SOURCE_IGNORE_FILES "\\\\.git;~$;build/") ferencd@0: SET(CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}) ferencd@0: ferencd@0: # Set components ferencd@0: SET(CPACK_COMPONENTS_ALL sharedlibs staticlibs headers) ferencd@0: ferencd@0: SET(CPACK_COMPONENT_SHAREDLIBS_DISPLAY_NAME "Shared libraries") ferencd@0: SET(CPACK_COMPONENT_SHAREDLIBS_DESCRIPTION ferencd@0: "Shared library for general use.") ferencd@0: ferencd@0: SET(CPACK_COMPONENT_STATICLIBS_DISPLAY_NAME "Static libraries") ferencd@0: SET(CPACK_COMPONENT_STATICLIBS_DESCRIPTION ferencd@0: "Static library, good if you want to embed VMime in your application.") ferencd@0: ferencd@0: SET(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers") ferencd@0: SET(CPACK_COMPONENT_HEADERS_DESCRIPTION ferencd@0: "C/C++ header files.") ferencd@0: ferencd@0: SET(CPACK_COMPONENT_SHAREDLIBS_GROUP "Development") ferencd@0: SET(CPACK_COMPONENT_STATICLIBS_GROUP "Development") ferencd@0: SET(CPACK_COMPONENT_HEADERS_GROUP "Development") ferencd@0: SET(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION "") ferencd@0: ferencd@0: # Make a target "dist" to generate tarball ferencd@0: SET(ARCHIVE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}) ferencd@0: ferencd@0: ADD_CUSTOM_TARGET( ferencd@0: dist ferencd@0: COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD ferencd@0: | bzip2 > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2 ferencd@0: WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ferencd@0: ) ferencd@0: ferencd@0: # PkgConfig ferencd@0: SET(prefix ${CMAKE_INSTALL_PREFIX}) ferencd@0: SET(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin) ferencd@0: SET(includedir ${CMAKE_INSTALL_PREFIX}/include/vmime) ferencd@0: SET(libdir ${VMIME_INSTALL_LIBDIR}) ferencd@0: ferencd@0: SET(VMIME_PKGCONFIG_LIBS "") ferencd@0: SET(VMIME_PKGCONFIG_CFLAGS "") ferencd@0: SET(VMIME_PKGCONFIG_REQUIRES "") ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Build type ferencd@0: ferencd@0: IF(NOT CMAKE_BUILD_TYPE) ferencd@0: SET( ferencd@0: CMAKE_BUILD_TYPE ferencd@0: "Debug" ferencd@0: CACHE STRING ferencd@0: "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." ferencd@0: FORCE ferencd@0: ) ferencd@0: ENDIF(NOT CMAKE_BUILD_TYPE) ferencd@0: ferencd@0: # Set a default build type for single-configuration ferencd@0: # CMake generators if no build type is set. ferencd@0: IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) ferencd@0: SET(CMAKE_BUILD_TYPE Debug) ferencd@0: ENDIF() ferencd@0: ferencd@0: # Debug build ferencd@0: MESSAGE("-- Build type: ${CMAKE_BUILD_TYPE}") ferencd@0: IF(${CMAKE_BUILD_TYPE} STREQUAL Debug) ferencd@0: ADD_DEFINITIONS(-DDEBUG) ferencd@0: ENDIF(${CMAKE_BUILD_TYPE} STREQUAL Debug) ferencd@0: ferencd@0: ferencd@0: IF(CMAKE_BUILD_TYPE STREQUAL "Debug") ferencd@0: SET(VMIME_DEBUG 1) ferencd@0: ELSE() ferencd@0: SET(VMIME_DEBUG 0) ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Test endianness and basic type sizes ferencd@0: ferencd@0: INCLUDE(TestBigEndian) ferencd@0: TEST_BIG_ENDIAN(BIGENDIAN) ferencd@0: ferencd@0: IF(BIGENDIAN EQUAL 0) ferencd@0: set(VMIME_BYTE_ORDER_BIG_ENDIAN 0) ferencd@0: set(VMIME_BYTE_ORDER_LITTLE_ENDIAN 1) ferencd@0: ELSE(BIGENDIAN EQUAL 0) ferencd@0: SET(VMIME_BYTE_ORDER_BIG_ENDIAN 1) ferencd@0: SET(VMIME_BYTE_ORDER_LITTLE_ENDIAN 0) ferencd@0: ENDIF(BIGENDIAN EQUAL 0) ferencd@0: ferencd@0: ferencd@0: CHECK_INCLUDE_FILE_CXX(cstdint VMIME_HAVE_CSTDINT) ferencd@0: ferencd@0: CHECK_TYPE_SIZE("char" SIZEOF_CHAR) ferencd@0: CHECK_TYPE_SIZE("short" SIZEOF_SHORT) ferencd@0: CHECK_TYPE_SIZE("int" SIZEOF_INT) ferencd@0: CHECK_TYPE_SIZE("long" SIZEOF_LONG) ferencd@0: CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG) ferencd@0: CHECK_TYPE_SIZE("__int64" SIZEOF___INT64) ferencd@0: ferencd@0: SET(CMAKE_EXTRA_INCLUDE_FILES cstdint) ferencd@0: CHECK_TYPE_SIZE("int64_t" SIZEOF_INT64_T) ferencd@0: SET(CMAKE_EXTRA_INCLUDE_FILES) ferencd@0: ferencd@0: ferencd@0: IF(SIZEOF_CHAR EQUAL 1) ferencd@0: SET(VMIME_8BIT_TYPE "char") ferencd@0: ELSE() ferencd@0: MESSAGE(FATAL_ERROR "Cannot determine 8-bit type") ferencd@0: ENDIF() ferencd@0: ferencd@0: IF(SIZEOF_INT EQUAL 2) ferencd@0: SET(VMIME_16BIT_TYPE "int") ferencd@0: ELSE() ferencd@0: IF(SIZEOF_SHORT EQUAL 2) ferencd@0: SET(VMIME_16BIT_TYPE "short") ferencd@0: ELSE() ferencd@0: MESSAGE(FATAL_ERROR "Cannot determine 16-bit type") ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: IF(SIZEOF_INT EQUAL 4) ferencd@0: SET(VMIME_32BIT_TYPE "int") ferencd@0: ELSE() ferencd@0: IF(SIZEOF_LONG EQUAL 4) ferencd@0: SET(VMIME_32BIT_TYPE "long") ferencd@0: ELSE() ferencd@0: IF(SIZEOF_LONG_LONG EQUAL 4) ferencd@0: SET(VMIME_32BIT_TYPE "long long") ferencd@0: ELSE() ferencd@0: MESSAGE(FATAL_ERROR "Cannot determine 32-bit type") ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: IF(SIZEOF_INT EQUAL 8) ferencd@0: SET(VMIME_64BIT_TYPE "int") ferencd@0: ELSE() ferencd@0: IF(SIZEOF_LONG EQUAL 8) ferencd@0: SET(VMIME_64BIT_TYPE "long") ferencd@0: ELSE() ferencd@0: IF(SIZEOF_LONG_LONG EQUAL 8) ferencd@0: SET(VMIME_64BIT_TYPE "long long") ferencd@0: ELSE() ferencd@0: IF(SIZEOF_INT64_T EQUAL 8) ferencd@0: SET(VMIME_64BIT_TYPE "int64_t") ferencd@0: ELSE() ferencd@0: IF(SIZEOF___INT64 EQUAL 8) ferencd@0: SET(VMIME_64BIT_TYPE "__int64") ferencd@0: ELSE() ferencd@0: MESSAGE(FATAL_ERROR "Cannot determine 64-bit type") ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: INCLUDE(cmake/TargetArch.cmake) ferencd@0: TARGET_ARCHITECTURE(CMAKE_TARGET_ARCHITECTURES) ferencd@0: ferencd@0: CHECK_TYPE_SIZE(size_t VMIME_HAVE_SIZE_T) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Sendmail path ferencd@0: ferencd@0: FOREACH (SENDMAIL_PATH /usr/sbin/sendmail /usr/lib/sendmail /usr/bin/sendmail /bin/sendmail /var/qmail/bin/qmail-inject /bin/cgimail) ferencd@0: IF(EXISTS ${SENDMAIL_PATH}) ferencd@0: MESSAGE(STATUS "Sendmail binary found at ${SENDMAIL_PATH}") ferencd@0: SET(VMIME_DEFAULT_SENDMAIL_PATH ${SENDMAIL_PATH}) ferencd@0: ENDIF() ferencd@0: ENDFOREACH(SENDMAIL_PATH) ferencd@0: ferencd@0: SET( ferencd@0: VMIME_SENDMAIL_PATH ferencd@0: ${VMIME_DEFAULT_SENDMAIL_PATH} ferencd@0: CACHE ferencd@0: STRING ferencd@0: "Specifies the path to sendmail binary" ferencd@0: ) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Messaging features ferencd@0: ferencd@0: # Module ferencd@0: OPTION( ferencd@0: VMIME_HAVE_MESSAGING_FEATURES ferencd@0: "Enable messaging features (connection to IMAP, POP3, SMTP...)" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: # Protocols ferencd@0: OPTION( ferencd@0: VMIME_HAVE_MESSAGING_PROTO_POP3 ferencd@0: "Enable POP3 protocol" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_HAVE_MESSAGING_PROTO_SMTP ferencd@0: "Enable SMTP protocol" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_HAVE_MESSAGING_PROTO_IMAP ferencd@0: "Enable IMAP protocol" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_HAVE_MESSAGING_PROTO_MAILDIR ferencd@0: "Enable Maildir protocol" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_HAVE_MESSAGING_PROTO_SENDMAIL ferencd@0: "Enable Sendmail protocol" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # File-system features ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_HAVE_FILESYSTEM_FEATURES ferencd@0: "Enable file-system features (required for file attachments and Maildir)" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # SASL support ferencd@0: ferencd@0: INCLUDE(cmake/FindGSasl.cmake) ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_HAVE_SASL_SUPPORT ferencd@0: "Enable SASL support (requires GNU SASL library)" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_HAVE_SASL_SUPPORT) ferencd@0: ferencd@0: INCLUDE_DIRECTORIES( ferencd@0: ${INCLUDE_DIRECTORIES} ferencd@0: ${GSASL_INCLUDE_DIR} ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: ${GSASL_LIBRARIES} ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ferencd@0: SET(VMIME_PKGCONFIG_REQUIRES "${VMIME_PKGCONFIG_REQUIRES} libgsasl") ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # SSL/TLS support ferencd@0: ferencd@0: INCLUDE(FindGnuTLS) ferencd@0: INCLUDE(FindOpenSSL) ferencd@0: ferencd@0: SET(CMAKE_REQUIRED_LIBRARIES "${GNUTLS_LIBRARY}") ferencd@0: CHECK_FUNCTION_EXISTS(gnutls_priority_set_direct VMIME_HAVE_GNUTLS_PRIORITY_FUNCS) ferencd@0: ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_HAVE_TLS_SUPPORT ferencd@0: "SSL/TLS support (requires either GNU TLS or OpenSSL library)" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: SET( ferencd@0: VMIME_TLS_SUPPORT_LIB ferencd@0: "gnutls" ferencd@0: CACHE ferencd@0: STRING ferencd@0: "Library to use for SSL/TLS conversion" ferencd@0: ) ferencd@0: SET_PROPERTY( ferencd@0: CACHE ferencd@0: VMIME_TLS_SUPPORT_LIB ferencd@0: PROPERTY STRINGS gnutls openssl ferencd@0: ) ferencd@0: ferencd@0: ferencd@0: IF(VMIME_HAVE_TLS_SUPPORT) ferencd@0: ferencd@0: IF(VMIME_TLS_SUPPORT_LIB STREQUAL "gnutls") ferencd@0: ferencd@0: INCLUDE_DIRECTORIES( ferencd@0: ${INCLUDE_DIRECTORIES} ferencd@0: ${GNUTLS_INCLUDE_DIR} ferencd@0: ) ferencd@0: ferencd@0: LINK_DIRECTORIES( ferencd@0: ${LINK_DIRECTORIES} ferencd@0: ${GNUTLS_LIBRARY_DIRS} ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: ${GNUTLS_LIBRARY} ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ferencd@0: SET(VMIME_PKGCONFIG_REQUIRES "${VMIME_PKGCONFIG_REQUIRES} gnutls") ferencd@0: ferencd@0: SET(VMIME_TLS_SUPPORT_LIB_IS_GNUTLS "ON") ferencd@0: SET(VMIME_TLS_SUPPORT_LIB_IS_OPENSSL "OFF") ferencd@0: ferencd@0: ELSEIF(VMIME_TLS_SUPPORT_LIB STREQUAL "openssl") ferencd@0: ferencd@0: INCLUDE_DIRECTORIES( ferencd@0: ${INCLUDE_DIRECTORIES} ferencd@0: ${OPENSSL_INCLUDE_DIR} ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: ${OPENSSL_LIBRARIES} ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ferencd@0: SET(VMIME_PKGCONFIG_REQUIRES "${VMIME_PKGCONFIG_REQUIRES} openssl") ferencd@0: ferencd@0: SET(VMIME_TLS_SUPPORT_LIB_IS_GNUTLS "OFF") ferencd@0: SET(VMIME_TLS_SUPPORT_LIB_IS_OPENSSL "ON") ferencd@0: ferencd@0: ELSE() ferencd@0: ferencd@0: MESSAGE(FATAL_ERROR "TLS support is enabled, but no TLS/SSL library was selected/found") ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: ENDIF(VMIME_HAVE_TLS_SUPPORT) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Charset conversion library ferencd@0: ferencd@0: INCLUDE(cmake/FindIconv.cmake) ferencd@0: INCLUDE(cmake/FindICU.cmake) ferencd@0: ferencd@0: FIND_PACKAGE(ICU QUIET) ferencd@0: ferencd@0: IF(WIN32) ferencd@0: SET(VMIME_CHARSETCONV_LIB_DETECTED "win") ferencd@0: ELSEIF(ICU_LIBRARIES) ferencd@0: SET(VMIME_CHARSETCONV_LIB_DETECTED "icu") ferencd@0: ELSEIF(ICONV_FOUND) ferencd@0: SET(VMIME_CHARSETCONV_LIB_DETECTED "iconv") ferencd@0: ENDIF() ferencd@0: ferencd@0: SET( ferencd@0: VMIME_CHARSETCONV_LIB ferencd@0: "${VMIME_CHARSETCONV_LIB_DETECTED}" ferencd@0: CACHE ferencd@0: STRING ferencd@0: "Library to use for charset conversion" ferencd@0: ) ferencd@0: SET_PROPERTY( ferencd@0: CACHE ferencd@0: VMIME_CHARSETCONV_LIB ferencd@0: PROPERTY STRINGS win iconv icu ferencd@0: ) ferencd@0: ferencd@0: ferencd@0: IF(VMIME_CHARSETCONV_LIB STREQUAL "iconv") ferencd@0: ferencd@0: INCLUDE_DIRECTORIES( ferencd@0: ${INCLUDE_DIRECTORIES} ferencd@0: ${ICONV_INCLUDE_DIR} ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: ${ICONV_LIBRARIES} ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ferencd@0: SET(VMIME_PKGCONFIG_LIBS "${VMIME_PKGCONFIG_LIBS} ${ICONV_LIBRARIES}") ferencd@0: SET(VMIME_PKGCONFIG_CFLAGS "${VMIME_PKGCONFIG_CFLAGS} -I${ICONV_INCLUDE_DIR}") ferencd@0: ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_ICONV "ON") ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_ICU "OFF") ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_WIN "OFF") ferencd@0: ferencd@0: ELSEIF(VMIME_CHARSETCONV_LIB STREQUAL "icu") ferencd@0: ferencd@0: INCLUDE_DIRECTORIES( ferencd@0: ${INCLUDE_DIRECTORIES} ferencd@0: ${ICU_INCLUDE_DIRS} ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: ${ICU_LIBRARIES} ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ferencd@0: SET(VMIME_PKGCONFIG_LIBS "${VMIME_PKGCONFIG_LIBS} ${ICU_LIBRARIES}") ferencd@0: SET(VMIME_PKGCONFIG_CFLAGS "${VMIME_PKGCONFIG_CFLAGS} -I${ICU_INCLUDE_DIRS}") ferencd@0: ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_ICONV "OFF") ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_ICU "ON") ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_WIN "OFF") ferencd@0: ferencd@0: ELSEIF(VMIME_CHARSETCONV_LIB STREQUAL "win") ferencd@0: ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_ICONV "OFF") ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_ICU "OFF") ferencd@0: SET(VMIME_CHARSETCONV_LIB_IS_WIN "ON") ferencd@0: ferencd@0: ELSE() ferencd@0: ferencd@0: MESSAGE(FATAL_ERROR "No charset conversion library was selected/found") ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Language features ferencd@0: ferencd@0: # C++11 ferencd@0: INCLUDE(cmake/cmake-cxx11/Modules/CheckCXX11Features.cmake) ferencd@0: ferencd@0: # Smart pointers ferencd@0: # ferencd@0: # If a C++11-compliant compiler is available and supports std::shared_ptr<>, ferencd@0: # use the standard implementation. Else, use boost::shared_ptr<>. ferencd@0: # In any case, let the user override the choice with VMIME_SHARED_PTR_USE_CXX ferencd@0: # and VMIME_SHARED_PTR_USE_BOOST variables. ferencd@0: ferencd@0: CHECK_CXX_SOURCE_COMPILES( ferencd@0: " ferencd@0: #include ferencd@0: struct A { int foo; }; ferencd@0: int main() { ferencd@0: std::shared_ptr a = std::make_shared (); ferencd@0: return 0; ferencd@0: } ferencd@0: " ferencd@0: VMIME_HAS_CXX11_SHARED_PTR ferencd@0: ) ferencd@0: ferencd@0: IF(NOT VMIME_SHARED_PTR_USE_CXX AND NOT VMIME_SHARED_PTR_USE_BOOST) ferencd@0: IF(CXX11_COMPILER_FLAGS AND VMIME_HAS_CXX11_SHARED_PTR) ferencd@0: # If std::shared_ptr<> is available, use it by default ferencd@0: SET(VMIME_SHARED_PTR_USE_CXX_DEFAULT ON) ferencd@0: SET(VMIME_SHARED_PTR_USE_BOOST_DEFAULT OFF) ferencd@0: ELSE() ferencd@0: # Else, set default to boost::shared_ptr<> ferencd@0: SET(VMIME_SHARED_PTR_USE_CXX_DEFAULT OFF) ferencd@0: SET(VMIME_SHARED_PTR_USE_BOOST_DEFAULT ON) ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_SHARED_PTR_USE_CXX ferencd@0: "Use standard std::shared_ptr<> (requires a C++11 compiler)" ferencd@0: ${VMIME_SHARED_PTR_USE_CXX_DEFAULT} ferencd@0: ) ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_SHARED_PTR_USE_BOOST ferencd@0: "Use boost::shared_ptr<> (requires Boost)" ferencd@0: ${VMIME_SHARED_PTR_USE_BOOST_DEFAULT} ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_SHARED_PTR_USE_CXX AND VMIME_SHARED_PTR_USE_BOOST) ferencd@0: MESSAGE(FATAL_ERROR "Options VMIME_SHARED_PTR_USE_CXX and VMIME_SHARED_PTR_USE_BOOST are mutually exclusive (select one or the other, but not both!)") ferencd@0: ENDIF() ferencd@0: ferencd@0: IF(VMIME_SHARED_PTR_USE_CXX) ferencd@0: ferencd@0: SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_COMPILER_FLAGS}") ferencd@0: ferencd@0: IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ferencd@0: SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") ferencd@0: ENDIF() ferencd@0: ferencd@0: MESSAGE(STATUS "Checking support for shared_ptr<>: built-in (C++11)") ferencd@0: ferencd@0: ELSEIF(VMIME_SHARED_PTR_USE_BOOST) ferencd@0: ferencd@0: # Depends on Boost library if C++11 is not supported ferencd@0: FIND_PACKAGE(Boost) ferencd@0: ferencd@0: IF(Boost_FOUND) ferencd@0: INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) ferencd@0: ELSE() ferencd@0: MESSAGE(FATAL_ERROR "Boost library is required for shared_ptr<>, unless you compile using C++11") ferencd@0: ENDIF() ferencd@0: ferencd@0: MESSAGE(STATUS "Checking support for shared_ptr<>: boost library") ferencd@0: ferencd@0: ELSE() ferencd@0: ferencd@0: MESSAGE(FATAL_ERROR "No implementation for shared_ptr<> was selected/found") ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Platform ferencd@0: ferencd@0: SET(VMIME_PLATFORM_IS_POSIX OFF) ferencd@0: SET(VMIME_PLATFORM_IS_WINDOWS OFF) ferencd@0: ferencd@0: IF(WIN32) ferencd@0: SET(VMIME_PLATFORM_IS_WINDOWS ON) ferencd@0: ELSE() ferencd@0: SET(VMIME_PLATFORM_IS_POSIX ON) ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Platform-specific checks ferencd@0: ferencd@0: CHECK_FUNCTION_EXISTS(gmtime_s VMIME_HAVE_GMTIME_S) ferencd@0: CHECK_FUNCTION_EXISTS(gmtime_r VMIME_HAVE_GMTIME_R) ferencd@0: CHECK_FUNCTION_EXISTS(localtime_s VMIME_HAVE_LOCALTIME_S) ferencd@0: CHECK_FUNCTION_EXISTS(localtime_r VMIME_HAVE_LOCALTIME_R) ferencd@0: CHECK_FUNCTION_EXISTS(strcpy_s VMIME_HAVE_STRCPY_S) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Windows-specific checks ferencd@0: ferencd@0: IF(WIN32) ferencd@0: ferencd@0: # Winsock ferencd@0: CHECK_LIBRARY_EXISTS("ws2_32" getch "${CMAKE_LIBRARY_PATH}" VMIME_HAVE_LIBWS2_32) ferencd@0: ferencd@0: IF(VMIME_HAVE_LIBWS2_32) ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: "ws2_32" ferencd@0: ) ferencd@0: ELSE() ferencd@0: SET(VMIME_PKGCONFIG_LIBS "${VMIME_PKGCONFIG_LIBS} -lws2_32") ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: # MLang ferencd@0: CHECK_INCLUDE_FILES(Mlang.h VMIME_HAVE_MLANG_H) ferencd@0: CHECK_LIBRARY_EXISTS("mlang" ConvertINetString "${CMAKE_LIBRARY_PATH}" VMIME_HAVE_MLANG_LIB) ferencd@0: ferencd@0: IF(VMIME_HAVE_MLANG_H) ferencd@0: IF(VMIME_HAVE_MLANG_LIB) ferencd@0: SET(VMIME_HAVE_MLANG ON) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: "mlang" ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # POSIX-specific checks ferencd@0: ferencd@0: CHECK_FUNCTION_EXISTS(getaddrinfo VMIME_HAVE_GETADDRINFO) ferencd@0: CHECK_FUNCTION_EXISTS(getnameinfo VMIME_HAVE_GETNAMEINFO) ferencd@0: ferencd@0: CHECK_FUNCTION_EXISTS(gettid VMIME_HAVE_GETTID) ferencd@0: CHECK_FUNCTION_EXISTS(syscall VMIME_HAVE_SYSCALL) ferencd@0: CHECK_SYMBOL_EXISTS(SYS_gettid sys/syscall.h VMIME_HAVE_SYSCALL_GETTID) ferencd@0: ferencd@0: FIND_PACKAGE(Threads) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: ${CMAKE_THREAD_LIBS_INIT} ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ferencd@0: FIND_LIBRARY(PTHREAD_LIB pthread) ferencd@0: ferencd@0: IF(PTHREAD_LIB) ferencd@0: SET(VMIME_HAVE_PTHREAD 1) ferencd@0: ferencd@0: IF(VMIME_BUILD_SHARED_LIBRARY) ferencd@0: TARGET_LINK_LIBRARIES( ferencd@0: ${VMIME_LIBRARY_NAME} ferencd@0: ${TARGET_LINK_LIBRARIES} ferencd@0: ${PTHREAD_LIB} ferencd@0: ) ferencd@0: ENDIF() ferencd@0: ELSE(PTHREAD_LIB) ferencd@0: SET(VMIME_HAVE_PTHREAD 0) ferencd@0: ENDIF(PTHREAD_LIB) ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Additional compiler flags ferencd@0: ferencd@0: IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ferencd@0: ferencd@0: SET( ferencd@0: CMAKE_CXX_FLAGS ferencd@0: "${CMAKE_CXX_FLAGS} -D_REENTRANT=1 -W -Wall -pedantic -Warray-bounds-pointer-arithmetic -Wold-style-cast -Wconversion -Wcast-align -Wno-sign-conversion" ferencd@0: CACHE STRING ferencd@0: "g++ Compiler Flags" ferencd@0: FORCE ferencd@0: ) ferencd@0: ferencd@0: SET(CMAKE_CXX_FLAGS_RELEASE "-O2") ferencd@0: SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") ferencd@0: SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") ferencd@0: ferencd@0: #SET(CMAKE_EXE_LINKER_FLAGS "-s") ferencd@0: ferencd@0: ELSE() ferencd@0: ferencd@0: IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) ferencd@0: ferencd@0: SET( ferencd@0: CMAKE_CXX_FLAGS ferencd@0: "${CMAKE_CXX_FLAGS} -D_REENTRANT=1 -W -Wall -pedantic -Wpointer-arith -Wold-style-cast -Wconversion -Wcast-align -Wno-long-long" ferencd@0: CACHE STRING ferencd@0: "g++ Compiler Flags" ferencd@0: FORCE ferencd@0: ) ferencd@0: ferencd@0: SET(CMAKE_CXX_FLAGS_RELEASE "-O2") ferencd@0: SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") ferencd@0: SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") ferencd@0: ferencd@0: #SET(CMAKE_EXE_LINKER_FLAGS "-s") ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Documentation ferencd@0: ferencd@0: OPTION( ferencd@0: VMIME_BUILD_DOCUMENTATION ferencd@0: "Build documentation" ferencd@0: ON ferencd@0: ) ferencd@0: ferencd@0: IF(VMIME_BUILD_DOCUMENTATION) ferencd@0: FIND_PACKAGE(Doxygen) ferencd@0: ferencd@0: IF(DOXYGEN_FOUND) ferencd@0: CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile @ONLY) ferencd@0: ferencd@0: # Make a target so that documentation can be generated by running "make doc" ferencd@0: ADD_CUSTOM_TARGET( ferencd@0: doc ferencd@0: ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile ferencd@0: WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ferencd@0: COMMENT "Generating API documentation with Doxygen" VERBATIM ferencd@0: ) ferencd@0: ENDIF(DOXYGEN_FOUND) ferencd@0: ENDIF(VMIME_BUILD_DOCUMENTATION) ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Sanity checks ferencd@0: ferencd@0: # Maildir protocol is available only if file-system features are enabled ferencd@0: IF(VMIME_HAVE_MESSAGING_FEATURES AND VMIME_HAVE_MESSAGING_PROTO_MAILDIR AND NOT VMIME_HAVE_FILESYSTEM_FEATURES) ferencd@0: MESSAGE(FATAL_ERROR "Maildir protocol requires file-system support (VMIME_HAVE_FILESYSTEM_FEATURES must be set to ON).") ferencd@0: ENDIF() ferencd@0: ferencd@0: # Path to 'sendmail' must be specified if Sendmail protocol is enabled ferencd@0: IF(VMIME_HAVE_MESSAGING_PROTO_SENDMAIL) ferencd@0: IF(NOT VMIME_SENDMAIL_PATH OR VMIME_SENDMAIL_PATH STREQUAL "") ferencd@0: MESSAGE(FATAL_ERROR "Enabling Sendmail protocol requires that you specify path to 'sendmail' binary.") ferencd@0: ENDIF() ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: ############################################################################## ferencd@0: # Build examples ferencd@0: ferencd@0: IF(VMIME_BUILD_SAMPLES) ferencd@0: ADD_SUBDIRECTORY(examples) ferencd@0: ENDIF() ferencd@0: ferencd@0: ferencd@0: # Set our configure file ferencd@0: CONFIGURE_FILE(cmake/config.hpp.cmake ${CMAKE_SOURCE_DIR}/src/vmime/config.hpp) ferencd@0: ferencd@0: # PkgConfig post-configuration ferencd@0: CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/vmime.pc.in ${CMAKE_BINARY_DIR}/vmime.pc @ONLY) ferencd@0: INSTALL(FILES ${CMAKE_BINARY_DIR}/vmime.pc DESTINATION "${VMIME_INSTALL_LIBDIR}/pkgconfig" COMPONENT headers) ferencd@0: ferencd@0: INCLUDE(CPack) ferencd@0: