7277cdf748583078b85ed40671f13e981cad473d
[libt2n] / CMakeLists.txt
1 # Project
2 project(libt2n)
3 set(VERSION 0.7)
4 set(PROTOCOL_VERSION 1) # protocol version used (integers, increase version if incompatible)
5 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
6
7 # CMake
8 set(CMAKE_COLOR_MAKEFILE ON)
9 cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
10
11 # Source package generation
12 set(CPACK_SOURCE_GENERATOR             TGZ)
13 set(CPACK_SOURCE_IGNORE_FILES          "~$;\\\\.git;build;build-rpm")
14 set(CPACK_SOURCE_PACKAGE_FILE_NAME     "${PROJECT_NAME}-${VERSION}")
15
16 # "make dist" target
17 set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${VERSION})
18 add_custom_target(dist
19     COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD
20             | bzip2 > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
21     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
22
23 # Find external packages
24 include(FindPkgConfig)
25
26 find_package(Boost 1.33 REQUIRED COMPONENTS serialization unit_test_framework)
27 include_directories(${Boost_INCLUDE_DIRS})
28
29 pkg_check_modules(XMLPP REQUIRED libxml++-2.6>=2.8.1)
30 include_directories(${XMLPP_INCLUDE_DIRS})
31 link_directories(${XMLPP_LIBRARY_DIRS})
32
33 # Documentation
34 find_package(Doxygen)
35 if(DOXYGEN_FOUND)
36    # Find doxy config
37    message(STATUS "Doxygen found.")
38    set(DOXY_DIR "${CMAKE_SOURCE_DIR}/doc")
39    set(DOXY_CONFIG "${DOXY_DIR}/Doxyfile.in")
40
41    # Copy doxy.config.in
42    configure_file("${DOXY_CONFIG}" "${CMAKE_BINARY_DIR}/doxy.config")
43
44    # Create doc directory
45    add_custom_command(
46    OUTPUT ${CMAKE_BINARY_DIR}/doc
47    COMMAND rm -rf ${CMAKE_BINARY_DIR}/doc/{html,man}
48    COMMAND mkdir -p ${CMAKE_BINARY_DIR}/doc
49    DEPENDS codegen examples examples-codegen src test
50    )
51
52    # Run doxygen
53    add_custom_command(
54    OUTPUT ${CMAKE_BINARY_DIR}/doc/html/index.html
55    COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_BINARY_DIR}/doxy.config"
56    DEPENDS "${CMAKE_BINARY_DIR}/doxy.config" "${CMAKE_BINARY_DIR}/doc"
57    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc
58    )
59
60    add_custom_target(docs ALL DEPENDS ${CMAKE_BINARY_DIR}/doc/html/index.html)
61
62    message(STATUS "Generating API documentation with Doxygen.")
63 else(DOXYGEN_FOUND)
64    message(STATUS "Not generating API documentation.")
65 endif(DOXYGEN_FOUND)
66
67 # Spec file
68 configure_file(${CMAKE_SOURCE_DIR}/libt2n.spec.in ${CMAKE_SOURCE_DIR}/libt2n.spec @ONLY)
69
70 # Check include files and availability of libraries for config file
71 include(CheckIncludeFiles)
72
73 if(Boost_FOUND)
74     set(HAVE_BOOST 1)
75 endif()
76 if(Boost_SERIALIZATION_FOUND)
77     set(HAVE_BOOST_SERIALIZATION 1)
78 endif()
79 if(Boost_UNIT_TEST_FRAMEWORK_FOUND)
80     set(HAVE_BOOST_UNIT_TEST_FRAMEWORK 1)
81 endif()
82 check_include_files(dlfcn.h HAVE_DLFCN_H)
83 check_include_files(inttypes.h HAVE_INTTYPES_H)
84 check_include_files(memory.h HAVE_MEMORY_H)
85 check_include_files(stdint.h HAVE_STDINT_H)
86 check_include_files(stdlib.h HAVE_STDLIB_H)
87 check_include_files(strings.h HAVE_STRINGS_H)
88 check_include_files(string.h HAVE_STRING_H)
89 check_include_files(sys/stat.h HAVE_SYS_STAT_H)
90 check_include_files(sys/types.h HAVE_SYS_TYPES_H)
91 check_include_files(unistd.h HAVE_UNISTD_H)
92 set(STDC_HEADER_NAMES
93     assert.h
94     ctype.h
95     errno.h
96     float.h
97     limits.h
98     locale.h
99     math.h
100     setjmp.h
101     signal.h
102     stdarg.h
103     stddef.h
104     stdio.h
105     stdlib.h
106     string.h
107     time.h
108 )
109 check_include_files("${STDC_HEADER_NAMES}" STDC_HEADERS)
110
111 # Config file
112 configure_file(${CMAKE_SOURCE_DIR}/config.h.in.cmake ${CMAKE_BINARY_DIR}/config.h)
113 include_directories(BEFORE ${CMAKE_BINARY_DIR})
114
115 # PkgConfig output
116 set(prefix      ${CMAKE_INSTALL_PREFIX})
117 set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
118 set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
119 set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
120 set(bindir      ${exec_prefix})
121 set(datadir     ${CMAKE_INSTALL_PREFIX}/share)
122
123 # PkgConfig files
124 configure_file(${CMAKE_SOURCE_DIR}/libt2n.pc.in ${CMAKE_BINARY_DIR}/libt2n.pc @ONLY)
125 install(FILES ${CMAKE_BINARY_DIR}/libt2n.pc DESTINATION lib/pkgconfig)
126
127 # Installation of scripts
128 install(PROGRAMS libt2n-gccxml.sh DESTINATION bin)
129
130 # Subdirectories
131 set(CPACK_SET_DESTDIR "ON")
132 add_subdirectory(src)
133 add_subdirectory(test)
134 add_subdirectory(codegen)
135 add_subdirectory(examples EXCLUDE_FROM_ALL)
136 add_subdirectory(examples-codegen EXCLUDE_FROM_ALL)
137
138 include(CPack)