diff --git a/CMakeLists.txt b/CMakeLists.txt index fde30c2..c3737ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,213 +1,213 @@ cmake_minimum_required(VERSION 2.8.5) project(Libkolabxml NONE) option( BUILD_TESTS "Build the tests" TRUE ) option( BUILD_UTILS "Build optional utils" FALSE ) option( DIST_ONLY "Build dist targets only (does not require a compiler)" FALSE ) option( PYTHON_BINDINGS "Build bindings for python" FALSE ) option( PHP_BINDINGS "Build bindings for php" FALSE ) option( CSHARP_BINDINGS "Build bindings for csharp" FALSE ) option( JAVA_BINDINGS "Build bindings for java" FALSE ) option( QT5_BUILD "Build libkolabxml using the Qt5 framework" FALSE) set(Libkolabxml_MODULE_DIR ${Libkolabxml_SOURCE_DIR}/cmake/modules) set(CMAKE_MODULE_PATH ${Libkolabxml_MODULE_DIR}) # only available from cmake-2.8.0 if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 7) cmake_policy(SET CMP0012 NEW) endif() # only available from cmake-2.8.4 if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 7 AND ${CMAKE_PATCH_VERSION} GREATER 3) cmake_policy(SET CMP0017 NEW) endif() # Versioning # x.y.z scheme # Development versions are only x.y # # i.e. # 0.1 (0.1 development version) # 0.1.0 (first release) # 0.1.1 (patch release for 0.1.0) # 0.2 (0.2 development version) set (Libkolabxml_VERSION_MAJOR 1) set (Libkolabxml_VERSION_MINOR 2) # Enable the full x.y.z version only for release versions -#set (Libkolabxml_VERSION_PATCH 1) -#set (Libkolabxml_VERSION "${Libkolabxml_VERSION_MAJOR}.${Libkolabxml_VERSION_MINOR}.${Libkolabxml_VERSION_PATCH}" ) -set (Libkolabxml_VERSION "${Libkolabxml_VERSION_MAJOR}.${Libkolabxml_VERSION_MINOR}" ) +set (Libkolabxml_VERSION_PATCH 0) +set (Libkolabxml_VERSION "${Libkolabxml_VERSION_MAJOR}.${Libkolabxml_VERSION_MINOR}.${Libkolabxml_VERSION_PATCH}" ) +#set (Libkolabxml_VERSION "${Libkolabxml_VERSION_MAJOR}.${Libkolabxml_VERSION_MINOR}" ) set (Libkolabxml_VERSION_STRING ${CMAKE_PROJECT_NAME}-${Libkolabxml_VERSION}) set (KOLAB_FORMAT_VERSION "3.1.0") message("Building DIST targets (make dist, make snapshot)") #make dist requires a tag with ${ARCHIVE_NAME} (e.g. libkolabxml-0.2.0) set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${Libkolabxml_VERSION}) add_custom_target(dist COMMAND git archive --prefix=${ARCHIVE_NAME}/ ${ARCHIVE_NAME} | bzip2 > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) #snapshot of current development version set(SNAPSHOTARCHIVE_NAME "${CMAKE_PROJECT_NAME}-${Libkolabxml_VERSION}-HEAD") add_custom_target(snapshot COMMAND git archive --prefix=${SNAPSHOTARCHIVE_NAME}/ HEAD | bzip2 > ${CMAKE_BINARY_DIR}/${SNAPSHOTARCHIVE_NAME}.tar.bz2 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) #It's possible to make dist targets only using: #cmake -DDIST_ONLY=TRUE .. if (DIST_ONLY) message("Building DIST targets ONLY (cmake -DDIST_ONLY=FALSE .. for full build)") return() endif() #C++ is required from here on enable_language(CXX) # Used to set installation paths include(GNUInstallDirs) set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "The directories where to install libraries to") set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING "The directory where to install headers to") set(INCLUDE_INSTALL_DIR ${INCLUDE_INSTALL_DIR}/kolabxml) set(CMAKECONFIG_INSTALL_DIR ${LIB_INSTALL_DIR}/cmake/Libkolabxml ) # Make relative paths absolute (needed later on) foreach(p LIB INCLUDE CMAKECONFIG) set(var ${p}_INSTALL_DIR) if(NOT IS_ABSOLUTE "${${var}}") set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}") endif() endforeach() configure_file(libkolabxml-version.h.cmake "${CMAKE_BINARY_DIR}/libkolabxml-version.h" @ONLY) set(Boost_USE_MULTITHREADED ON) find_package(Boost REQUIRED COMPONENTS thread system) if (Boost_FOUND) message("Found boost in ${Boost_INCLUDE_DIRS}") endif (Boost_FOUND) find_package(LibkolabxmlDependencies REQUIRED) # Must be after findboost set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" ) execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7) message(STATUS "GCC Version >= 4.7, applying unqualified lookup workaround") # gcc 4.7 no longer performs unqualified lookups by default, see: http://gcc.gnu.org/gcc-4.7/porting_to.html. # This workaround is added for xsd code, which fails otherwise to compile. -fpermissive turns the errors into warnings. # It's only temporary, and should be removed once xsd is fixed. set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive" ) endif() file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bindings) set( SCHEMA_DIR ${CMAKE_SOURCE_DIR}/schemas ) # Generate bindings # WARNING: The inclusion order in SCHEMAS matters with xerces < 3.1.0. It seems without XMLUni::fgXercesHandleMultipleImports at least kolabformat-xcard.xsd MUST be before xCard.xsd, # otherwise the compiled schema will simply lack the definitions of kolabformat-xcard.xsd (this affects xsdbin only). set( SCHEMAS ${SCHEMA_DIR}/ical/kolabformat-xcal.xsd ${SCHEMA_DIR}/ical/iCalendar-params.xsd ${SCHEMA_DIR}/ical/iCalendar-props.xsd ${SCHEMA_DIR}/ical/iCalendar-valtypes.xsd ${SCHEMA_DIR}/kolabformat-xcard.xsd ${SCHEMA_DIR}/xCard.xsd ${SCHEMA_DIR}/kolabformat.xsd ) set( SCHEMA_SOURCEFILES ${CMAKE_BINARY_DIR}/bindings/kolabformat.cxx ${CMAKE_BINARY_DIR}/bindings/xCard.cxx ${CMAKE_BINARY_DIR}/bindings/kolabformat-xcal.cxx ${CMAKE_BINARY_DIR}/bindings/kolabformat-xcard.cxx ${CMAKE_BINARY_DIR}/bindings/iCalendar-params.cxx ${CMAKE_BINARY_DIR}/bindings/iCalendar-props.cxx ${CMAKE_BINARY_DIR}/bindings/iCalendar-valtypes.cxx # bindings/iCalendar-link-extension.cxx # bindings/iCalendar-bw-extensions.cxx # bindings/iCalendar-ms-extensions.cxx ) #xsdcxx cxx-tree --generate-xml-schema --generate-serialization --custom-type date_time --hxx-epilogue '#include "bindings/customtypes/xml-schema-custom.hxx"' xml-schema.xsd # --generate-inline --extern-xml-schema xml-schema.xsd # --cxx-suffix .cpp --hxx-suffix .h add_custom_command(OUTPUT ${SCHEMA_SOURCEFILES} COMMAND ${XSDCXX} cxx-tree --generate-polymorphic --generate-serialization --namespace-map http://kolab.org=KolabXSD --root-element icalendar --root-element vcards --root-element note --root-element configuration --root-element file --output-dir ${CMAKE_BINARY_DIR}/bindings ${SCHEMAS} COMMENT "Generating XSD bindings" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} DEPENDS ${SCHEMAS} VERBATIM ) # Compile xsdbin if not found if (NOT XSDBIN_FOUND) add_executable(xsdbin compiled/xsdbin.cxx) target_link_libraries(xsdbin ${XERCES_C}) set(XSDBIN ${CMAKE_BINARY_DIR}/xsdbin) endif () # Compile Schemas add_custom_command(OUTPUT kolabformat-xcal-schema.cxx COMMAND ${XSDBIN} --verbose --array-name iCalendar_schema --output-dir ${CMAKE_BINARY_DIR} ${SCHEMAS} COMMENT "Compiling Kolab XSD schema" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} DEPENDS ${SCHEMAS} ${XSDBIN} VERBATIM ) set( SCHEMA_SOURCEFILES ${SCHEMA_SOURCEFILES} ${CMAKE_BINARY_DIR}/kolabformat-xcal-schema.cxx) # --------- SET_SOURCE_FILES_PROPERTIES(${SCHEMA_SOURCEFILES} PROPERTIES GENERATED 1) ADD_CUSTOM_TARGET(generate_bindings ALL DEPENDS ${SCHEMA_SOURCEFILES}) include_directories( ./ compiled src/containers ${CMAKE_CURRENT_BINARY_DIR} ${Boost_INCLUDE_DIRS} ${XSDCXX_INCLUDE_DIRS} ${XERCES_C_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ) add_subdirectory(src) if (BUILD_UTILS) add_subdirectory(utils) endif() if (BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() #Get the include directory relative to CMAKECONFIG_INSTALL_DIR file(RELATIVE_PATH REL_INCLUDE_DIR "${CMAKECONFIG_INSTALL_DIR}" "${INCLUDE_INSTALL_DIR}") #Assemble the full relative path. This will be used in the LibkolabxmlConfig.cmake, which will be installed in CMAKECONFIG_INSTALL_DIR set(CONF_INCLUDE_DIRS "\${Libkolabxml_CMAKE_DIR}/${REL_INCLUDE_DIR}") install(EXPORT LibkolabxmlExport DESTINATION ${CMAKECONFIG_INSTALL_DIR} FILE LibkolabxmlTargets.cmake ) configure_file(${Libkolabxml_MODULE_DIR}/LibkolabxmlConfig.cmake.in ${Libkolabxml_BINARY_DIR}/LibkolabxmlConfig.cmake @ONLY ) configure_file(${Libkolabxml_MODULE_DIR}/LibkolabxmlConfigVersion.cmake.in ${Libkolabxml_BINARY_DIR}/LibkolabxmlConfigVersion.cmake @ONLY ) # Install these two files into the same directory as the generated exports-file. install(FILES ${Libkolabxml_BINARY_DIR}/LibkolabxmlConfig.cmake ${Libkolabxml_BINARY_DIR}/LibkolabxmlConfigVersion.cmake DESTINATION ${CMAKECONFIG_INSTALL_DIR} )