Replace inet_aton() with inet_pton() to parse IPs correctly (#8825)
[libi2ncommon] / CMakeLists.txt
... / ...
CommitLineData
1cmake_minimum_required(VERSION 3.28 FATAL_ERROR)
2
3# Project
4project(libi2ncommon)
5
6# Version settings
7set(VERSION 2.12)
8
9SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
10
11# CMake
12if("${CMAKE_BUILD_TYPE}" STREQUAL "")
13 set(CMAKE_BUILD_TYPE Debug)
14endif("${CMAKE_BUILD_TYPE}" STREQUAL "")
15set(CMAKE_COLOR_MAKEFILE ON)
16
17# Debug build
18message("-- Build type: ${CMAKE_BUILD_TYPE}")
19if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
20 add_definitions(-DDEBUG)
21endif(${CMAKE_BUILD_TYPE} STREQUAL Debug)
22
23# Enable all warnings
24add_definitions("-Wall")
25
26# Set components
27set(CPACK_COMPONENTS_ALL sharedlibs staticlibs headers)
28set(CPACK_COMPONENT_SHAREDLIBS_DISPLAY_NAME "Shared libraries")
29set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers")
30
31set(CPACK_COMPONENT_SHAREDLIBS_DESCRIPTION
32"Shared library for general use.")
33set(CPACK_COMPONENT_HEADERS_DESCRIPTION
34"C/C++ header files.")
35
36set(CPACK_COMPONENT_SHAREDLIBS_GROUP "Development")
37set(CPACK_COMPONENT_HEADERS_GROUP "Development")
38
39# Create suffix to eventually install in lib64
40IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
41 SET(LIB_SUFFIX "")
42 SET(PACK_ARCH "")
43 ELSE(CMAKE_SIZEOF_VOID_P EQUAL 4)
44 SET(LIB_SUFFIX 64)
45 SET(PACK_ARCH .x86_64)
46endif(CMAKE_SIZEOF_VOID_P EQUAL 4)
47
48# Package information
49set(CPACK_PACKAGE_VERSION ${VERSION})
50set(CPACK_PACKAGE_CONTACT "Intra2net AG <libi2ncommon@developer.intra2net.com>")
51set(CPACK_PACKAGE_DESCRIPTION "libi2ncommon library.")
52set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${CPACK_PACKAGE_DESCRIPTION}
53 )
54# Package settings
55set(CPACK_GENERATOR "DEB;RPM")
56set(CPACK_CMAKE_GENERATOR "Unix Makefiles")
57set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
58set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}${PACK_ARCH})
59
60set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/Linking-Exception.txt)
61set(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/COPYING.GPL)
62
63set(CPACK_SOURCE_GENERATOR TGZ)
64set(CPACK_SOURCE_IGNORE_FILES
65 "~$"
66 "\\\\.git"
67 "build"
68 "build-rpm"
69)
70set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_FILE_NAME})
71
72# "make dist" target
73set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${VERSION})
74add_custom_target(dist
75 COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD
76 | bzip2 > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
77 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
78
79# documentation
80option(DOCUMENTATION "Generate API documentation with Doxygen" ON)
81find_package(Doxygen)
82if(DOCUMENTATION AND DOXYGEN_FOUND)
83 # Set variables
84 set(PACKAGE libi2ncommon)
85 set(top_srcdir ${CMAKE_SOURCE_DIR})
86
87 # Find doxy config
88 message(STATUS "Doxygen found.")
89 set(DOXY_DIR "${CMAKE_SOURCE_DIR}/doc")
90 set(DOXY_CONFIG "${DOXY_DIR}/Doxyfile.in")
91
92 # Copy doxy.config.in
93 configure_file("${DOXY_CONFIG}" "${CMAKE_BINARY_DIR}/doxy.config")
94
95 # Create doc directory
96 add_custom_command(
97 OUTPUT ${CMAKE_BINARY_DIR}/doc
98 COMMAND rm -rf ${CMAKE_BINARY_DIR}/doc/{html,man}
99 COMMAND mkdir -p ${CMAKE_BINARY_DIR}/doc
100 DEPENDS src configlib xmllib utils test
101 )
102
103 # Run doxygen
104 add_custom_command(
105 OUTPUT ${CMAKE_BINARY_DIR}/doc/html/index.html
106 COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_BINARY_DIR}/doxy.config"
107 DEPENDS "${CMAKE_BINARY_DIR}/doxy.config" "${CMAKE_BINARY_DIR}/doc"
108 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc
109 )
110
111 add_custom_target(docs ALL DEPENDS ${CMAKE_BINARY_DIR}/doc/html/index.html)
112
113 message(STATUS "Generating API documentation with Doxygen")
114else(DOCUMENTATION AND DOXYGEN_FOUND)
115 message(STATUS "Not generating API documentation")
116endif(DOCUMENTATION AND DOXYGEN_FOUND)
117
118# Conditional build itmes
119option(BUILD_XMLLIB "Build xml part of libi2ncommon - needs patched libxml++" OFF)
120if (BUILD_XMLLIB)
121 message(STATUS "Build xml library part")
122else(BUILD_XMLLIB)
123 message(STATUS "NOT building xml library part")
124endif(BUILD_XMLLIB)
125
126option(IMAP_UTF7_SUPPORT "Enable imap modified utf7 support - needs patched libiconv" OFF)
127if (IMAP_UTF7_SUPPORT)
128 message(STATUS "Build imap modified utf7 support")
129else(IMAP_UTF7_SUPPORT)
130 message(STATUS "NOT building imap modified utf7 support")
131endif(IMAP_UTF7_SUPPORT)
132
133# Find external packages
134include(FindPkgConfig)
135
136# Find Boost
137find_package(Boost 1.44 COMPONENTS iostreams unit_test_framework thread REQUIRED)
138
139# Find pcrecpp
140pkg_check_modules(PCRECPP REQUIRED libpcrecpp)
141INCLUDE_DIRECTORIES(${PCRECPP_INCLUDE_DIRS})
142LINK_DIRECTORIES(${PCRECPP_LIBRARY_DIRS})
143
144# Find libxml++
145if (BUILD_XMLLIB)
146 pkg_check_modules(XMLPP REQUIRED libxml++-2.6)
147endif(BUILD_XMLLIB)
148
149# Find iconv
150if (IMAP_UTF7_SUPPORT)
151 pkg_check_modules(ICONV REQUIRED libiconv)
152 include_directories($ICONV_INCLUDE_DIRS})
153 link_directories(${ICONV_LIBRARY_DIRS})
154endif(IMAP_UTF7_SUPPORT)
155
156# Detect openssl - for base64 routines
157pkg_check_modules(OPENSSL REQUIRED openssl)
158INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIRS})
159LINK_DIRECTORIES(${OPENSSL_LIBRARY_DIRS})
160
161# pkgconfig output
162set(prefix ${CMAKE_INSTALL_PREFIX})
163set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
164set(includedir ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME})
165set(libdir ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
166
167# construct ${BOOST_LDADD} from ${Boost_LIBRARIES}
168# forming "-L/some/path -lboost_a -L/other/path -lboost_b" from
169# "/some/path/libboost_a.so.3.5;/other/path/libboost_b.so"
170set(BOOST_LDADD "")
171FOREACH(boost_lib_full ${Boost_IOSTREAMS_LIBRARIES})
172 get_filename_component(boost_lib_path ${boost_lib_full} PATH)
173 get_filename_component(boost_lib_file ${boost_lib_full} NAME_WE)
174 string(REGEX REPLACE "^lib(boost.+)$" "\\1" boost_lib_name ${boost_lib_file})
175 set(BOOST_LDADD "${BOOST_LDADD} -L${boost_lib_path} -l${boost_lib_name}")
176ENDFOREACH()
177
178# construct ${BOOST_CFLAGS} from ${Boost_INCLUDE_DIRS}
179string(REGEX REPLACE ";" " -I" BOOST_CFLAGS "${Boost_INCLUDE_DIRS}")
180set(BOOST_CFLAGS "-I${BOOST_CFLAGS}")
181
182# construct ${ICONV_CFLAGS} from ${ICONV_INCLUDE_DIRS}
183string(REGEX REPLACE ";" " -I" ICONV_CFLAGS "${ICONV_INCLUDE_DIRS}")
184set(ICONV_CFLAGS "-I${ICONV_CFLAGS}")
185
186configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon.pc @ONLY)
187configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon_config.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon_config.pc @ONLY)
188configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon_utils.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon_utils.pc @ONLY)
189
190install(FILES ${CMAKE_BINARY_DIR}/libi2ncommon.pc
191 ${CMAKE_BINARY_DIR}/libi2ncommon_config.pc
192 ${CMAKE_BINARY_DIR}/libi2ncommon_utils.pc
193 DESTINATION lib${LIB_SUFFIX}/pkgconfig)
194
195if (BUILD_XMLLIB)
196 configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon_xml.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon_xml.pc @ONLY)
197 install(FILES ${CMAKE_BINARY_DIR}/libi2ncommon_xml.pc DESTINATION lib${LIB_SUFFIX}/pkgconfig)
198endif(BUILD_XMLLIB)
199
200
201include(CPack)
202
203# Subdirectories
204set(CPACK_SET_DESTDIR "ON")
205
206add_subdirectory(src)
207add_subdirectory(configlib)
208add_subdirectory(utils)
209add_subdirectory(test)
210if (BUILD_XMLLIB)
211 add_subdirectory(xmllib)
212endif(BUILD_XMLLIB)