Added checking for header files in order to get proper define directives in the confi...
[libasyncio] / CMakeLists.txt
CommitLineData
6cb16c21
KK
1# Project
2project(libasyncio)
3set(VERSION 0.2)
4set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
5
6# CMake
7set(CMAKE_COLOR_MAKEFILE ON)
8cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
9
10# Source package generation
11set(CPACK_SOURCE_GENERATOR TGZ)
12set(CPACK_SOURCE_IGNORE_FILES "~$;\\\\.git;build;build-rpm")
13set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION}")
14
15# Find external packages
16include(FindPkgConfig)
17
18option(WITH_LIBI2NCOMMON OFF)
19if(WITH_LIBI2NCOMMON)
20 pkg_check_modules(LIBI2NCOMMON REQUIRED libi2ncommon)
21 include_directories(${LIBI2NCOMMON_INCLUDE_DIRS})
22 link_directories(${LIBI2NCOMMON_LIBRARY_DIRS})
23elseif(WITH_LIBI2NCOMMON)
24 message(STATUS "[!] Building *without* libi2ncommon support. [!]")
25endif(WITH_LIBI2NCOMMON)
26
27find_package(Boost 1.34 REQUIRED COMPONENTS signals unit_test_framework)
28include_directories(${Boost_INCLUDE_DIRS})
29
30option(WITH_LIBT2N OFF)
31if(WITH_LIBT2N)
32 pkg_check_modules(LIBT2N REQUIRED libt2n)
33 include_directories(${LIBT2N_INCLUDE_DIRS})
34 link_directories(${LIBT2N_LIBRARY_DIRS})
35 set(T2NDIRS glue_t2n)
36elseif(WITH_LIBT2N)
37 message(STATUS "[!] Building *without* libt2n support. [!]")
38endif(WITH_LIBT2N)
39
40# Documentation
41find_package(Doxygen)
42if(DOXYGEN_FOUND)
43 # Find doxy config
44 message(STATUS "Doxygen found.")
45 set(DOXY_DIR "${CMAKE_SOURCE_DIR}/doc")
46 set(DOXY_CONFIG "${DOXY_DIR}/Doxyfile.in")
47
48 # Copy doxy.config.in
49 configure_file("${DOXY_CONFIG}" "${CMAKE_BINARY_DIR}/doxy.config")
50
51 # Create doc directory
52 add_custom_command(
53 OUTPUT ${CMAKE_BINARY_DIR}/doc
54 COMMAND rm -rf ${CMAKE_BINARY_DIR}/doc/{html,man}
55 COMMAND mkdir -p ${CMAKE_BINARY_DIR}/doc
56 DEPENDS utils asyncio ${T2NDIRS} unittest
57 )
58
59 # Run doxygen
60 add_custom_command(
61 OUTPUT ${CMAKE_BINARY_DIR}/doc/html/index.html
62 COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_BINARY_DIR}/doxy.config"
63 DEPENDS "${CMAKE_BINARY_DIR}/doxy.config" "${CMAKE_BINARY_DIR}/doc"
64 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc
65 )
66
67 add_custom_target(docs ALL DEPENDS ${CMAKE_BINARY_DIR}/doc/html/index.html)
68
69 message(STATUS "Generating API documentation with Doxygen.")
70else(DOXYGEN_FOUND)
71 message(STATUS "Not generating API documentation.")
72endif(DOXYGEN_FOUND)
73
74# Spec file
75configure_file(${CMAKE_SOURCE_DIR}/libasyncio.spec.in ${CMAKE_SOURCE_DIR}/libasyncio.spec @ONLY)
76
7b52dc40
KK
77# Check include files and availability of libraries for config file
78include(CheckIncludeFiles)
79
80if(Boost_FOUND)
81 set(HAVE_BOOST 1)
82endif()
83if(Boost_SIGNALS_FOUND)
84 set(HAVE_BOOST_SIGNALS 1)
85endif()
86if(Boost_UNIT_TEST_FRAMEWORK_FOUND)
87 set(HAVE_BOOST_UNIT_TEST_FRAMEWORK 1)
88endif()
89if(LIBI2NCOMMON_FOUND)
90 set(HAVE_LIBI2NCOMMON 1)
91endif()
92if(LIBT2N_FOUND)
93 set(HAVE_LIBT2N 1)
94endif()
95check_include_files(dlfcn.h HAVE_DLFCN_H)
96check_include_files(inttypes.h HAVE_INTTYPES_H)
97check_include_files(memory.h HAVE_MEMORY_H)
98check_include_files(stdint.h HAVE_STDINT_H)
99check_include_files(stdlib.h HAVE_STDLIB_H)
100check_include_files(strings.h HAVE_STRINGS_H)
101check_include_files(string.h HAVE_STRING_H)
102check_include_files(sys/stat.h HAVE_SYS_STAT_H)
103check_include_files(sys/types.h HAVE_SYS_TYPES_H)
104check_include_files(unistd.h HAVE_UNISTD_H)
105set(STDC_HEADER_NAMES
106 assert.h
107 ctype.h
108 errno.h
109 float.h
110 limits.h
111 locale.h
112 math.h
113 setjmp.h
114 signal.h
115 stdarg.h
116 stddef.h
117 stdio.h
118 stdlib.h
119 string.h
120 time.h
121)
122check_include_files("${STDC_HEADER_NAMES}" STDC_HEADERS)
123
6cb16c21
KK
124# Config file
125configure_file(${CMAKE_SOURCE_DIR}/asyncio_config.hpp.in.cmake ${CMAKE_BINARY_DIR}/asyncio_config.hpp)
126include_directories(BEFORE ${CMAKE_BINARY_DIR})
127
128# PkgConfig output
129set(prefix ${CMAKE_INSTALL_PREFIX})
130set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
131set(includedir ${CMAKE_INSTALL_PREFIX}/include)
132set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
133
134# PkgConfig files
135configure_file(${CMAKE_SOURCE_DIR}/asyncio/libasyncio.pc.in ${CMAKE_BINARY_DIR}/asyncio/libasyncio.pc @ONLY)
136configure_file(${CMAKE_SOURCE_DIR}/utils/libasyncio_utils.pc.in ${CMAKE_BINARY_DIR}/utils/libasyncio_utils.pc @ONLY)
137configure_file(${CMAKE_SOURCE_DIR}/glue_t2n/libasyncio_t2n.pc.in ${CMAKE_BINARY_DIR}/glue_t2n/libasyncio_t2n.pc @ONLY)
138
139install(FILES ${CMAKE_BINARY_DIR}/asyncio/libasyncio.pc DESTINATION lib/pkgconfig)
140install(FILES ${CMAKE_BINARY_DIR}/utils/libasyncio_utils.pc DESTINATION lib/pkgconfig)
141install(FILES ${CMAKE_BINARY_DIR}/glue_t2n/libasyncio_t2n.pc DESTINATION lib/pkgconfig)
142
143# Subdirectories
144set(CPACK_SET_DESTDIR "ON")
145add_subdirectory(utils)
146add_subdirectory(asyncio)
147if(${WITH_LIBT2N})
148 add_subdirectory(${T2NDIRS})
149endif(${WITH_LIBT2N})
150add_subdirectory(unittest)
151
152include(CPack)