CMakeLists.txt 6.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
############################################################################
# CMakeLists.txt
# Copyright (C) 2014  Belledonne Communications, Grenoble France
#
############################################################################
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
############################################################################

23
cmake_minimum_required(VERSION 2.6)
Ghislain MARY's avatar
Ghislain MARY committed
24
project(ORTP C)
25

26 27

set(ORTP_MAJOR_VERSION "0")
28 29
set(ORTP_MINOR_VERSION "23")
set(ORTP_MICRO_VERSION "0")
30
set(ORTP_VERSION "${ORTP_MAJOR_VERSION}.${ORTP_MINOR_VERSION}.${ORTP_MICRO_VERSION}")
31
set(ORTP_SO_VERSION "9")
32 33 34 35 36 37 38 39 40 41


option(ENABLE_STATIC "Build static library (default is shared library)." NO)
option(ENABLE_NTP_TIMESTAMP "Turn on NTP timestamping on packet reception." NO)
option(ENABLE_PERF "Disable costly features to reduce cpu consumtion and increase performance." NO)
option(ENABLE_TESTS "Enable compilation of test programs." NO)
set(CACHE WITH_THREAD_STACK_SIZE "0" CACHE STRING "Set thread stack size (0 is the OS default).")


list(APPEND CMAKE_MODULE_PATH ${CMAKE_PREFIX_PATH}/share/cmake/Modules)
42
find_package(Doxygen)
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134


include(CheckCSourceCompiles)
include(CheckIncludeFile)
include(CheckLibraryExists)
include(CheckFunctionExists)
if("${CMAKE_VERSION}" VERSION_GREATER "2.8.5")
	include(CMakePushCheckState)
endif()

if(MSVC)
	list(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_PREFIX_PATH}/include/MSVC)
endif()

find_package(Threads)

check_include_file(inttypes.h HAVE_INTTYPES_H)
check_include_file(memory.h HAVE_MEMORY_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(stdlib.h HAVE_STDLIB_H)
check_include_file(strings.h HAVE_STRINGS_H)
check_include_file(string.h HAVE_STRING_H)
check_include_file(sys/stat.h HAVE_SYS_STAT_H)
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(poll.h HAVE_POLL_H)
check_include_file(sys/poll.h HAVE_SYS_POLL_H)
check_include_file(sys/uio.h HAVE_SYS_UIO_H)
check_include_file(fcntl.h HAVE_FCNTL_H)
check_include_file(sys/time.h HAVE_SYS_TIME_H)
check_include_file(unistd.h HAVE_UNISTD_H)
check_include_file(sys/audio.h HAVE_SYS_AUDIO_H)
check_include_file(linux/soundcard.h HAVE_LINUX_SOUNDCARD_H)
check_include_file(sys/shm.h HAVE_SYS_SHM_H)
check_include_file(windows.h HAVE_WINDOWS_H)
if(HAVE_WINDOWS_H)
	check_include_file(winsock2.h HAVE_WINSOCK2_H)
endif()

if(MSVC)
	if("${CMAKE_VERSION}" VERSION_GREATER "2.8.5")
		cmake_push_check_state(RESET)
	else()
		set(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
	endif()
	set(CMAKE_REQUIRED_LIBRARIES ws2_32)
	check_c_source_compiles("#include <winsock2.h>
int main(int argc, char *argv[]) {
select(0, 0, 0, 0, 0);
return 0;
}"
	HAVE_SELECT)
	check_c_source_compiles("#include <winsock2.h>
int main(int argc, char *argv[]) {
socket(0, 0, 0);
return 0;
}"
	HAVE_SOCKET)
	check_c_source_compiles("#include <winsock2.h>
int main(int argc, char *argv[]) {
strerror(0);
return 0;
}"
	HAVE_STRERROR)
	if("${CMAKE_VERSION}" VERSION_GREATER "2.8.5")
		cmake_pop_check_state()
	else()
		set(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES})
	endif()
else()
	check_function_exists("select" HAVE_SELECT)
	check_function_exists("socket" HAVE_SOCKET)
	check_function_exists("strerror" HAVE_STRERROR)
endif()
if(NOT HAVE_SELECT)
	message(FATAL_ERROR "select has not been found")
endif()
if(NOT HAVE_SOCKET)
	message(FATAL_ERROR "socket has not been found")
endif()
if(NOT HAVE_STRERROR)
	message(FATAL_ERROR "strerror has not been found")
endif()
check_function_exists(seteuid HAVE_SETEUID)
check_function_exists(arc4random HAVE_ARC4RANDOM)

check_library_exists("rt" "clock_gettime" "" HAVE_LIBRT)

include(TestBigEndian)
test_big_endian(WORDS_BIGENDIAN)
if(WORDS_BIGENDIAN)
	set(ORTP_BIGENDIAN 1)
endif()
135

136

137 138 139
include_directories(
	include/
	src/
140
	${CMAKE_CURRENT_BINARY_DIR}
141
)
142 143 144 145 146
if(MSVC)
	include_directories(${CMAKE_PREFIX_PATH}/include/MSVC)
endif()


147 148 149
if(ENABLE_STATIC)
	set(ORTP_STATIC 1)
endif()
150 151 152 153 154 155 156 157 158 159 160 161
if(ENABLE_PERF)
	set(PERF 1)
endif()
if(ENABLE_NTP_TIMESTAMP)
	set(ORTP_TIMESTAMP 1)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
	set(ORTP_DEBUG_MODE 1)
endif()
if(CMAKE_USE_PTHREADS_INIT)
	set(ORTP_DEFAULT_THREAD_STACK_SIZE ${WITH_THREAD_STACK_SIZE})
endif()
162 163 164
if(APPLE)
	set(__APPLE_USE_RFC_2292 1)
endif()
165
set(POSIXTIMER_INTERVAL 10000)
166
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ortp-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/ortp-config.h)
167
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/ortp-config.h PROPERTIES GENERATED ON)
168
add_definitions(-DHAVE_CONFIG_H)
169 170 171 172 173 174 175 176
if(NOT MSVC)
	add_definitions(-Wall -Wno-error=unknown-pragmas)
	if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
		add_definitions(-Werror -Wno-error=unknown-warning-option -Qunused-arguments -Wno-tautological-compare)
	elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
		add_definitions(-Werror -Wno-error=pragmas)
	endif()
endif()
177

178 179
add_subdirectory(include)
add_subdirectory(src)
180

181 182 183 184 185

set(ORTP_CPPFLAGS )
if(ORTP_STATIC)
	list(APPEND ORTP_CPPFLAGS "-DORTP_STATIC")
endif()
186
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/FindORTP.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FindORTP.cmake @ONLY)
187 188 189 190 191 192
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FindORTP.cmake
	DESTINATION share/cmake/Modules
	PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)


193 194 195
if(DOXYGEN_FOUND)
	set(srcdir ${CMAKE_CURRENT_SOURCE_DIR})
	configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ortp.doxygen.in ${CMAKE_CURRENT_BINARY_DIR}/ortp.doxygen)
196 197 198 199 200 201 202 203 204 205
	file(GLOB DOC_INPUT_FILES
		include/ortp/[^.]*.h
		src/[^.]*.h
		src/[^.]*.c
	)
	add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/doc/html/index.html"
		COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/ortp.doxygen
		DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ortp.doxygen ${DOC_INPUT_FILES}
	)
	add_custom_target(html-doc ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/doc/html/index.html")
206 207
	install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/doc/html"
		DESTINATION "${CMAKE_INSTALL_PREFIX}/share/doc/oRTP-${ORTP_VERSION}")
208
endif()
209 210 211 212 213 214 215 216 217 218 219 220 221 222




set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${prefix}/bin)
set(libdir ${prefix}/lib)
set(includedir ${prefix}/include)
set(ORTP_PKGCONFIG_VERSION "${ORTP_VERSION}")
set(ORTPDEPS_LIBS )

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ortp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/ortp.pc)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ortp.pc DESTINATION lib/pkgconfig)