Full CMake conversion of the libasyncio project without using any compile flags.
[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 set(T2NDIRS glue_t2n)
40
41 # Documentation
42 find_package(Doxygen)
43 if(DOXYGEN_FOUND)
44    # Find doxy config
45    message(STATUS "Doxygen found.")
46    set(DOXY_DIR "${CMAKE_SOURCE_DIR}/doc")
47    set(DOXY_CONFIG "${DOXY_DIR}/Doxyfile.in")
48
49    # Copy doxy.config.in
50    configure_file("${DOXY_CONFIG}" "${CMAKE_BINARY_DIR}/doxy.config")
51
52    # Create doc directory
53    add_custom_command(
54    OUTPUT ${CMAKE_BINARY_DIR}/doc
55    COMMAND rm -rf ${CMAKE_BINARY_DIR}/doc/{html,man}
56    COMMAND mkdir -p ${CMAKE_BINARY_DIR}/doc
57    DEPENDS utils asyncio ${T2NDIRS} unittest
58    )
59
60    # Run doxygen
61    add_custom_command(
62    OUTPUT ${CMAKE_BINARY_DIR}/doc/html/index.html
63    COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_BINARY_DIR}/doxy.config"
64    DEPENDS "${CMAKE_BINARY_DIR}/doxy.config" "${CMAKE_BINARY_DIR}/doc"
65    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc
66    )
67
68    add_custom_target(docs ALL DEPENDS ${CMAKE_BINARY_DIR}/doc/html/index.html)
69
70    message(STATUS "Generating API documentation with Doxygen.")
71 else(DOXYGEN_FOUND)
72    message(STATUS "Not generating API documentation.")
73 endif(DOXYGEN_FOUND)
74
75 # Spec file
76 configure_file(${CMAKE_SOURCE_DIR}/libasyncio.spec.in ${CMAKE_SOURCE_DIR}/libasyncio.spec @ONLY)
77
78 # Check include files and availability of libraries for config file
79 include(CheckIncludeFiles)
80
81 if(Boost_FOUND)
82     set(HAVE_BOOST 1)
83 endif()
84 if(Boost_SIGNALS_FOUND)
85     set(HAVE_BOOST_SIGNALS 1)
86 endif()
87 if(Boost_UNIT_TEST_FRAMEWORK_FOUND)
88     set(HAVE_BOOST_UNIT_TEST_FRAMEWORK 1)
89 endif()
90 if(LIBI2NCOMMON_FOUND)
91     set(HAVE_LIBI2NCOMMON 1)
92 endif()
93 if(LIBT2N_FOUND)
94     set(HAVE_LIBT2N 1)
95 endif()
96 check_include_files(dlfcn.h HAVE_DLFCN_H)
97 check_include_files(inttypes.h HAVE_INTTYPES_H)
98 check_include_files(memory.h HAVE_MEMORY_H)
99 check_include_files(stdint.h HAVE_STDINT_H)
100 check_include_files(stdlib.h HAVE_STDLIB_H)
101 check_include_files(strings.h HAVE_STRINGS_H)
102 check_include_files(string.h HAVE_STRING_H)
103 check_include_files(sys/stat.h HAVE_SYS_STAT_H)
104 check_include_files(sys/types.h HAVE_SYS_TYPES_H)
105 check_include_files(unistd.h HAVE_UNISTD_H)
106 set(STDC_HEADER_NAMES
107     assert.h
108     ctype.h
109     errno.h
110     float.h
111     limits.h
112     locale.h
113     math.h
114     setjmp.h
115     signal.h
116     stdarg.h
117     stddef.h
118     stdio.h
119     stdlib.h
120     string.h
121     time.h
122 )
123 check_include_files("${STDC_HEADER_NAMES}" STDC_HEADERS)
124
125 # Config file
126 # configure_file(${CMAKE_SOURCE_DIR}/asyncio_config.hpp.in.cmake ${CMAKE_BINARY_DIR}/asyncio_config.hpp)
127 # include_directories(BEFORE ${CMAKE_BINARY_DIR})
128 configure_file(${CMAKE_SOURCE_DIR}/asyncio_config.hpp.in.cmake ${CMAKE_SOURCE_DIR}/asyncio/asyncio_config.hpp)
129 # include_directories(BEFORE ${CMAKE_SOURCE_DIR}/asyncio)
130
131 # PkgConfig output
132 set(prefix      ${CMAKE_INSTALL_PREFIX})
133 set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
134 set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
135 set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
136
137 # PkgConfig files
138 configure_file(${CMAKE_SOURCE_DIR}/asyncio/libasyncio.pc.in ${CMAKE_BINARY_DIR}/asyncio/libasyncio.pc @ONLY)
139 configure_file(${CMAKE_SOURCE_DIR}/utils/libasyncio_utils.pc.in ${CMAKE_BINARY_DIR}/utils/libasyncio_utils.pc @ONLY)
140 configure_file(${CMAKE_SOURCE_DIR}/glue_t2n/libasyncio_t2n.pc.in ${CMAKE_BINARY_DIR}/glue_t2n/libasyncio_t2n.pc @ONLY)
141
142 install(FILES ${CMAKE_BINARY_DIR}/asyncio/libasyncio.pc DESTINATION lib/pkgconfig)
143 install(FILES ${CMAKE_BINARY_DIR}/utils/libasyncio_utils.pc DESTINATION lib/pkgconfig)
144 install(FILES ${CMAKE_BINARY_DIR}/glue_t2n/libasyncio_t2n.pc DESTINATION lib/pkgconfig)
145
146 # Subdirectories
147 set(CPACK_SET_DESTDIR "ON")
148 add_subdirectory(utils)
149 add_subdirectory(asyncio)
150 # if(${WITH_LIBT2N})
151 add_subdirectory(${T2NDIRS})
152 # endif(${WITH_LIBT2N})
153 add_subdirectory(unittest)
154
155 include(CPack)