root/trunk/CMakeLists.txt

Revision 766, 9.4 kB (checked in by bellmich, 1 week ago)

show OpenOBEX version (prepare for bug reports after release of OpenOBEX 1.4)

Line 
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 )
Note: See TracBrowser for help on using the browser.