PROJECT( libsyncml C ) SET( LIBSYNCML_VERSION_MAJOR "0" ) SET( LIBSYNCML_VERSION_MINOR "5" ) SET( LIBSYNCML_VERSION_PATCH "100" ) SET( LIBSYNCML_VERSION "${LIBSYNCML_VERSION_MAJOR}.${LIBSYNCML_VERSION_MINOR}.${LIBSYNCML_VERSION_PATCH}" ) # The most recent interface number that this library implements. #UPDATE: If any interface have been added or changed since #UPDATE: the last update increment CURRENT. #UPDATE: If any interface have been removed since the last update #UPDATE: then set CURRENT to AGE - CURRECT + 1. SET( LIBSYNCML_LIBVERSION_CURRENT 3 ) # The implementation number of the CURRENT interface. # UPDATE: Increment only if the library code has changed at all, since # UPDATE: last release. # UPDATE: Set REVISION to 0 if any interface have been added, removed or # UPDATE: changed since the last update. SET( LIBSYNCML_LIBVERSION_REVISION 0 ) # The difference between the newest and the oldest interfaces. # UPDATE: If any interface have been added since the last public # UPDATE: release, then increment. # UPDATE: If any interface have been removed since the last release # UPDATE: reset to 0. SET( LIBSYNCML_LIBVERSION_AGE 0 ) # The range of implemention CURRENT - AGE is the SOVERSION MATH( EXPR LIBSYNCML_LIBVERSION_SOVERSION "${LIBSYNCML_LIBVERSION_CURRENT} - ${LIBSYNCML_LIBVERSION_AGE}" ) SET( LIBSYNCML_LIBVERSION_VERSION "${LIBSYNCML_LIBVERSION_SOVERSION}.${LIBSYNCML_LIBVERSION_AGE}.${LIBSYNCML_LIBVERSION_REVISION}" ) CMAKE_MINIMUM_REQUIRED(VERSION 2.4) # TODO: Move to external file/macro SET( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ) SET( LIB_SUFFIX "" CACHE STRING "The library directory suffix. 32bit empty string, 64 for 64bit." ) SET( LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE INTERNAL "libary location" ) SET( LIBDATA_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE PATH "library data location" ) SET( BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE INTERNAL "binary location" ) SET( SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share" CACHE INTERNAL "data location" ) SET( INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE INTERNAL "headers location" ) SET( LIBEXEC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/libexec" CACHE INTERNAL "libexec location" ) #MESSAGE(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}" ) SET( LIBSYNCML_LIBRARIES_DIR "${LIB_INSTALL_DIR}" CACHE PATH "Syncml library location" ) SET( LIBSYNCML_INCLUDE_DIR "${INCLUDE_INSTALL_DIR}/libsyncml-${LIBSYNCML_LIBVERSION_SOVERSION}.${LIBSYNCML_LIBVERSION_AGE}" CACHE PATH "Syncml headers location" ) SET( LIBSYNCML_BIN_DIR "${BIN_INSTALL_DIR}" CACHE PATH "Syncml binaries location" ) SET( LIBSYNCML_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share" CACHE PATH "Syncml data location" ) SET( LIBSYNCML_EXEC_INSTALL_DIR "${BIN_INSTALL_DIR}" CACHE PATH "Syncml binary location" ) # find header files and type size INCLUDE( CheckTypeSize ) INCLUDE( CheckIncludeFiles ) INCLUDE( CheckFunctionExists ) INCLUDE( Documentation ) INCLUDE( AddDocumentation ) CHECK_INCLUDE_FILES( dlfcn.h HAVE_DLFCN_H ) CHECK_INCLUDE_FILES( inttypes.h HAVE_INTTYPES_H ) CHECK_INCLUDE_FILES( memory.h HAVE_MEMORY_H ) CHECK_INCLUDE_FILES( stdint.h HAVE_STDINT_H ) CHECK_INCLUDE_FILES( stdlib.h HAVE_STDLIB_H ) CHECK_INCLUDE_FILES( strings.h HAVE_STRINGS_H ) CHECK_INCLUDE_FILES( string.h HAVE_STRING_H ) CHECK_INCLUDE_FILES( sys/stat.h HAVE_SYS_STAT_H ) CHECK_INCLUDE_FILES( sys/types.h HAVE_SYS_TYPES_H ) CHECK_INCLUDE_FILES( unistd.h HAVE_UNISTD_H ) CHECK_TYPE_SIZE( uint16_t UINT16_T ) CHECK_TYPE_SIZE( uint32_t UINT32_T ) CHECK_TYPE_SIZE( uint8_t UINT8_T ) # ensure out od source build INCLUDE( MacroEnsureOutOfSourceBuild ) MACRO_ENSURE_OUT_OF_SOURCE_BUILD("${CMAKE_PROJECT_NAME} doesn't allow to build within the source directory. Please, create a seperate build directory and run 'cmake ${PROJECT_SOURCE_DIR} [options]'!") # find requirements SET ( GLIB2_MIN_VERSION "2.12" ) SET ( OPENOBEX_MIN_VERSION "1.1" ) # do not set LIBSOUP2_MIN_VERSION # if you set LIBSOUP2_MIN_VERSION then you cannot support 2.2 and 2.4 SET ( LIBSOUP22_MIN_VERSION "2.2.91" ) SET ( LIBSOUP24_MIN_VERSION "2.3.0.1" ) SET ( LIBWBXML2_MIN_VERSION "0.10.0" ) SET ( CHECK_MIN_VERSION "0.9.7" ) #SET ( BLUEZ_MIN_VERSION "3.19" ) ## avoid caching of CHECK_FOUND without CHECK_MIN_VERSION SET ( CHECK_FOUND OFF ) FIND_PACKAGE( GLIB2 REQUIRED ) FIND_PACKAGE( GTHREAD2 REQUIRED ) FIND_PACKAGE( GOBJECT2 REQUIRED ) FIND_PACKAGE( LibXml2 REQUIRED ) FIND_PACKAGE( OpenObex ) FIND_PACKAGE( LibSoup2 ) FIND_PACKAGE( LibWbxml2 ) FIND_PACKAGE( BlueZ ) FIND_PACKAGE( Check ) IF ( NOT GLIB2_FOUND ) SET ( FATAL_ERROR_GLIB2 "Cannot find correct glib version ${GLIB2_MIN_VERSION}." ) SET ( ENABLE_GLIB2_GREGEX ON ) ELSE ( NOT GLIB2_FOUND ) SET( CMAKE_REQUIRED_INCLUDES ${GLIB2_INCLUDE_DIRS} ) SET( CMAKE_REQUIRED_LIBRARIES ${GLIB2_LIBRARIES} ) CHECK_FUNCTION_EXISTS( g_regex_new GLIB2_HAVE_GREGEX ) IF ( GLIB2_HAVE_GREGEX ) SET ( ENABLE_GLIB2_GREGEX ON ) ELSE ( GLIB2_HAVE_GREGEX ) SET ( ENABLE_GLIB2_GREGEX OFF ) ENDIF ( GLIB2_HAVE_GREGEX ) ENDIF ( NOT GLIB2_FOUND ) IF(LIBWBXML2_FOUND) SET( ENABLE_WBXML ON) ENDIF(LIBWBXML2_FOUND) IF(LIBSOUP2_FOUND) OPTION( ENABLE_HTTP "enable http transports" ON ) IF (LIBSOUP24_FOUND) OPTION( HAVE_LIBSOUP24 "building with libsoup 2.4" ON ) OPTION( HAVE_LIBSOUP22 "building with libsoup 2.2" OFF ) OPTION( HAVE_LIBSOUP22_SOLARIS "enable Solaris libsoup workarounds" OFF ) ELSE (LIBSOUP24_FOUND) OPTION( HAVE_LIBSOUP24 "building with libsoup 2.4" OFF ) OPTION( HAVE_LIBSOUP22 "building with libsoup 2.2" ON ) IF( CMAKE_SYSTEM_NAME STREQUAL "SunOS" ) OPTION( HAVE_LIBSOUP22_SOLARIS "enable Solaris libsoup workarounds" ON ) ELSE( CMAKE_SYSTEM_NAME STREQUAL "SunOS" ) OPTION( HAVE_LIBSOUP22_SOLARIS "enable Solaris libsoup workarounds" OFF ) ENDIF( CMAKE_SYSTEM_NAME STREQUAL "SunOS" ) ENDIF (LIBSOUP24_FOUND) ELSE(LIBSOUP2_FOUND) OPTION( ENABLE_HTTP "enable http transports" OFF ) OPTION( HAVE_LIBSOUP22_SOLARIS "enable Solaris libsoup workarounds" OFF ) ENDIF(LIBSOUP2_FOUND) IF(OPENOBEX_FOUND) OPTION( ENABLE_OBEX "enable obex transports" ON ) IF(BLUEZ_FOUND) OPTION( ENABLE_BLUETOOTH "enable obex over bluetooth transports" ON ) SET( CMAKE_REQUIRED_FLAGS ${BLUEZ_CFLAGS} ) SET( CMAKE_REQUIRED_INCLUDES ${BLUEZ_INCLUDE_DIRS} ) SET( CMAKE_REQUIRED_LIBRARIES ${BLUEZ_LIBRARIES} ) CHECK_FUNCTION_EXISTS( sdp_service_search_attr_req BLUETOOTH_SDPLIB ) IF( BLUETOOTH_SDPLIB ) OPTION( ENABLE_BLUETOOTH_SDPLIB "enable bluetooth channel discovery" ON ) ENDIF( BLUETOOTH_SDPLIB ) ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") OPTION( ENABLE_BLUETOOTH "enable obex over bluetooth transports" ON ) LINK_LIBRARIES(bluetooth sdp) ELSE(BLUEZ_FOUND) OPTION( ENABLE_BLUETOOTH "enable obex over bluetooth transports" OFF ) ENDIF(BLUEZ_FOUND) IF( OPENOBEX_HAVE_TCPOBEX ) OPTION( ENABLE_OPENOBEX_TCP "enable obex over bluetooth transports" ON ) ELSE( OPENOBEX_HAVE_TCPOBEX ) OPTION( ENABLE_OPENOBEX_TCP "enable OBEX transport via TCP (requires OpenOBEX 1.3+SVN)" OFF ) ENDIF( OPENOBEX_HAVE_TCPOBEX ) ELSE(OPENOBEX_FOUND) OPTION( ENABLE_OBEX "enable obex transports" OFF ) OPTION( ENABLE_OPENOBEX_TCP "enable OBEX transport via TCP (requires OpenOBEX 1.3+SVN)" OFF ) OPTION( ENABLE_BLUETOOTH "enable obex over bluetooth transports" OFF ) OPTION( ENABLE_BLUETOOTH_SDPLIB "enable bluetooth channel discovery" OFF ) ENDIF(OPENOBEX_FOUND) IF( NOT LIBSOUP2_FOUND AND NOT OPENOBEX_FOUND ) SET ( FATAL_ERROR_TRANSPORT "Could not find libsoup2 nor OpenObex! Please install at least one of these libraries (e.g. libsoup2-dev package)." ) ENDIF( NOT LIBSOUP2_FOUND AND NOT OPENOBEX_FOUND ) OPTION( ENABLE_UNIT_TEST "enable unit tests" OFF ) OPTION( THREAD_SAFE_CHECK "check is thread safe" OFF ) IF(CHECK_FOUND) SET( THREAD_SAFE_CHECK ON ) ELSE(CHECK_FOUND) ## perhaps to small version ## these versions are not thread safe SET ( CHECK_MIN_VERSION "" ) FIND_PACKAGE( Check ) ENDIF(CHECK_FOUND) IF(CHECK_FOUND) SET( ENABLE_UNIT_TEST ON ) SET( MEMORYCHECK_COMMAND_OPTIONS "${MEMORYCHECK_COMMAND_OPTIONS} --num-callers=50" ) SET( MEMORYCHECK_SUPPRESSIONS_FILE "${CMAKE_SOURCE_DIR}/tests/valgrind.supp" CACHE FILEPATH "valgrind.supp" ) INCLUDE( Testing ) ENDIF(CHECK_FOUND) IF(MEMORYCHECK_COMMAND) SET( MEMORYCHECK_AVAILABLE ON ) ELSE(MEMORYCHECK_COMMAND) SET( MEMORYCHECK_AVAILABLE OFF ) ENDIF(MEMORYCHECK_COMMAND) IF(MINGW) SET( WINSOCK_LIBRARIES "-lwsock32" ) ELSE(MINGW) SET( WINSOCK_LIBRARIES "" ) ENDIF(MINGW) OPTION( ENABLE_TOOLS "enable building tools" ON ) OPTION( ENABLE_TRACE "enable tracing" ON ) SET( PACKAGE "libsyncml" ) SET( PACKAGE_BUGREPORT " " ) SET( PACKAGE_NAME "libsyncml" ) SET( PACKAGE_TARNAME "${PACKAGE_NAME}" ) SET( PACKAGE_STRING "${PACKAGE_NAME} ${LIBSYNCML_VERSION}" ) SET( PACKAGE_VERSION "${LIBSYNCML_VERSION}" ) SET( PACKAGE_SONAME "${LIBSYNCML_LIBVERSION_VERSION}" ) SET( VERSION "${LIBSYNCML_VERSION}" ) CONFIGURE_FILE( "config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h") CONFIGURE_FILE( "libsyncml.pc.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/libsyncml-${LIBSYNCML_LIBVERSION_SOVERSION}.${LIBSYNCML_LIBVERSION_AGE}.pc" @ONLY) # add uninstall target CONFIGURE_FILE( "${CMAKE_SOURCE_DIR}/cmake/modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") ADD_SUBDIRECTORY( libsyncml ) ADD_SUBDIRECTORY( tools ) ADD_SUBDIRECTORY( tests ) MARK_AS_ADVANCED( CLEAR BUILD_DOCUMENTATION ) IF ( BUILD_DOCUMENTATION ) IF ( DOXYGEN_DOT_EXECUTABLE ) SET( HAVE_DOT "YES" ) ENDIF ( DOXYGEN_DOT_EXECUTABLE ) # configure tools documentation CONFIGURE_FILE( "tools/Doxyfile.in" "${CMAKE_CURRENT_BINARY_DIR}/tools/Doxyfile" @ONLY) ADD_CUSTOM_TARGET( DoxygenDocTools ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/tools/Doxyfile ) # configure library documentation CONFIGURE_FILE( "libsyncml/Doxyfile.in" "${CMAKE_CURRENT_BINARY_DIR}/libsyncml/Doxyfile" @ONLY) ADD_CUSTOM_TARGET( DoxygenDocLibrary ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/libsyncml/Doxyfile ) # configure general doxygen target CONFIGURE_FILE( "misc/doxygen.css" "${CMAKE_CURRENT_BINARY_DIR}/misc/doxygen.css" @ONLY) # WARNING: Do not use DEPENDS of ADD_CUSTOM_TARGET here ADD_CUSTOM_TARGET( DoxygenDoc ) ADD_DEPENDENCIES( DoxygenDoc DoxygenDocLibrary DoxygenDocTools ) # install documentation ADD_DOCUMENTATION( HTML DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/docs/html/" ) ADD_DOCUMENTATION( MAN DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/docs/man/" ) ADD_DEPENDENCIES( syncml DoxygenDoc ) ENDIF ( BUILD_DOCUMENTATION ) # todo: add requires in pc file INSTALL( FILES "${CMAKE_CURRENT_BINARY_DIR}/libsyncml-${LIBSYNCML_LIBVERSION_SOVERSION}.${LIBSYNCML_LIBVERSION_AGE}.pc" DESTINATION "${LIBDATA_INSTALL_DIR}/pkgconfig/" ) # status output INCLUDE( ShowStatus ) MESSAGE( STATUS "==================================================" ) MESSAGE( STATUS "Operating System ${CMAKE_SYSTEM_NAME}" ) IF( CMAKE_SYSTEM_NAME STREQUAL "SunOS" ) SHOW_STATUS( HAVE_LIBSOUP22_SOLARIS "libsoup 2.2 Solaris workaround" ) ENDIF( CMAKE_SYSTEM_NAME STREQUAL "SunOS" ) MESSAGE( STATUS "==================================================" ) SHOW_STATUS( ENABLE_TOOLS "building tools\t\t" ) SHOW_STATUS( ENABLE_TRACE "tracing tools\t\t" ) SHOW_STATUS( ENABLE_UNIT_TEST "unit tests\t\t\t" ) SHOW_STATUS( THREAD_SAFE_CHECK "check is thread safe\t\t" CHECK_VERSION ) SHOW_STATUS( MEMORYCHECK_AVAILABLE "memory debugger\t\t" ) SHOW_STATUS( ENABLE_WBXML "WAP Binary XML\t\t" LIBWBXML2_VERSION ) SHOW_STATUS( ENABLE_HTTP "http transports\t\t" LIBSOUP2_VERSION ) SHOW_STATUS( ENABLE_OBEX "obex transports\t\t" OPENOBEX_VERSION ) SHOW_STATUS( ENABLE_BLUETOOTH "obex over bluetooth transports" BLUEZ_VERSION ) SHOW_STATUS( ENABLE_BLUETOOTH_SDPLIB "bluetooth channel discovery\t" ) SHOW_STATUS( ENABLE_OPENOBEX_TCP "obex over tcp transports\t" ) SHOW_STATUS( ENABLE_GLIB2_GREGEX "glib2 GRegex support\t\t" GLIB2_VERSION ) SHOW_STATUS( BUILD_DOCUMENTATION "documentation\t\t" ) # fatal error detection IF ( FATAL_ERROR_GLIB2 OR FATAL_ERROR_TRANSPORT ) MESSAGE( STATUS "==================================================" ) MESSAGE( STATUS "FATAL ERROR(S) DETECTED ... DETAILS FOLLOW:" ) MESSAGE( STATUS "==================================================" ) IF ( FATAL_ERROR_GLIB2 ) MESSAGE( STATUS "${FATAL_ERROR_GLIB2}" ) ENDIF ( FATAL_ERROR_GLIB2 ) IF ( FATAL_ERROR_TRANSPORT ) MESSAGE( STATUS "${FATAL_ERROR_TRANSPORT}" ) ENDIF ( FATAL_ERROR_TRANSPORT ) MESSAGE( STATUS "==================================================" ) ENDIF ( FATAL_ERROR_GLIB2 OR FATAL_ERROR_TRANSPORT ) ### CPack ######################################## IF( RELEASE_CANDIDATE ) SET( LIBSYNCML_VERSION "${LIBSYNCML_VERSION}-RC${RELEASE_CANDIDATE}" ) ENDIF( RELEASE_CANDIDATE ) SET( CPACK_GENERATOR "TGZ;TBZ2" ) # This line is need for a CMake (Version 2.4.7) Bug - Fixed in CVS SET( CPACK_SOURCE_GENERATOR "TGZ;TBZ2") SET( CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${LIBSYNCML_VERSION}" ) SET( CPACK_SET_DESTDIR ON ) INCLUDE( CPack )