CMakeLists.txt 7.98 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 3.0)
24
project(BELLESIP C CXX)
25

26 27 28

set(PACKAGE "belle-sip")
set(PACKAGE_NAME "${PACKAGE}")
Ghislain MARY's avatar
Ghislain MARY committed
29
set(PACKAGE_VERSION "1.4.2")
30 31 32 33 34 35 36
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "jehan.monnier@linphone.org")
set(PACKAGE_TARNAME "belle-sip")
set(PACKAGE_URL "")
set(VERSION "${PACKAGE_VERSION}")


37
option(ENABLE_RTP_MAP_ALWAYS_IN_SDP "Always include rtpmap in SDP." OFF)
38
option(ENABLE_SERVER_SOCKETS "Enable server sockets" ON)
39
option(ENABLE_STATIC "Build static library (default is shared library)." OFF)
40
option(ENABLE_STRICT "Build with strict compile options." YES)
41 42 43 44 45
option(ENABLE_TLS "Enable TLS support" ON)
option(ENABLE_TUNNEL "Enable tunnel support" OFF)
option(ENABLE_TESTS "Enable compilation of tests" ON)


46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
macro(apply_compile_flags SOURCE_FILES)
	if(${SOURCE_FILES})
		set(options "")
		foreach(a ${ARGV})
			if(STRICT_OPTIONS_${a})
				string(REPLACE ";" " " options_${a} "${STRICT_OPTIONS_${a}}")
				set(options "${options} ${options_${a}}")
			endif()
		endforeach()
		if(options)
			set_source_files_properties(${${SOURCE_FILES}} PROPERTIES COMPILE_FLAGS "${options}")
		endif()
	endif()
endmacro()


62 63 64
include(CheckLibraryExists)
include(CheckSymbolExists)
include(CheckCSourceCompiles)
65
include(CMakePushCheckState)
66 67

set(MSVC_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/MSVC")
68
if(MSVC)
69
	list(APPEND CMAKE_REQUIRED_INCLUDES ${MSVC_INCLUDE_DIR})
70
endif()
71
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
72 73 74 75

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

76
cmake_push_check_state(RESET)
77 78 79 80 81 82 83 84
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)
85
if(HAVE_RES_NDESTROY AND HAVE_RES_GETSERVERS)
86
	set(HAVE_RESINIT 1)
87
endif()
88
cmake_pop_check_state()
89

90 91
find_package(Threads)

92
find_package(Antlr3 REQUIRED)
93 94 95 96 97
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()
98

99 100 101
if(ENABLE_RTP_MAP_ALWAYS_IN_SDP)
	set(BELLE_SDP_FORCE_RTP_MAP 1)
endif()
102
if(ENABLE_TLS)
103
	find_package(PolarSSL REQUIRED)
104 105
	if(POLARSSL_FOUND)
		set(HAVE_POLARSSL 1)
106 107
	endif()
endif()
108
if(ENABLE_TUNNEL)
109 110 111 112 113
	if(LINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS)
		include("${EP_tunnel_CONFIG_DIR}/TunnelConfig.cmake")
	else()
		find_package(Tunnel)
	endif()
114 115 116 117 118 119 120 121
	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()
if(ENABLE_TESTS)
122 123 124 125 126
	find_package(CUnit)
	if(CUNIT_FOUND)
		check_library_exists(${CUNIT_LIBRARIES} "CU_add_suite" "" HAVE_CU_ADD_SUITE)
		check_library_exists(${CUNIT_LIBRARIES} "CU_get_suite" "" HAVE_CU_GET_SUITE)
		check_library_exists(${CUNIT_LIBRARIES} "CU_curses_run_tests" "" HAVE_CU_CURSES)
127
	else()
128 129
		message(WARNING "Could not find cunit framework, tests will not be compiled.")
		set(ENABLE_TESTS OFF CACHE BOOL "Enable compilation of tests" FORCE)
130 131
	endif()
endif()
132 133 134 135 136


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


137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
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")
if(CUNIT_FOUND)
	set(REQUIRES_PRIVATE "${REQUIRES_PRIVATE} cunit")
endif()
if(HAVE_POLARSSL)
	get_filename_component(polarssl_library_path "${POLARSSL_LIBRARIES}" PATH)
	set(LIBS_PRIVATE "${LIBS_PRIVATE} -L${polarssl_library_path} -lpolarssl")
endif()
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)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/belle-sip.pc DESTINATION lib/pkgconfig)


160
include_directories(
161
	include
162
	src
163
	${CMAKE_CURRENT_BINARY_DIR}
164
	${CMAKE_CURRENT_BINARY_DIR}/src
165
	${POLARSSL_INCLUDE_DIRS}
166
)
167 168 169 170 171 172
if(TUNNEL_FOUND)
	include_directories(${TUNNEL_INCLUDE_DIRS})
endif()
if(CUNIT_FOUND)
	include_directories(${CUNIT_INCLUDE_DIRS})
endif()
173
if(MSVC)
174
	include_directories(${MSVC_INCLUDE_DIR})
175
endif()
176

177 178 179
add_definitions("-DHAVE_CONFIG_H")
set(STRICT_OPTIONS_CPP )
set(STRICT_OPTIONS_C )
180
set(STRICT_OPTIONS_OBJC "-fmodules")
181
if(NOT MSVC)
182
	list(APPEND STRICT_OPTIONS_CPP "-Wall" "-Wuninitialized")
Ghislain MARY's avatar
Ghislain MARY committed
183
	if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
184
		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
185
	elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
186
		list(APPEND STRICT_OPTIONS_CPP "-Wno-error=pragmas")
187
	endif()
188 189 190 191 192
	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)
		list(APPEND STRICT_OPTIONS_CPP "-Werror" "-Wno-error=unknown-pragmas" "-Wuninitialized" "-fno-strict-aliasing")
193
		list(APPEND STRICT_OPTIONS_C "-Wdeclaration-after-statement" "-Wstrict-prototypes" "-Wno-error=strict-prototypes")
194
	endif()
195 196
endif()
if(STRICT_OPTIONS_CPP)
197
	list(REMOVE_DUPLICATES STRICT_OPTIONS_CPP)
198 199 200
endif()
if(STRICT_OPTIONS_C)
	list(REMOVE_DUPLICATES STRICT_OPTIONS_C)
201
endif()
202
set(LINK_FLAGS )
203
if(APPLE)
204 205 206 207
	list(APPEND LINK_FLAGS "-framework Foundation")
	if(IOS)
		list(APPEND LINK_FLAGS "-framework CoreFoundation" "-framework CFNetwork" "-framework UIKit")
	endif()
208
endif()
209
string(REPLACE ";" " " LINK_FLAGS_STR "${LINK_FLAGS}")
210
if(WIN32)
211 212 213 214
	add_definitions(
		-DBELLESIP_EXPORTS
		-DBELLESIP_INTERNAL_EXPORTS
	)
215
endif()
Ghislain MARY's avatar
Ghislain MARY committed
216
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone")
217 218 219 220 221
	add_definitions(
		-DHAVE_COMPILER_TLS
		-DUSE_FIXED_NAMESERVERS
	)
endif()
222

223

224 225 226 227 228 229 230
if(LINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS)
	set(EXPORT_TARGETS_NAME "LinphoneBuilder")
else()
	set(EXPORT_TARGETS_NAME "BelleSIP")
endif()


231 232
add_subdirectory(include)
add_subdirectory(src)
233

234

235
if(ENABLE_TESTS)
236 237
	enable_testing()
	add_subdirectory(tester)
238
endif()
239 240 241 242 243 244 245 246


include(CMakePackageConfigHelpers)
write_basic_package_version_file(
	"${CMAKE_CURRENT_BINARY_DIR}/BelleSIPConfigVersion.cmake"
	VERSION ${PACKAGE_VERSION}
	COMPATIBILITY AnyNewerVersion
)
247
export(EXPORT ${EXPORT_TARGETS_NAME}Targets
248 249
	FILE "${CMAKE_CURRENT_BINARY_DIR}/BelleSIPTargets.cmake"
)
250
configure_file(cmake/BelleSIPConfig.cmake.in
251
	"${CMAKE_CURRENT_BINARY_DIR}/BelleSIPConfig.cmake"
252
	@ONLY
253 254 255
)

set(ConfigPackageLocation lib/cmake/BelleSIP)
256
install(EXPORT ${EXPORT_TARGETS_NAME}Targets
257 258 259 260
	FILE BelleSIPTargets.cmake
	DESTINATION ${ConfigPackageLocation}
)
install(FILES
261
	"${CMAKE_CURRENT_BINARY_DIR}/BelleSIPConfig.cmake"
262 263 264
	"${CMAKE_CURRENT_BINARY_DIR}/BelleSIPConfigVersion.cmake"
	DESTINATION ${ConfigPackageLocation}
)