Added checking for header files in order to get proper define directives in the confi...
[libasyncio] / CMakeLists.txt
1 # Project
2 project(libasyncio)
3 set(VERSION 0.2)
4 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
5
6 # CMake
7 set(CMAKE_COLOR_MAKEFILE ON)
8 cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
9
10 # Source package generation
11 set(CPACK_SOURCE_GENERATOR             TGZ)
12 set(CPACK_SOURCE_IGNORE_FILES          "~$;\\\\.git;build;build-rpm")
13 set(CPACK_SOURCE_PACKAGE_FILE_NAME     "${PROJECT_NAME}-${VERSION}")
14
15 # Find external packages
16 include(FindPkgConfig)
17
18 option(WITH_LIBI2NCOMMON OFF)
19 if(WITH_LIBI2NCOMMON)
20     pkg_check_modules(LIBI2NCOMMON REQUIRED libi2ncommon)
21     include_directories(${LIBI2NCOMMON_INCLUDE_DIRS})
22     link_directories(${LIBI2NCOMMON_LIBRARY_DIRS})
23 elseif(WITH_LIBI2NCOMMON)
24     message(STATUS "[!] Building *without* libi2ncommon support. [!]")
25 endif(WITH_LIBI2NCOMMON)
26
27 find_package(Boost 1.34 REQUIRED COMPONENTS signals unit_test_framework)
28 include_directories(${Boost_INCLUDE_DIRS})
29
30 option(WITH_LIBT2N OFF)
31 if(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)
36 elseif(WITH_LIBT2N)
37     message(STATUS "[!] Building *without* libt2n support. [!]")
38 endif(WITH_LIBT2N)
39
40 # Documentation
41 find_package(Doxygen)
42 if(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.")
70 else(DOXYGEN_FOUND)
71    message(STATUS "Not generating API documentation.")
72 endif(DOXYGEN_FOUND)
73
74 # Spec file
75 configure_file(${CMAKE_SOURCE_DIR}/libasyncio.spec.in ${CMAKE_SOURCE_DIR}/libasyncio.spec @ONLY)
76
77 # Check include files and availability of libraries for config file
78 include(CheckIncludeFiles)
79
80 if(Boost_FOUND)
81     set(HAVE_BOOST 1)
82 endif()
83 if(Boost_SIGNALS_FOUND)
84     set(HAVE_BOOST_SIGNALS 1)
85 endif()
86 if(Boost_UNIT_TEST_FRAMEWORK_FOUND)
87     set(HAVE_BOOST_UNIT_TEST_FRAMEWORK 1)
88 endif()
89 if(LIBI2NCOMMON_FOUND)
90     set(HAVE_LIBI2NCOMMON 1)
91 endif()
92 if(LIBT2N_FOUND)
93     set(HAVE_LIBT2N 1)
94 endif()
95 check_include_files(dlfcn.h HAVE_DLFCN_H)
96 check_include_files(inttypes.h HAVE_INTTYPES_H)
97 check_include_files(memory.h HAVE_MEMORY_H)
98 check_include_files(stdint.h HAVE_STDINT_H)
99 check_include_files(stdlib.h HAVE_STDLIB_H)
100 check_include_files(strings.h HAVE_STRINGS_H)
101 check_include_files(string.h HAVE_STRING_H)
102 check_include_files(sys/stat.h HAVE_SYS_STAT_H)
103 check_include_files(sys/types.h HAVE_SYS_TYPES_H)
104 check_include_files(unistd.h HAVE_UNISTD_H)
105 set(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 )
122 check_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})
127
128 # PkgConfig output
129 set(prefix      ${CMAKE_INSTALL_PREFIX})
130 set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
131 set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
132 set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
133
134 # PkgConfig files
135 configure_file(${CMAKE_SOURCE_DIR}/asyncio/libasyncio.pc.in ${CMAKE_BINARY_DIR}/asyncio/libasyncio.pc @ONLY)
136 configure_file(${CMAKE_SOURCE_DIR}/utils/libasyncio_utils.pc.in ${CMAKE_BINARY_DIR}/utils/libasyncio_utils.pc @ONLY)
137 configure_file(${CMAKE_SOURCE_DIR}/glue_t2n/libasyncio_t2n.pc.in ${CMAKE_BINARY_DIR}/glue_t2n/libasyncio_t2n.pc @ONLY)
138
139 install(FILES ${CMAKE_BINARY_DIR}/asyncio/libasyncio.pc DESTINATION lib/pkgconfig)
140 install(FILES ${CMAKE_BINARY_DIR}/utils/libasyncio_utils.pc DESTINATION lib/pkgconfig)
141 install(FILES ${CMAKE_BINARY_DIR}/glue_t2n/libasyncio_t2n.pc DESTINATION lib/pkgconfig)
142
143 # Subdirectories
144 set(CPACK_SET_DESTDIR "ON")
145 add_subdirectory(utils)
146 add_subdirectory(asyncio)
147 if(${WITH_LIBT2N})
148     add_subdirectory(${T2NDIRS})
149 endif(${WITH_LIBT2N})
150 add_subdirectory(unittest)
151
152 include(CPack)