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