forked from Kurento/kms-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
148 lines (123 loc) · 5.26 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
cmake_minimum_required(VERSION 2.8)
project("kms-core")
message(STATUS "CMake project: ${PROJECT_NAME}")
# Test configuration
set(GENERATE_TESTS FALSE CACHE BOOL "Always build tests: add `make check_build` to normal `make` calls")
set(DISABLE_TESTS FALSE CACHE BOOL "Enable running `make check` during the building process")
set(VALGRIND_NUM_CALLERS 20 CACHE STRING "Valgrind option: maximum number of entries shown in stack traces")
set(ENABLE_EXPERIMENTAL_TESTS OFF CACHE BOOL "Enable tests that are not yet stable")
message("If KurentoHelpers is not found, you need to install 'kms-cmake-utils' from the Kurento repository")
find_package(KurentoHelpers REQUIRED)
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
include(CodeGenerator)
get_values_from_model(PREFIX VALUE MODELS ${CMAKE_CURRENT_SOURCE_DIR}/src/server/interface KEYS version)
include(KurentoGitHelpers)
install_git_hook(pre-commit ${CMAKE_CURRENT_SOURCE_DIR}/hooks/pre-commit.hook)
get_git_version(PROJECT_VERSION ${VALUE_VERSION})
message(STATUS "Project version: ${PROJECT_NAME}-${PROJECT_VERSION}")
# Compiler flags
include(CommonBuildFlags)
common_buildflags_set()
#common_buildflags_print()
# Development: Add here exceptions to the "Warnings are Errors" rule.
# Also, DOCUMENT WHY and always remove them as soon as the problem is fixed.
# For example:
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=unused-function")
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=unused-variable")
# FIXME Disable error when macros __TIME__, __DATE__ or __TIMESTAMP__ are encountered
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-Wno-error=date-time" HAS_WARNING_DATE_TIME)
if(HAS_WARNING_DATE_TIME)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=date-time")
endif()
# Decide between std::regex or boost::regex
include(CheckCXXSourceCompiles)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_CXX_FLAGS}")
check_cxx_source_compiles("
#include <iostream>
#include <regex>
int main() {
std::regex re(\"//*\");
std::string orig = \"//\";
std::cout << std::regex_replace(orig, re, \"/\") << std::endl;
return 0;
}"
HAS_STD_REGEX_REPLACE
)
unset(CMAKE_REQUIRED_FLAGS)
# Detect if pthread_setname is available
include(CheckCSourceCompiles)
set(CMAKE_REQUIRED_LIBRARIES pthread)
check_c_source_compiles("
#include <pthread.h>
int main() {
pthread_setname_np((pthread_t)0, (const char *)0);
return 0;
}"
HAVE_PTHREAD_SETNAME_NP_WITH_TID
)
unset(CMAKE_REQUIRED_LIBRARIES)
if(${HAVE_PTHREAD_SETNAME_NP_WITH_TID})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_PTHREAD_SETNAME_NP_WITH_TID")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_PTHREAD_SETNAME_NP_WITH_TID")
endif()
# Generate file "config.h"
set(VERSION ${PROJECT_VERSION})
set(PACKAGE ${PROJECT_NAME})
set(GETTEXT_PACKAGE "kms-core")
set(MANUAL_CHECK OFF CACHE BOOL "Tests will generate files")
include(GNUInstallDirs)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_CONFIG_H")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_CONFIG_H")
if(MSYS)
# MSYS2 comes only with the stable version of GStreamer.
set(GST_VERSION 1.0)
else()
set(GST_VERSION 1.5)
endif()
set(GST_REQUIRED ^1.7.1)
set(JSON_RPC_REQUIRED ^6.7.0)
set(SIGCPP_REQUIRED ^2.0.10)
set(GLIBMM_REQUIRED ^2.37)
include(GenericFind)
if(${HAS_STD_REGEX_REPLACE})
set(BOOST_REQUIRED_COMPONENTS "filesystem system thread")
generic_find(LIBNAME Boost REQUIRED COMPONENTS filesystem system thread unit_test_framework)
else()
set(BOOST_REQUIRED_COMPONENTS "filesystem regex system thread")
generic_find(LIBNAME Boost REQUIRED COMPONENTS filesystem regex system thread unit_test_framework)
endif()
generic_find(LIBNAME gstreamer-${GST_VERSION} VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-base-${GST_VERSION} VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-video-${GST_VERSION} VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-check-${GST_VERSION} VERSION ${GST_REQUIRED})
generic_find(LIBNAME gstreamer-sdp-${GST_VERSION} VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-pbutils-${GST_VERSION} VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-rtp-${GST_VERSION} VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME KmsJsonRpc VERSION ${JSON_RPC_REQUIRED} REQUIRED)
generic_find(LIBNAME sigc++-2.0 VERSION ${SIGCPP_REQUIRED} REQUIRED)
generic_find(LIBNAME glibmm-2.4 VERSION ${GLIBMM_REQUIRED} REQUIRED)
generic_find(LIBNAME uuid REQUIRED)
if(MSYS)
# MSYS2 installs as part of the Linux utils its own variant of libuuid that is
# not compatible with the expected one. Specify explicitly where to look for it.
set(uuid_LIBRARIES -L"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" ${uuid_LIBRARIES})
endif()
find_package(LibVpx REQUIRED)
set(CMAKE_INSTALL_GST_PLUGINS_DIR ${CMAKE_INSTALL_LIBDIR}/gstreamer-${GST_VERSION})
enable_testing()
add_subdirectory(src)
add_subdirectory(tests)
install(
FILES "${CMAKE_CURRENT_SOURCE_DIR}/CMake/CodeGenerator.cmake"
DESTINATION ${CMAKE_MODULES_INSTALL_DIR}
)
install(
FILES "${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindMaven.cmake"
DESTINATION ${CMAKE_MODULES_INSTALL_DIR}
)
install(
FILES "${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindNpm.cmake"
DESTINATION ${CMAKE_MODULES_INSTALL_DIR}
)