CMakeLists.txt 8.44 KB
Newer Older
jehan's avatar
jehan committed
1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# 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
19
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 21 22
#
############################################################################

23
cmake_minimum_required(VERSION 3.0)
Ghislain MARY's avatar
Ghislain MARY committed
24
project(belle-sip VERSION 1.6.3 LANGUAGES C CXX)
25

26

27 28 29
set(PACKAGE "${PROJECT_NAME}")
set(PACKAGE_NAME "${PROJECT_NAME}")
set(PACKAGE_VERSION "${PROJECT_VERSION}")
30 31
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "jehan.monnier@linphone.org")
32
set(PACKAGE_TARNAME "${PROJECT_NAME}")
33 34 35 36
set(PACKAGE_URL "")
set(VERSION "${PACKAGE_VERSION}")


37 38
option(ENABLE_SHARED "Build shared library." YES)
option(ENABLE_STATIC "Build static library." YES)
39
option(ENABLE_RTP_MAP_ALWAYS_IN_SDP "Always include rtpmap in SDP." OFF)
40
option(ENABLE_STRICT "Build with strict compile options." YES)
41 42
option(ENABLE_TUNNEL "Enable tunnel support" OFF)
option(ENABLE_TESTS "Enable compilation of tests" ON)
43
option(ENABLE_MDNS "Enable multicast DNS" OFF)
44 45 46 47 48


include(CheckLibraryExists)
include(CheckSymbolExists)
include(CheckCSourceCompiles)
49
include(CMakePushCheckState)
50 51 52 53 54 55
include(GNUInstallDirs)

if(NOT CMAKE_INSTALL_RPATH AND CMAKE_INSTALL_PREFIX)
	set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
	message(STATUS "Setting install rpath to ${CMAKE_INSTALL_RPATH}")
endif()
56 57

set(MSVC_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/MSVC")
58
if(MSVC)
59
	list(APPEND CMAKE_REQUIRED_INCLUDES ${MSVC_INCLUDE_DIR})
60
endif()
61
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
62 63

check_library_exists("dl" "dlopen" "" HAVE_LIBDL)
64
check_library_exists("rt" "clock_gettime" "" HAVE_LIBRT)
65

66
cmake_push_check_state(RESET)
67 68 69 70 71 72 73 74
check_symbol_exists("res_ndestroy" "resolv.h" HAVE_RES_NDESTROY)
set(CMAKE_REQUIRED_LIBRARIES resolv)
check_c_source_compiles("#include <resolv.h>
int main(int argc, char *argv[]) {
res_getservers(NULL,NULL,0);
return 0;
}"
	HAVE_RES_GETSERVERS)
75
if(HAVE_RES_NDESTROY AND HAVE_RES_GETSERVERS)
76
	set(HAVE_RESINIT 1)
77
endif()
78
cmake_pop_check_state()
79

80 81
find_package(Threads)

Ghislain MARY's avatar
Ghislain MARY committed
82
find_package(Zlib)
83
find_package(Antlr3 REQUIRED)
84 85 86 87 88
cmake_push_check_state(RESET)
set(CMAKE_REQUIRED_INCLUDES ${ANTLR3C_INCLUDE_DIRS})
set(CMAKE_REQUIRED_LIBRARIES ${ANTLR3C_LIBRARIES})
check_symbol_exists("antlr3StringStreamNew" "antlr3.h" HAVE_ANTLR_STRING_STREAM_NEW)
cmake_pop_check_state()
89

90 91 92
if(ENABLE_RTP_MAP_ALWAYS_IN_SDP)
	set(BELLE_SDP_FORCE_RTP_MAP 1)
endif()
93

jehan's avatar
jehan committed
94
if(LINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS)
95
	set(BcToolbox_FIND_COMPONENTS tester)
jehan's avatar
jehan committed
96 97
	include("${EP_bctoolbox_CONFIG_DIR}/BcToolboxConfig.cmake")
else()
Benjamin REIS's avatar
Benjamin REIS committed
98
	find_package(BcToolbox 0.5.0 REQUIRED OPTIONAL_COMPONENTS tester)
jehan's avatar
jehan committed
99
endif()
100

101
if(ENABLE_TUNNEL)
102 103 104 105 106
	if(LINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS)
		include("${EP_tunnel_CONFIG_DIR}/TunnelConfig.cmake")
	else()
		find_package(Tunnel)
	endif()
107 108 109 110 111 112 113
	if(TUNNEL_FOUND)
		set(HAVE_TUNNEL 1)
	else()
		message(WARNING "Could not find the tunnel library!")
		set(ENABLE_TUNNEL OFF CACHE BOOL "Enable tunnel support" FORCE)
	endif()
endif()
Ghislain MARY's avatar
Ghislain MARY committed
114 115 116
if(ZLIB_FOUND)
	set(HAVE_ZLIB 1)
endif()
117

118 119 120 121 122 123 124
if(ENABLE_MDNS)
	find_package(DNSSD REQUIRED)
	if(DNSSD_FOUND)
		set(HAVE_MDNS 1)
	endif()
endif()

125 126 127 128

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)


129 130 131 132 133 134
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${prefix}/bin)
set(libdir ${prefix}/lib)
set(includedir ${prefix}/include)
get_filename_component(antlr3c_library_path "${ANTLR3C_LIBRARIES}" PATH)
set(LIBS_PRIVATE "-L${antlr3c_library_path} -lantlr3c")
135
get_filename_component(bctoolbox_library_path "${BCTOOLBOX_CORE_LIBRARIES}" PATH)
136
set(LIBS_PRIVATE "${LIBS_PRIVATE} -L${bctoolbox_library_path} -lbctoolbox")
Ghislain MARY's avatar
Ghislain MARY committed
137 138 139
if(ZLIB_FOUND)
	set(REQUIRES_PRIVATE "${REQUIRES_PRIVATE} z")
endif()
140 141 142 143 144 145 146
if(HAVE_LIBDL)
	set(LIBS_PRIVATE "${LIBS_PRIVATE} -ldl")
endif()
if(HAVE_LIBRT)
	set(LIBS_PRIVATE "${LIBS_PRIVATE} -lrt")
endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/belle-sip.pc.in ${CMAKE_CURRENT_BINARY_DIR}/belle-sip.pc)
147
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/belle-sip.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
148 149


150
include_directories(
151
	include
152
	src
153
	${CMAKE_CURRENT_BINARY_DIR}
154
	${CMAKE_CURRENT_BINARY_DIR}/src
155
	${BCTOOLBOX_CORE_INCLUDE_DIRS}
156
)
157 158 159
if(TUNNEL_FOUND)
	include_directories(${TUNNEL_INCLUDE_DIRS})
endif()
Ghislain MARY's avatar
Ghislain MARY committed
160 161 162
if(ZLIB_FOUND)
	include_directories(${ZLIB_INCLUDE_DIRS})
endif()
163 164 165
if(DNSSD_FOUND)
	include_directories(${DNSSD_INCLUDE_DIRS})
endif()
166
if(MSVC)
167
	include_directories(${MSVC_INCLUDE_DIR})
168
endif()
169

170 171 172
add_definitions("-DHAVE_CONFIG_H")
set(STRICT_OPTIONS_CPP )
set(STRICT_OPTIONS_C )
173
set(STRICT_OPTIONS_OBJC "-fmodules")
174 175 176 177 178 179 180
if(MSVC)
	list(APPEND STRICT_OPTIONS_CPP "/wd4068") # Disable "unknown pragma" warnings from antlr
	list(APPEND STRICT_OPTIONS_CPP "/wd4129") # Disable "unrecognized character escape sequence" warnings from antlr
	if(ENABLE_STRICT)
		list(APPEND STRICT_OPTIONS_CPP "/WX")
	endif()
else()
181
	list(APPEND STRICT_OPTIONS_CPP "-Wall" "-Wuninitialized" "-Wno-error=deprecated-declarations")
182
	if(CMAKE_C_COMPILER_ID MATCHES "Clang")
183
		list(APPEND STRICT_OPTIONS_CPP "-Wno-error=unknown-warning-option" "-Qunused-arguments" "-Wno-tautological-compare" "-Wno-builtin-requires-header" "-Wno-unused-function" "-Wno-gnu-designator" "-Wno-array-bounds")
Ghislain MARY's avatar
Ghislain MARY committed
184
	elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
185
		list(APPEND STRICT_OPTIONS_CPP "-Wno-error=pragmas")
186
	endif()
187 188 189 190
	if(APPLE)
		list(APPEND STRICT_OPTIONS_CPP "-Wno-error=unknown-warning-option" "-Qunused-arguments" "-Wno-tautological-compare" "-Wno-unused-function" "-Wno-array-bounds")
	endif()
	if(ENABLE_STRICT)
191
		list(APPEND STRICT_OPTIONS_CPP "-Werror" "-Wextra" "-Wno-unused-parameter" "-Wno-error=unknown-pragmas" "-Wuninitialized" "-fno-strict-aliasing")
192
		list(APPEND STRICT_OPTIONS_C "-Wstrict-prototypes -Wno-missing-field-initializers" "-Wno-error=unused-result")
193
	endif()
194
	# this warning is generated by antlr so ignore it for now
195
	list(APPEND STRICT_OPTIONS_C "-Wno-strict-prototypes" "-Wno-error=sign-compare")
196 197
endif()
if(STRICT_OPTIONS_CPP)
198
	list(REMOVE_DUPLICATES STRICT_OPTIONS_CPP)
199 200 201
endif()
if(STRICT_OPTIONS_C)
	list(REMOVE_DUPLICATES STRICT_OPTIONS_C)
202
endif()
203
set(LINK_FLAGS )
204
if(APPLE)
205 206 207 208
	list(APPEND LINK_FLAGS "-framework Foundation")
	if(IOS)
		list(APPEND LINK_FLAGS "-framework CoreFoundation" "-framework CFNetwork" "-framework UIKit")
	endif()
209
endif()
210
string(REPLACE ";" " " LINK_FLAGS_STR "${LINK_FLAGS}")
211 212 213 214

set(BELLESIP_CPPFLAGS ${BCTOOLBOX_CPPFLAGS})
if(ENABLE_STATIC)
	list(APPEND BELLESIP_CPPFLAGS "-DBELLESIP_STATIC")
215
endif()
216
if(BELLESIP_CPPFLAGS)
Ghislain MARY's avatar
Ghislain MARY committed
217
	list(REMOVE_DUPLICATES BELLESIP_CPPFLAGS)
218 219 220 221
	add_definitions(${BELLESIP_CPPFLAGS})
endif()
add_definitions("-DBELLESIP_EXPORTS")

222
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" OR CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
223 224 225
	add_definitions(
		-DHAVE_COMPILER_TLS
		-DUSE_FIXED_NAMESERVERS
226
		-DUSE_GETADDRINFO_FALLBACK
227 228
	)
endif()
229

230

231 232 233 234 235 236 237
if(LINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS)
	set(EXPORT_TARGETS_NAME "LinphoneBuilder")
else()
	set(EXPORT_TARGETS_NAME "BelleSIP")
endif()


238 239
add_subdirectory(include)
add_subdirectory(src)
240

241

242
if(ENABLE_TESTS AND BCTOOLBOX_TESTER_FOUND)
243 244
	enable_testing()
	add_subdirectory(tester)
245
endif()
246 247 248 249 250 251 252 253


include(CMakePackageConfigHelpers)
write_basic_package_version_file(
	"${CMAKE_CURRENT_BINARY_DIR}/BelleSIPConfigVersion.cmake"
	VERSION ${PACKAGE_VERSION}
	COMPATIBILITY AnyNewerVersion
)
254
export(EXPORT ${EXPORT_TARGETS_NAME}Targets
255 256
	FILE "${CMAKE_CURRENT_BINARY_DIR}/BelleSIPTargets.cmake"
)
257
configure_file(cmake/BelleSIPConfig.cmake.in
258
	"${CMAKE_CURRENT_BINARY_DIR}/BelleSIPConfig.cmake"
259
	@ONLY
260 261
)

262
set(CONFIG_PACKAGE_LOCATION "${CMAKE_INSTALL_DATADIR}/BelleSIP/cmake")
263
install(EXPORT ${EXPORT_TARGETS_NAME}Targets
264
	FILE BelleSIPTargets.cmake
265
	DESTINATION ${CONFIG_PACKAGE_LOCATION}
266 267
)
install(FILES
268
	"${CMAKE_CURRENT_BINARY_DIR}/BelleSIPConfig.cmake"
269
	"${CMAKE_CURRENT_BINARY_DIR}/BelleSIPConfigVersion.cmake"
270
	DESTINATION ${CONFIG_PACKAGE_LOCATION}
271
)
272

jehan's avatar
jehan committed
273
add_subdirectory(build)