- use sane defaults for those alien parameters so we dont force the developer
[platform/upstream/libzypp.git] / CMakeLists.txt
1 PROJECT(libzypp)
2
3 # Library
4 IF ( DEFINED LIB )
5   SET ( LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${LIB}" )
6 ELSE ( DEFINED  LIB )
7   IF (CMAKE_SIZEOF_VOID_P MATCHES "8")
8     SET( LIB_SUFFIX "64" )
9   ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
10   SET ( LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" )
11 ENDIF ( DEFINED  LIB )
12 MESSAGE(STATUS "Libraries will be installed in ${LIB_INSTALL_DIR}" )
13
14 # system configuration dir (etc)
15
16 IF( NOT DEFINED SYSCONFDIR )
17   IF ( ${CMAKE_INSTALL_PREFIX} STREQUAL "/usr" )
18     # if installing in usr, set sysconfg to etc
19     SET( SYSCONFDIR /etc )
20   ELSE ( ${CMAKE_INSTALL_PREFIX} STREQUAL "/usr" )
21     SET ( SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc" )
22   ENDIF ( ${CMAKE_INSTALL_PREFIX} STREQUAL "/usr" )
23 ENDIF( NOT DEFINED SYSCONFDIR )
24 MESSAGE(STATUS "Config files will be installed in ${SYSCONFDIR}" )
25
26 ####################################################################
27 # CONFIGURATION                                                    #
28 ####################################################################
29
30 # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
31 SET( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
32
33 INCLUDE( ${CMAKE_SOURCE_DIR}/VERSION.cmake )
34 MATH( EXPR LIBZYPP_CURRENT "${LIBZYPP_MAJOR} * 100 + ${LIBZYPP_MINOR}" )
35 MATH( EXPR LIBZYPP_AGE     "${LIBZYPP_MINOR} - ${LIBZYPP_COMPATMINOR}" )
36 # Libtool wanted current:patch:age
37 # But cmake is not libtool, it wants the verbatim suffix to libzypp.so
38 MATH( EXPR LIBZYPP_SO_FIRST  "${LIBZYPP_CURRENT}-${LIBZYPP_AGE}" )
39
40 SET( PACKAGE "libzypp" )
41 SET( VERSION "${LIBZYPP_MAJOR}.${LIBZYPP_MINOR}.${LIBZYPP_PATCH}" )
42
43 SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -Wall -Woverloaded-virtual" )
44 SET( CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   -g -O3 -Wall" )
45 ADD_DEFINITIONS( -D_FILE_OFFSET_BITS=64 )
46 ADD_DEFINITIONS( -DVERSION=\\\"${VERSION}\\\" )
47 SET( LIBZYPP_VERSION_INFO "${LIBZYPP_SO_FIRST}.${LIBZYPP_AGE}.${LIBZYPP_PATCH}" )
48 SET( LIBZYPP_SOVERSION_INFO "${LIBZYPP_SO_FIRST}" )
49
50 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Novell's package management core engine.")
51 SET(CPACK_PACKAGE_VENDOR "Novell Inc.")
52 #SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
53 #SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt")
54 SET(CPACK_PACKAGE_VERSION_MAJOR ${LIBZYPP_MAJOR})
55 SET(CPACK_PACKAGE_VERSION_MINOR ${LIBZYPP_MINOR})
56 SET(CPACK_PACKAGE_VERSION_PATCH ${LIBZYPP_PATCH})
57 SET( CPACK_GENERATOR "TBZ2")
58 SET( CPACK_SOURCE_GENERATOR "TBZ2")
59 SET( CPACK_SOURCE_PACKAGE_FILE_NAME "${PACKAGE}-${VERSION}" )
60
61 # The following components are regex's to match anywhere (unless anchored)
62 # in absolute path + filename to find files or directories to be excluded
63 # from source tarball.
64 SET (CPACK_SOURCE_IGNORE_FILES
65 #svn files
66 "\\\\.svn/"
67 "\\\\.cvsignore$"
68 # temporary files
69 "\\\\.swp$"
70 # backup files
71 "~$"
72 # eclipse files
73 "\\\\.cdtproject$"
74 "\\\\.cproject$"
75 "\\\\.project$"
76 "\\\\.settings/"
77 # others
78 "\\\\.#"
79 "/#"
80 "/build/"
81 "/_build/"
82 "/\\\\.git/"
83 # used before
84 "/CVS/"
85 "/\\\\.libs/"
86 "/\\\\.deps/"
87 "\\\\.o$"
88 "\\\\.lo$"
89 "\\\\.la$"
90 "Makefile\\\\.in$"
91 )
92
93 INCLUDE(CPack)
94
95 ####################################################################
96
97 SET( DOC_INSTALL_DIR
98    "${CMAKE_INSTALL_PREFIX}/share/doc/packages/${PACKAGE}"
99    CACHE PATH "The install dir for documentation (default prefix/share/doc/packages/${PACKAGE})"
100    FORCE
101 )
102
103 ####################################################################
104 # INCLUDES                                                         #
105 ####################################################################
106
107 #SET (CMAKE_INCLUDE_DIRECTORIES_BEFORE ON)
108 INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} SYSTEM )
109
110 ####################################################################
111
112
113 FIND_PACKAGE(Rpm REQUIRED)
114 IF ( NOT RPM_FOUND)
115   MESSAGE( FATAL_ERROR " rpm not found" )
116 ELSE ( NOT RPM_FOUND)
117   INCLUDE_DIRECTORIES(${RPM_INCLUDE_DIR})
118 ENDIF( NOT RPM_FOUND)
119
120 FIND_PACKAGE(Boost REQUIRED)
121 IF (Boost_FOUND)
122   MESSAGE( STATUS "boost found: includes in ${Boost_INCLUDE_DIRS}, library in ${Boost_LIBRARY_DIRS}")
123   INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
124   LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
125 ENDIF(Boost_FOUND)
126
127 FIND_PACKAGE(Gettext REQUIRED)
128 IF (GETTEXT_FOUND)
129   MESSAGE(STATUS "Found Gettext: ${GETTEXT_SOURCE}")
130   INCLUDE_DIRECTORIES(${GETTEXT_INCLUDE_DIR})
131 ELSE (GETTEXT_FOUND)
132   MESSAGE( FATAL_ERROR "Gettext not found" )
133 ENDIF (GETTEXT_FOUND)
134
135 FIND_PACKAGE(Hal REQUIRED)
136 IF ( NOT HAL_FOUND)
137   MESSAGE( FATAL_ERROR " Hal not found" )
138 ELSE ( NOT HAL_FOUND)
139   INCLUDE_DIRECTORIES(${HAL_INCLUDE_DIR})
140 # hal/libhal-storage.h is broken grrr
141   INCLUDE_DIRECTORIES(${HAL_INCLUDE_DIR}/hal)
142 ENDIF( NOT HAL_FOUND)
143
144 FIND_PACKAGE(Dbus REQUIRED)
145 IF ( NOT DBUS_FOUND)
146   MESSAGE( FATAL_ERROR " dbus not found" )
147 ELSE ( NOT DBUS_FOUND)
148   INCLUDE_DIRECTORIES(${DBUS_INCLUDE_DIR})
149   INCLUDE_DIRECTORIES(${DBUS_ARCH_INCLUDE_DIR})
150 ENDIF( NOT DBUS_FOUND)
151
152 FIND_PACKAGE(Glib REQUIRED)
153 IF (GLIB_FOUND)
154   MESSAGE( STATUS "glib found: includes in ${GLIB_INCLUDE_DIR}, library in ${GLIB_LIBRARY}")
155   INCLUDE_DIRECTORIES(${GLIB_INCLUDE_DIR})
156   INCLUDE_DIRECTORIES(${GLIB_CONFIG_INCLUDE_DIR})
157 ELSE(GLIB_FOUND)
158   MESSAGE( FATAL_ERROR "glib not found" )
159 ENDIF(GLIB_FOUND)
160
161 #IF (DBUS_GLIB_FOUND)
162 #  MESSAGE( STATUS "dbus-glib found" )
163 #  INCLUDE_DIRECTORIES(${DBUS_GLIB_INCLUDE_DIR})
164 #  LINK_DIRECTORIES(${DBUS_GLIB_LINK_DIR})
165 #ELSE(DBUS_GLIB_FOUND)
166 #  MESSAGE( ERROR "dbus-glib not found" )
167 #ENDIF(DBUS_GLIB_FOUND)
168
169 FIND_PACKAGE(Curl REQUIRED)
170 IF ( NOT CURL_FOUND)
171   MESSAGE( FATAL_ERROR " curl not found" )
172 ELSE ( NOT CURL_FOUND)
173   INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
174 ENDIF( NOT CURL_FOUND)
175
176 FIND_PACKAGE(Libxml REQUIRED)
177 IF ( NOT LIBXML_FOUND)
178   MESSAGE( FATAL_ERROR " libxml not found" )
179 ELSE ( NOT LIBXML_FOUND)
180   INCLUDE_DIRECTORIES(${LIBXML_INCLUDE_DIR})
181 ENDIF( NOT LIBXML_FOUND)
182
183 FIND_PACKAGE(Sqlite REQUIRED)
184
185 FIND_PACKAGE(ZLIB REQUIRED)
186 IF ( NOT ZLIB_FOUND)
187   MESSAGE( FATAL_ERROR " zlib not found" )
188 ELSE ( NOT ZLIB_FOUND)
189   INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
190 ENDIF( NOT ZLIB_FOUND)
191
192 FIND_PROGRAM( DOXYGEN doxygen )
193 IF ( NOT DOXYGEN )
194   MESSAGE( FATAL_ERROR "doxygen not found: install doxygen to build the documentation." )
195 ELSE ( NOT DOXYGEN )
196   MESSAGE( STATUS "doxygen found: ${DOXYGEN}" )
197 ENDIF ( NOT DOXYGEN )
198
199 MESSAGE(STATUS "soname: ${LIBZYPP_VERSION_INFO}")
200 MESSAGE(STATUS "version: ${VERSION}")
201
202 ####################################################################
203 # RPM SPEC                                                         #
204 ####################################################################
205
206 MACRO(SPECFILE)
207   MESSAGE(STATUS "Writing spec file...")
208   CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/libzypp.spec.cmake ${CMAKE_BINARY_DIR}/package/libzypp.spec @ONLY)
209   MESSAGE(STATUS "I hate you rpm-lint...!!!")
210   CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/package/libzypp-rpmlint.cmake ${CMAKE_BINARY_DIR}/package/libzypp-rpmlintrc @ONLY)
211 ENDMACRO(SPECFILE)
212
213 SPECFILE()
214
215 MESSAGE(STATUS "Writing pkg-config file...")
216 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/libzypp.pc.cmake ${CMAKE_BINARY_DIR}/libzypp.pc @ONLY)
217 INSTALL( FILES ${CMAKE_BINARY_DIR}/libzypp.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig )
218
219 MESSAGE(STATUS "FindZypp.cmake will be installed in ${CMAKE_INSTALL_PREFIX}/share/cmake/Modules")
220 INSTALL( FILES ${CMAKE_SOURCE_DIR}/cmake/modules/FindZypp.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/share/cmake/Modules )
221
222 MESSAGE(STATUS "zypp.conf will be installed in ${SYSCONFDIR}/zypp")
223 INSTALL( FILES ${CMAKE_SOURCE_DIR}/zypp.conf DESTINATION ${SYSCONFDIR}/zypp )
224
225 ####################################################################
226 # SUBDIRECTORIES                                                   #
227 ####################################################################
228
229 ADD_SUBDIRECTORY( zypp )
230 #ADD_SUBDIRECTORY( zypp2 )
231 # do not build devel by default
232 ADD_SUBDIRECTORY( devel EXCLUDE_FROM_ALL )
233 ADD_SUBDIRECTORY( tools )
234 #ADD_SUBDIRECTORY( examples )
235 ADD_SUBDIRECTORY( po EXCLUDE_FROM_ALL )
236 ADD_SUBDIRECTORY( doc EXCLUDE_FROM_ALL )
237 ADD_SUBDIRECTORY( tests EXCLUDE_FROM_ALL )
238
239 ####################################################################
240 # OTHERS                                                           #
241 ####################################################################
242
243 #configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h )
244 #yumschemadir=${zyppdir}/schema/yum
245 #xmlstoreschemadir=${zyppdir}/schema/xmlstore
246
247 ####################################################################
248 # INSTALL                                                          #
249 ####################################################################
250
251 #INSTALL_FILES(  FILES  libzypp.pc )
252
253 ADD_CUSTOM_TARGET( svncheck
254   COMMAND cd $(CMAKE_SOURCE_DIR) && ! LC_ALL=C svn status --show-updates --quiet | grep -v '^Status against revision'
255 )
256
257 SET( AUTOBUILD_COMMAND
258   COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/package/*.tar.bz2
259   COMMAND ${CMAKE_MAKE_PROGRAM} package_source
260   COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.bz2 ${CMAKE_BINARY_DIR}/package
261   COMMAND ${CMAKE_COMMAND} -E remove ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.bz2
262   COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/package/${PACKAGE}.changes" "${CMAKE_BINARY_DIR}/package/${PACKAGE}.changes"
263 )
264
265 ADD_CUSTOM_TARGET( srcpackage_local
266   ${AUTOBUILD_COMMAND}
267 )
268
269 ADD_CUSTOM_TARGET( srcpackage
270   COMMAND ${CMAKE_MAKE_PROGRAM} svncheck
271   ${AUTOBUILD_COMMAND}
272 )