| 1 |
PROJECT( libsyncml C ) |
|---|
| 2 |
|
|---|
| 3 |
SET( LIBSYNCML_VERSION_MAJOR "0" ) |
|---|
| 4 |
SET( LIBSYNCML_VERSION_MINOR "5" ) |
|---|
| 5 |
SET( LIBSYNCML_VERSION_PATCH "0" ) |
|---|
| 6 |
SET( LIBSYNCML_VERSION "${LIBSYNCML_VERSION_MAJOR}.${LIBSYNCML_VERSION_MINOR}.${LIBSYNCML_VERSION_PATCH}" ) |
|---|
| 7 |
|
|---|
| 8 |
# The most recent interface number that this library implements. |
|---|
| 9 |
#UPDATE: If any interface have been added, removed or changed since |
|---|
| 10 |
#UPDATE: the last update increment CURRENT. |
|---|
| 11 |
SET( LIBSYNCML_LIBVERSION_CURRENT 3 ) |
|---|
| 12 |
|
|---|
| 13 |
# The implementation number of the CURRENT interface. |
|---|
| 14 |
# UPDATE: Increment only if the library code has changed at all, since |
|---|
| 15 |
# UPDATE: last release. |
|---|
| 16 |
# UPDATE: Set REVISION to 0 if any interface have been added, removed or |
|---|
| 17 |
# UPDATE: changed since the last update. |
|---|
| 18 |
SET( LIBSYNCML_LIBVERSION_REVISION 0 ) |
|---|
| 19 |
|
|---|
| 20 |
# The difference between the newest and the oldest interfaces. |
|---|
| 21 |
# UPDATE: If any interface have been added since the last public |
|---|
| 22 |
# UPDATE: release, then increment. |
|---|
| 23 |
# UPDATE: If any interface have been removed since the last release |
|---|
| 24 |
# UPDATE: reset to 0. |
|---|
| 25 |
SET( LIBSYNCML_LIBVERSION_AGE 1 ) |
|---|
| 26 |
|
|---|
| 27 |
# The range of implemention CURRENT - AGE is the SOVERSION |
|---|
| 28 |
MATH( EXPR LIBSYNCML_LIBVERSION_SOVERSION "${LIBSYNCML_LIBVERSION_CURRENT} - ${LIBSYNCML_LIBVERSION_AGE}" ) |
|---|
| 29 |
|
|---|
| 30 |
SET( LIBSYNCML_LIBVERSION_VERSION "${LIBSYNCML_LIBVERSION_SOVERSION}.${LIBSYNCML_LIBVERSION_AGE}.${LIBSYNCML_LIBVERSION_REVISION}" ) |
|---|
| 31 |
|
|---|
| 32 |
CMAKE_MINIMUM_REQUIRED(VERSION 2.4) |
|---|
| 33 |
|
|---|
| 34 |
# TODO: Move to external file/macro |
|---|
| 35 |
SET( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ) |
|---|
| 36 |
|
|---|
| 37 |
SET( LIB_SUFFIX "" CACHE STRING "The library directory suffix. 32bit empty string, 64 for 64bit." ) |
|---|
| 38 |
SET( LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE INTERNAL "libary location" ) |
|---|
| 39 |
SET( BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE INTERNAL "binary location" ) |
|---|
| 40 |
SET( SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share" CACHE INTERNAL "data location" ) |
|---|
| 41 |
SET( INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE INTERNAL "headers location" ) |
|---|
| 42 |
SET( LIBEXEC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/libexec" CACHE INTERNAL "libexec location" ) |
|---|
| 43 |
|
|---|
| 44 |
#MESSAGE(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}" ) |
|---|
| 45 |
|
|---|
| 46 |
SET( LIBSYNCML_LIBRARIES_DIR "${LIB_INSTALL_DIR}" CACHE PATH "Syncml library location" ) |
|---|
| 47 |
SET( LIBSYNCML_INCLUDE_DIR "${INCLUDE_INSTALL_DIR}/libsyncml-1.0" CACHE PATH "Syncml headers location" ) |
|---|
| 48 |
SET( LIBSYNCML_BIN_DIR "${BIN_INSTALL_DIR}" CACHE PATH "Syncml binaries location" ) |
|---|
| 49 |
SET( LIBSYNCML_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share" CACHE PATH "Syncml data location" ) |
|---|
| 50 |
SET( LIBSYNCML_EXEC_INSTALL_DIR "${BIN_INSTALL_DIR}" CACHE PATH "Syncml binary location" ) |
|---|
| 51 |
|
|---|
| 52 |
# find header files and type size |
|---|
| 53 |
INCLUDE( CheckTypeSize ) |
|---|
| 54 |
INCLUDE( CheckIncludeFiles ) |
|---|
| 55 |
INCLUDE( Documentation ) |
|---|
| 56 |
|
|---|
| 57 |
CHECK_INCLUDE_FILES( dlfcn.h HAVE_DLFCN_H ) |
|---|
| 58 |
CHECK_INCLUDE_FILES( inttypes.h HAVE_INTTYPES_H ) |
|---|
| 59 |
CHECK_INCLUDE_FILES( memory.h HAVE_MEMORY_H ) |
|---|
| 60 |
CHECK_INCLUDE_FILES( stdint.h HAVE_STDINT_H ) |
|---|
| 61 |
CHECK_INCLUDE_FILES( stdlib.h HAVE_STDLIB_H ) |
|---|
| 62 |
CHECK_INCLUDE_FILES( strings.h HAVE_STRINGS_H ) |
|---|
| 63 |
CHECK_INCLUDE_FILES( string.h HAVE_STRING_H ) |
|---|
| 64 |
CHECK_INCLUDE_FILES( sys/stat.h HAVE_SYS_STAT_H ) |
|---|
| 65 |
CHECK_INCLUDE_FILES( sys/types.h HAVE_SYS_TYPES_H ) |
|---|
| 66 |
CHECK_INCLUDE_FILES( unistd.h HAVE_UNISTD_H ) |
|---|
| 67 |
|
|---|
| 68 |
CHECK_TYPE_SIZE( uint16_t UINT16_T ) |
|---|
| 69 |
CHECK_TYPE_SIZE( uint32_t UINT32_T ) |
|---|
| 70 |
CHECK_TYPE_SIZE( uint8_t UINT8_T ) |
|---|
| 71 |
|
|---|
| 72 |
# ensure out od source build |
|---|
| 73 |
INCLUDE( MacroEnsureOutOfSourceBuild ) |
|---|
| 74 |
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]'!") |
|---|
| 75 |
|
|---|
| 76 |
# find requirements |
|---|
| 77 |
SET ( GLIB2_MIN_VERSION "2.12" ) |
|---|
| 78 |
SET ( OPENOBEX_MIN_VERSION "1.1" ) |
|---|
| 79 |
# do not set LIBSOUP2_MIN_VERSION |
|---|
| 80 |
# if you set LIBSOUP2_MIN_VERSION then you cannot support 2.2 and 2.4 |
|---|
| 81 |
SET ( LIBSOUP22_MIN_VERSION "2.2.91" ) |
|---|
| 82 |
SET ( LIBSOUP24_MIN_VERSION "2.3.0.1" ) |
|---|
| 83 |
#SET ( LIBWBXML2_MIN_VERSION "0.9.0" ) |
|---|
| 84 |
#SET ( BLUEZ_MIN_VERSION "3.19" ) |
|---|
| 85 |
|
|---|
| 86 |
FIND_PACKAGE( GLIB2 REQUIRED ) |
|---|
| 87 |
FIND_PACKAGE( LibXml2 REQUIRED ) |
|---|
| 88 |
FIND_PACKAGE( OpenObex ) |
|---|
| 89 |
FIND_PACKAGE( LibSoup2 ) |
|---|
| 90 |
FIND_PACKAGE( LibWbxml2 ) |
|---|
| 91 |
FIND_PACKAGE( BlueZ ) |
|---|
| 92 |
FIND_PACKAGE( Check ) |
|---|
| 93 |
|
|---|
| 94 |
IF ( NOT GLIB2_FOUND ) |
|---|
| 95 |
SET ( FATAL_ERROR_GLIB2 "Cannot find correct glib version ${GLIB2_MIN_VERSION}." ) |
|---|
| 96 |
ENDIF ( NOT GLIB2_FOUND ) |
|---|
| 97 |
|
|---|
| 98 |
IF(LIBWBXML2_FOUND) |
|---|
| 99 |
SET( ENABLE_WBXML ON) |
|---|
| 100 |
ENDIF(LIBWBXML2_FOUND) |
|---|
| 101 |
|
|---|
| 102 |
IF(LIBSOUP2_FOUND) |
|---|
| 103 |
OPTION( ENABLE_HTTP "enable http transports" ON ) |
|---|
| 104 |
IF (LIBSOUP24_FOUND) |
|---|
| 105 |
OPTION ( HAVE_LIBSOUP24 "building with libsoup 2.4" ON ) |
|---|
| 106 |
OPTION ( HAVE_LIBSOUP22 "building with libsoup 2.2" OFF ) |
|---|
| 107 |
ELSE (LIBSOUP24_FOUND) |
|---|
| 108 |
OPTION ( HAVE_LIBSOUP24 "building with libsoup 2.4" OFF ) |
|---|
| 109 |
OPTION ( HAVE_LIBSOUP22 "building with libsoup 2.2" ON ) |
|---|
| 110 |
ENDIF (LIBSOUP24_FOUND) |
|---|
| 111 |
ELSE(LIBSOUP2_FOUND) |
|---|
| 112 |
SET( ENABLE_HTTP OFF ) |
|---|
| 113 |
ENDIF(LIBSOUP2_FOUND) |
|---|
| 114 |
|
|---|
| 115 |
IF(OPENOBEX_FOUND) |
|---|
| 116 |
OPTION( ENABLE_OBEX "enable obex transports" ON ) |
|---|
| 117 |
IF(BLUEZ_FOUND) |
|---|
| 118 |
OPTION( ENABLE_BLUETOOTH "enable obex over bluetooth transports" ON ) |
|---|
| 119 |
ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") |
|---|
| 120 |
OPTION( ENABLE_BLUETOOTH "enable obex over bluetooth transports" ON ) |
|---|
| 121 |
LINK_LIBRARIES(bluetooth sdp) |
|---|
| 122 |
ELSE(BLUEZ_FOUND) |
|---|
| 123 |
SET( ENABLE_BLUETOOTH OFF ) |
|---|
| 124 |
ENDIF(BLUEZ_FOUND) |
|---|
| 125 |
# Enable unreleased OpenOBEX features |
|---|
| 126 |
# TODO: Remove this on the next OpenOBEX release and make it conditional on OpenOBEX version |
|---|
| 127 |
OPTION( ENABLE_OPENOBEX_TCP "enable OBEX transport via TCP (requires OpenOBEX 1.3+SVN" OFF ) |
|---|
| 128 |
ELSE(OPENOBEX_FOUND) |
|---|
| 129 |
SET( ENABLE_OBEX OFF ) |
|---|
| 130 |
OPTION( ENABLE_OPENOBEX_TCP "enable OBEX transport via TCP (requires OpenOBEX 1.3+SVN" OFF ) |
|---|
| 131 |
ENDIF(OPENOBEX_FOUND) |
|---|
| 132 |
|
|---|
| 133 |
IF( NOT LIBSOUP2_FOUND AND NOT OPENOBEX_FOUND ) |
|---|
| 134 |
SET ( FATAL_ERROR_TRANSPORT "Could not find libsoup2 nor OpenObex! Please install at least one of these libraries (e.g. libsoup2-dev package)." ) |
|---|
| 135 |
ENDIF( NOT LIBSOUP2_FOUND AND NOT OPENOBEX_FOUND ) |
|---|
| 136 |
|
|---|
| 137 |
IF(CHECK_FOUND) |
|---|
| 138 |
OPTION( ENABLE_UNIT_TEST "enable unit tests" ON ) |
|---|
| 139 |
INCLUDE( Testing ) |
|---|
| 140 |
ENDIF(CHECK_FOUND) |
|---|
| 141 |
|
|---|
| 142 |
OPTION( ENABLE_TOOLS "enable building tools" ON ) |
|---|
| 143 |
OPTION( ENABLE_TRACE "enable tracing" ON ) |
|---|
| 144 |
OPTION( ENABLE_BASE64_TEST "enable deprecated base64 tests" OFF ) |
|---|
| 145 |
|
|---|
| 146 |
SET( PACKAGE "libsyncml" ) |
|---|
| 147 |
SET( PACKAGE_BUGREPORT " " ) |
|---|
| 148 |
SET( PACKAGE_NAME "libsyncml" ) |
|---|
| 149 |
SET( PACKAGE_TARNAME "${PACKAGE_NAME}" ) |
|---|
| 150 |
SET( PACKAGE_STRING "${PACKAGE_NAME} ${LIBSYNCML_VERSION}" ) |
|---|
| 151 |
SET( PACKAGE_VERSION "${LIBSYNCML_VERSION}" ) |
|---|
| 152 |
SET( VERSION "${LIBSYNCML_VERSION}" ) |
|---|
| 153 |
|
|---|
| 154 |
CONFIGURE_FILE( "config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h") |
|---|
| 155 |
CONFIGURE_FILE( "libsyncml-1.0.pc.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/libsyncml-1.0.pc" @ONLY) |
|---|
| 156 |
|
|---|
| 157 |
# add uninstall target |
|---|
| 158 |
CONFIGURE_FILE( "${CMAKE_SOURCE_DIR}/cmake/modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) |
|---|
| 159 |
|
|---|
| 160 |
ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") |
|---|
| 161 |
|
|---|
| 162 |
ADD_SUBDIRECTORY( libsyncml ) |
|---|
| 163 |
ADD_SUBDIRECTORY( tools ) |
|---|
| 164 |
ADD_SUBDIRECTORY( tests ) |
|---|
| 165 |
|
|---|
| 166 |
MARK_AS_ADVANCED( CLEAR BUILD_DOCUMENTATION ) |
|---|
| 167 |
IF ( BUILD_DOCUMENTATION ) |
|---|
| 168 |
IF ( DOXYGEN_DOT_EXECUTABLE ) |
|---|
| 169 |
SET( HAVE_DOT "YES" ) |
|---|
| 170 |
ENDIF ( DOXYGEN_DOT_EXECUTABLE ) |
|---|
| 171 |
|
|---|
| 172 |
# configure tools documentation |
|---|
| 173 |
CONFIGURE_FILE( "tools/Doxyfile.in" "${CMAKE_CURRENT_BINARY_DIR}/tools/Doxyfile" @ONLY) |
|---|
| 174 |
ADD_CUSTOM_TARGET( DoxygenDocTools ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/tools/Doxyfile ) |
|---|
| 175 |
|
|---|
| 176 |
# configure library documentation |
|---|
| 177 |
CONFIGURE_FILE( "libsyncml/Doxyfile.in" "${CMAKE_CURRENT_BINARY_DIR}/libsyncml/Doxyfile" @ONLY) |
|---|
| 178 |
ADD_CUSTOM_TARGET( DoxygenDocLibrary ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/libsyncml/Doxyfile ) |
|---|
| 179 |
|
|---|
| 180 |
# configure general doxygen target |
|---|
| 181 |
CONFIGURE_FILE( "misc/doxygen.css" "${CMAKE_CURRENT_BINARY_DIR}/misc/doxygen.css" @ONLY) |
|---|
| 182 |
# WARNING: Do not use DEPENDS of ADD_CUSTOM_TARGET here |
|---|
| 183 |
ADD_CUSTOM_TARGET( DoxygenDoc ) |
|---|
| 184 |
ADD_DEPENDENCIES( DoxygenDoc DoxygenDocLibrary DoxygenDocTools ) |
|---|
| 185 |
ENDIF ( BUILD_DOCUMENTATION ) |
|---|
| 186 |
|
|---|
| 187 |
# todo: add requires in pc file |
|---|
| 188 |
INSTALL( FILES "${CMAKE_CURRENT_BINARY_DIR}/libsyncml-1.0.pc" DESTINATION "${LIB_INSTALL_DIR}/pkgconfig/" ) |
|---|
| 189 |
|
|---|
| 190 |
# status output |
|---|
| 191 |
INCLUDE( ShowStatus ) |
|---|
| 192 |
MESSAGE( STATUS "==================================================" ) |
|---|
| 193 |
SHOW_STATUS( ENABLE_TOOLS "building tools\t\t" ) |
|---|
| 194 |
SHOW_STATUS( ENABLE_TRACE "tracing tools\t\t" ) |
|---|
| 195 |
SHOW_STATUS( ENABLE_UNIT_TEST "unit tests\t\t\t" ) |
|---|
| 196 |
SHOW_STATUS( ENABLE_WBXML "WAP Binary XML\t\t" ) |
|---|
| 197 |
SHOW_STATUS( ENABLE_HTTP "http transports\t\t" LIBSOUP2_VERSION ) |
|---|
| 198 |
SHOW_STATUS( ENABLE_OBEX "obex transports\t\t" OPENOBEX_VERSION ) |
|---|
| 199 |
SHOW_STATUS( ENABLE_BLUETOOTH "obex over bluetooth transports" ) |
|---|
| 200 |
SHOW_STATUS( ENABLE_OPENOBEX_TCP "obex over tcp transports\t" ) |
|---|
| 201 |
SHOW_STATUS( ENABLE_BASE64_TEST "deprecated base64 tests\t" ) |
|---|
| 202 |
SHOW_STATUS( BUILD_DOCUMENTATION "documentation\t\t" ) |
|---|
| 203 |
|
|---|
| 204 |
# fatal error detection |
|---|
| 205 |
IF ( FATAL_ERROR_GLIB2 OR FATAL_ERROR_TRANSPORT ) |
|---|
| 206 |
MESSAGE( STATUS "==================================================" ) |
|---|
| 207 |
MESSAGE( STATUS "FATAL ERROR(S) DETECTED ... DETAILS FOLLOW:" ) |
|---|
| 208 |
MESSAGE( STATUS "==================================================" ) |
|---|
| 209 |
IF ( FATAL_ERROR_GLIB2 ) |
|---|
| 210 |
MESSAGE( STATUS "${FATAL_ERROR_GLIB2}" ) |
|---|
| 211 |
ENDIF ( FATAL_ERROR_GLIB2 ) |
|---|
| 212 |
IF ( FATAL_ERROR_TRANSPORT ) |
|---|
| 213 |
MESSAGE( STATUS "${FATAL_ERROR_TRANSPORT}" ) |
|---|
| 214 |
ENDIF ( FATAL_ERROR_TRANSPORT ) |
|---|
| 215 |
MESSAGE( STATUS "==================================================" ) |
|---|
| 216 |
ENDIF ( FATAL_ERROR_GLIB2 OR FATAL_ERROR_TRANSPORT ) |
|---|
| 217 |
|
|---|
| 218 |
### CPack ######################################## |
|---|
| 219 |
|
|---|
| 220 |
IF( RELEASE_CANDIDATE ) |
|---|
| 221 |
SET( LIBSYNCML_VERSION "${LIBSYNCML_VERSION}-RC${RELEASE_CANDIDATE}" ) |
|---|
| 222 |
ENDIF( RELEASE_CANDIDATE ) |
|---|
| 223 |
|
|---|
| 224 |
SET( CPACK_GENERATOR "TGZ;TBZ2" ) # This line is need for a CMake (Version 2.4.7) Bug - Fixed in CVS |
|---|
| 225 |
SET( CPACK_SOURCE_GENERATOR "TGZ;TBZ2") |
|---|
| 226 |
SET( CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${LIBSYNCML_VERSION}" ) |
|---|
| 227 |
SET( CPACK_SET_DESTDIR ON ) |
|---|
| 228 |
INCLUDE( CPack ) |
|---|