Replace inet_aton() with inet_pton() to parse IPs correctly (#8825)
[libi2ncommon] / CMakeLists.txt
CommitLineData
0d43d1b5
TJ
1cmake_minimum_required(VERSION 3.28 FATAL_ERROR)
2
263b5807
TJ
3# Project
4project(libi2ncommon)
5
6# Version settings
f22c059b 7set(VERSION 2.12)
263b5807
TJ
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)
263b5807
TJ
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
ca5e0bed
TJ
23# Enable all warnings
24add_definitions("-Wall")
25
263b5807
TJ
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
4a1afbc0
GE
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
263b5807
TJ
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
bdafe097
GE
60set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/Linking-Exception.txt)
61set(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/COPYING.GPL)
263b5807
TJ
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
147ed16c
TJ
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
263b5807 79# documentation
ac03bd21 80option(DOCUMENTATION "Generate API documentation with Doxygen" ON)
263b5807 81find_package(Doxygen)
ac03bd21 82if(DOCUMENTATION AND DOXYGEN_FOUND)
263b5807
TJ
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")
a0f1c361 114else(DOCUMENTATION AND DOXYGEN_FOUND)
263b5807 115 message(STATUS "Not generating API documentation")
a0f1c361 116endif(DOCUMENTATION AND DOXYGEN_FOUND)
263b5807 117
80156cdf
TJ
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
652f47a7
TJ
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
263b5807
TJ
133# Find external packages
134include(FindPkgConfig)
135
136# Find Boost
6844d8e0 137find_package(Boost 1.44 COMPONENTS iostreams unit_test_framework thread REQUIRED)
263b5807 138
d87beebd
C
139# Find pcrecpp
140pkg_check_modules(PCRECPP REQUIRED libpcrecpp)
141INCLUDE_DIRECTORIES(${PCRECPP_INCLUDE_DIRS})
142LINK_DIRECTORIES(${PCRECPP_LIBRARY_DIRS})
143
263b5807 144# Find libxml++
80156cdf
TJ
145if (BUILD_XMLLIB)
146 pkg_check_modules(XMLPP REQUIRED libxml++-2.6)
147endif(BUILD_XMLLIB)
263b5807
TJ
148
149# Find iconv
652f47a7
TJ
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)
263b5807 155
2bb72337
TJ
156# Detect openssl - for base64 routines
157pkg_check_modules(OPENSSL REQUIRED openssl)
158INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIRS})
159LINK_DIRECTORIES(${OPENSSL_LIBRARY_DIRS})
160
263b5807
TJ
161# pkgconfig output
162set(prefix ${CMAKE_INSTALL_PREFIX})
163set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
c6e19f3d 164set(includedir ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME})
4a1afbc0 165set(libdir ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
263b5807
TJ
166
167# construct ${BOOST_LDADD} from ${Boost_LIBRARIES}
af03c365
CH
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()
263b5807
TJ
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
da895d9e
TJ
182# construct ${ICONV_CFLAGS} from ${ICONV_INCLUDE_DIRS}
183string(REGEX REPLACE ";" " -I" ICONV_CFLAGS "${ICONV_INCLUDE_DIRS}")
184set(ICONV_CFLAGS "-I${ICONV_CFLAGS}")
185
263b5807
TJ
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)
263b5807
TJ
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
263b5807 192 ${CMAKE_BINARY_DIR}/libi2ncommon_utils.pc
4a1afbc0 193 DESTINATION lib${LIB_SUFFIX}/pkgconfig)
263b5807 194
80156cdf
TJ
195if (BUILD_XMLLIB)
196 configure_file(${CMAKE_SOURCE_DIR}/libi2ncommon_xml.pc.in ${CMAKE_BINARY_DIR}/libi2ncommon_xml.pc @ONLY)
4a1afbc0 197 install(FILES ${CMAKE_BINARY_DIR}/libi2ncommon_xml.pc DESTINATION lib${LIB_SUFFIX}/pkgconfig)
80156cdf
TJ
198endif(BUILD_XMLLIB)
199
200
263b5807
TJ
201include(CPack)
202
203# Subdirectories
204set(CPACK_SET_DESTDIR "ON")
205
206add_subdirectory(src)
207add_subdirectory(configlib)
263b5807
TJ
208add_subdirectory(utils)
209add_subdirectory(test)
80156cdf
TJ
210if (BUILD_XMLLIB)
211 add_subdirectory(xmllib)
212endif(BUILD_XMLLIB)