Make build of xml library part optional
[libi2ncommon] / CMakeLists.txt
1 # Project
2 project(libi2ncommon)
3
4 # Version settings
5 set(MAJOR_VERSION 2)
6 set(MINOR_VERSION 0)
7 set(VERSION 2.0)
8
9 SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
10
11 # CMake
12 if("${CMAKE_BUILD_TYPE}" STREQUAL "")
13    set(CMAKE_BUILD_TYPE     Debug)
14 endif("${CMAKE_BUILD_TYPE}" STREQUAL "")
15 set(CMAKE_COLOR_MAKEFILE ON)
16 cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
17
18 # Debug build
19 message("-- Build type: ${CMAKE_BUILD_TYPE}")
20 if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
21    add_definitions(-DDEBUG)
22 endif(${CMAKE_BUILD_TYPE} STREQUAL Debug)
23
24 # Set components
25 set(CPACK_COMPONENTS_ALL sharedlibs staticlibs headers)
26 set(CPACK_COMPONENT_SHAREDLIBS_DISPLAY_NAME "Shared libraries")
27 set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers")
28
29 set(CPACK_COMPONENT_SHAREDLIBS_DESCRIPTION
30 "Shared library for general use.")
31 set(CPACK_COMPONENT_HEADERS_DESCRIPTION
32 "C/C++ header files.")
33
34 set(CPACK_COMPONENT_SHAREDLIBS_GROUP "Development")
35 set(CPACK_COMPONENT_HEADERS_GROUP    "Development")
36
37 # Package information
38 set(CPACK_PACKAGE_VERSION              ${VERSION})
39 set(CPACK_PACKAGE_CONTACT              "Intra2net AG <libi2ncommon@developer.intra2net.com>")
40 set(CPACK_PACKAGE_DESCRIPTION          "libi2ncommon library.")
41 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY  ${CPACK_PACKAGE_DESCRIPTION}
42                                        )
43 # Package settings
44 set(CPACK_GENERATOR                    "DEB;RPM")
45 set(CPACK_CMAKE_GENERATOR              "Unix Makefiles")
46 set(CPACK_PACKAGE_NAME                 ${PROJECT_NAME})
47 set(CPACK_PACKAGE_FILE_NAME            ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}${PACK_ARCH})
48
49 set(CPACK_RESOURCE_FILE_LICENSE        ${CMAKE_SOURCE_DIR}/COPYING.GPL)
50
51 set(CPACK_SOURCE_GENERATOR             TGZ)
52 set(CPACK_SOURCE_IGNORE_FILES
53     "~$"
54     "\\\\.git"
55     "build"
56     "build-rpm"
57 )
58 set(CPACK_SOURCE_PACKAGE_FILE_NAME     ${CPACK_PACKAGE_FILE_NAME})
59
60 # documentation
61 find_package(Doxygen)
62 if(DOXYGEN_FOUND)
63    # Set variables
64    set(PACKAGE libi2ncommon)
65    set(top_srcdir ${CMAKE_SOURCE_DIR})
66
67    # Find doxy config
68    message(STATUS "Doxygen found.")
69    set(DOXY_DIR "${CMAKE_SOURCE_DIR}/doc")
70    set(DOXY_CONFIG "${DOXY_DIR}/Doxyfile.in")
71
72    # Copy doxy.config.in
73    configure_file("${DOXY_CONFIG}" "${CMAKE_BINARY_DIR}/doxy.config")
74
75    # Create doc directory
76    add_custom_command(
77    OUTPUT ${CMAKE_BINARY_DIR}/doc
78    COMMAND rm -rf ${CMAKE_BINARY_DIR}/doc/{html,man}
79    COMMAND mkdir -p ${CMAKE_BINARY_DIR}/doc
80    DEPENDS src configlib xmllib utils test
81    )
82
83    # Run doxygen
84    add_custom_command(
85    OUTPUT ${CMAKE_BINARY_DIR}/doc/html/index.html
86    COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_BINARY_DIR}/doxy.config"
87    DEPENDS "${CMAKE_BINARY_DIR}/doxy.config" "${CMAKE_BINARY_DIR}/doc"
88    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc
89    )
90
91    add_custom_target(docs ALL DEPENDS ${CMAKE_BINARY_DIR}/doc/html/index.html)
92
93    message(STATUS "Generating API documentation with Doxygen")
94 else(DOXYGEN_FOUND)
95    message(STATUS "Not generating API documentation")
96 endif(DOXYGEN_FOUND)
97
98 # Conditional build itmes
99 option(BUILD_XMLLIB "Build xml part of libi2ncommon - needs patched libxml++" OFF)
100 if (BUILD_XMLLIB)
101    message(STATUS "Build xml library part")
102 else(BUILD_XMLLIB)
103    message(STATUS "NOT building xml library part")
104 endif(BUILD_XMLLIB)
105
106 # Find external packages
107 include(FindPkgConfig)
108
109 # Find Boost
110 find_package(Boost COMPONENTS iostreams unit_test_framework REQUIRED)
111
112 # Find libxml++
113 if (BUILD_XMLLIB)
114     pkg_check_modules(XMLPP REQUIRED libxml++-2.6)
115 endif(BUILD_XMLLIB)
116
117 # Find iconv
118 pkg_check_modules(ICONV REQUIRED libiconv)
119 include_directories($ICONV_INCLUDE_DIRS})
120 link_directories(${ICONV_LIBRARY_DIRS})
121
122
123 # pkgconfig output
124 set(prefix      ${CMAKE_INSTALL_PREFIX})
125 set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
126 set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
127 set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
128
129 # construct ${BOOST_LDADD} from ${Boost_LIBRARIES}
130 string(REGEX REPLACE ";" " -l" BOOST_LDADD "${Boost_IOSTREAMS_LIBRARIES}")
131 set(BOOST_LDADD "-l${BOOST_LDADD}")
132
133 # construct ${BOOST_CFLAGS} from ${Boost_INCLUDE_DIRS}
134 string(REGEX REPLACE ";" " -I" BOOST_CFLAGS "${Boost_INCLUDE_DIRS}")
135 set(BOOST_CFLAGS "-I${BOOST_CFLAGS}")
136
137 # construct ${ICONV_CFLAGS} from ${ICONV_INCLUDE_DIRS}
138 string(REGEX REPLACE ";" " -I" ICONV_CFLAGS "${ICONV_INCLUDE_DIRS}")
139 set(ICONV_CFLAGS "-I${ICONV_CFLAGS}")
140
141 configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon.pc @ONLY)
142 configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon_config.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon_config.pc @ONLY)
143 configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon_utils.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon_utils.pc @ONLY)
144
145 install(FILES ${CMAKE_BINARY_DIR}/libi2ncommon.pc
146                      ${CMAKE_BINARY_DIR}/libi2ncommon_config.pc
147                      ${CMAKE_BINARY_DIR}/libi2ncommon_utils.pc
148         DESTINATION lib/pkgconfig)
149
150 if (BUILD_XMLLIB)
151     configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon_xml.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon_xml.pc @ONLY)
152     install(FILES ${CMAKE_BINARY_DIR}/libi2ncommon_xml.pc DESTINATION lib/pkgconfig)
153 endif(BUILD_XMLLIB)
154
155
156 include(CPack)
157
158 # Subdirectories
159 set(CPACK_SET_DESTDIR "ON")
160
161 add_subdirectory(src)
162 add_subdirectory(configlib)
163 add_subdirectory(utils)
164 add_subdirectory(test)
165 if (BUILD_XMLLIB)
166     add_subdirectory(xmllib)
167 endif(BUILD_XMLLIB)