Migrate libasyncio from boost.signal to signals2 (#8756)
[libasyncio] / CMakeLists.txt
... / ...
CommitLineData
1# Project
2project(libasyncio)
3set(VERSION 0.3)
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 "Build with libi2ncommon support" OFF)
19if(WITH_LIBI2NCOMMON)
20 message(STATUS "[!] Building *with* libi2ncommon support. [!]")
21 pkg_check_modules(LIBI2NCOMMON REQUIRED libi2ncommon)
22 include_directories(${LIBI2NCOMMON_INCLUDE_DIRS})
23 link_directories(${LIBI2NCOMMON_LIBRARY_DIRS})
24else(WITH_LIBI2NCOMMON)
25 message(STATUS "[!] Building *without* libi2ncommon support. [!]")
26endif(WITH_LIBI2NCOMMON)
27
28find_package(Boost 1.34 REQUIRED COMPONENTS unit_test_framework)
29include_directories(${Boost_INCLUDE_DIRS})
30
31option(WITH_LIBT2N "Build with libt2n support" OFF)
32if(WITH_LIBT2N)
33 message(STATUS "[!] Building *with* libt2n support. [!]")
34 pkg_check_modules(LIBT2N REQUIRED libt2n)
35 include_directories(${LIBT2N_INCLUDE_DIRS})
36 link_directories(${LIBT2N_LIBRARY_DIRS})
37 add_subdirectory(glue_t2n)
38else(WITH_LIBT2N)
39 message(STATUS "[!] Building *without* libt2n support. [!]")
40endif(WITH_LIBT2N)
41
42# Documentation
43find_package(Doxygen)
44if(DOXYGEN_FOUND)
45 # Find doxy config
46 message(STATUS "Doxygen found.")
47 set(DOXY_DIR "${CMAKE_SOURCE_DIR}/doc")
48 set(DOXY_CONFIG "${DOXY_DIR}/Doxyfile.in")
49 set(top_srcdir ${CMAKE_SOURCE_DIR})
50
51 # Copy doxy.config.in
52 configure_file("${DOXY_CONFIG}" "${CMAKE_BINARY_DIR}/doxy.config")
53
54 # Create doc directory
55 add_custom_command(
56 OUTPUT ${CMAKE_BINARY_DIR}/doc
57 COMMAND rm -rf ${CMAKE_BINARY_DIR}/doc/{html,man}
58 COMMAND mkdir -p ${CMAKE_BINARY_DIR}/doc
59 DEPENDS utils asyncio ${T2NDIRS} unittest
60 )
61
62 # Run doxygen
63 add_custom_command(
64 OUTPUT ${CMAKE_BINARY_DIR}/doc/html/index.html
65 COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_BINARY_DIR}/doxy.config"
66 DEPENDS "${CMAKE_BINARY_DIR}/doxy.config" "${CMAKE_BINARY_DIR}/doc"
67 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc
68 )
69
70 add_custom_target(docs ALL DEPENDS ${CMAKE_BINARY_DIR}/doc/html/index.html)
71
72 message(STATUS "Generating API documentation with Doxygen.")
73else(DOXYGEN_FOUND)
74 message(STATUS "Not generating API documentation.")
75endif(DOXYGEN_FOUND)
76
77# Spec file
78configure_file(${CMAKE_SOURCE_DIR}/libasyncio.spec.in ${CMAKE_SOURCE_DIR}/libasyncio.spec @ONLY)
79
80# Check include files and availability of libraries for config file
81include(CheckIncludeFiles)
82
83if(Boost_FOUND)
84 set(HAVE_BOOST 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
124# Config file
125# configure_file(${CMAKE_SOURCE_DIR}/asyncio_config.hpp.in.cmake ${CMAKE_BINARY_DIR}/asyncio_config.hpp)
126# include_directories(BEFORE ${CMAKE_BINARY_DIR})
127configure_file(${CMAKE_SOURCE_DIR}/asyncio_config.hpp.in.cmake ${CMAKE_SOURCE_DIR}/asyncio/asyncio_config.hpp)
128# include_directories(BEFORE ${CMAKE_SOURCE_DIR}/asyncio)
129
130# PkgConfig output
131set(prefix ${CMAKE_INSTALL_PREFIX})
132set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
133set(includedir ${CMAKE_INSTALL_PREFIX}/include)
134set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
135
136# PkgConfig files
137configure_file(${CMAKE_SOURCE_DIR}/asyncio/libasyncio.pc.in ${CMAKE_BINARY_DIR}/asyncio/libasyncio.pc @ONLY)
138configure_file(${CMAKE_SOURCE_DIR}/utils/libasyncio_utils.pc.in ${CMAKE_BINARY_DIR}/utils/libasyncio_utils.pc @ONLY)
139configure_file(${CMAKE_SOURCE_DIR}/glue_t2n/libasyncio_t2n.pc.in ${CMAKE_BINARY_DIR}/glue_t2n/libasyncio_t2n.pc @ONLY)
140
141install(FILES ${CMAKE_BINARY_DIR}/asyncio/libasyncio.pc DESTINATION lib/pkgconfig)
142install(FILES ${CMAKE_BINARY_DIR}/utils/libasyncio_utils.pc DESTINATION lib/pkgconfig)
143install(FILES ${CMAKE_BINARY_DIR}/glue_t2n/libasyncio_t2n.pc DESTINATION lib/pkgconfig)
144
145# Subdirectories
146set(CPACK_SET_DESTDIR "ON")
147add_subdirectory(utils)
148add_subdirectory(asyncio)
149add_subdirectory(unittest)
150
151include(CPack)