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