From a84369490945186fcdf0825fee9937039cb7defb Mon Sep 17 00:00:00 2001
From: Julien Wadel <julien.wadel@belledonne-communications.com>
Date: Tue, 20 Apr 2021 19:37:50 +0200
Subject: [PATCH] Prepare the CMakeLists.txt for new Flexisp build and
 packaging scripts

* Require CMake 3.13 or later
* Adding DISABLE_BC_PACKAGE_SEARCH hidden variable
* Export linphone and linphone++ targets on configure stage only when LINPHONE_BUILDER_GROUP feature is on.
---
 CMakeLists.txt              | 42 +++++++++++++++++++++++++------------
 coreapi/CMakeLists.txt      |  1 +
 daemon/CMakeLists.txt       |  2 +-
 src/CMakeLists.txt          | 14 ++++++++++---
 wrappers/cpp/CMakeLists.txt | 23 +++++++++++---------
 5 files changed, 55 insertions(+), 27 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 322432e3b4..316c05b082 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,7 +20,11 @@
 #
 ############################################################################
 
-cmake_minimum_required(VERSION 3.1)
+
+# CMake 3.13 required for new Flexisip build process.
+# See [CMP077](https://cmake.org/cmake/help/v3.13/policy/CMP0077.html).
+cmake_minimum_required(VERSION 3.13)
+
 project(linphone VERSION 4.5.0 LANGUAGES C CXX)
 
 
@@ -72,6 +76,9 @@ option(ENABLE_PACKAGE_SOURCE "Create 'package_source' target for source archive
 cmake_dependent_option(ENABLE_NOTIFY "Enable libnotify support." YES "ENABLE_GTK_UI;NOT APPLE" NO)
 cmake_dependent_option(ENABLE_ASSISTANT "Turn on assistant compiling." YES "ENABLE_GTK_UI" NO)
 
+# Hidden non-cache options:
+# * DISABLE_BC_PACKAGE_SEARCH: skip find_package() for every BC package (bctoolbox, ortp, etc.)
+
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_EXTENSIONS NO)
 
@@ -122,11 +129,13 @@ if (ENABLE_VCARD)
 	endif()
 endif()
 
-find_package(BelleSIP CONFIG REQUIRED)
-find_package(Mediastreamer2 CONFIG REQUIRED)
-find_package(ortp CONFIG REQUIRED)
-find_package(bctoolbox 0.0.3 CONFIG REQUIRED OPTIONAL_COMPONENTS tester)
-find_package(belr CONFIG REQUIRED)
+if(NOT DISABLE_BC_PACKAGE_SEARCH)
+	find_package(BelleSIP CONFIG REQUIRED)
+	find_package(Mediastreamer2 CONFIG REQUIRED)
+	find_package(ortp CONFIG REQUIRED)
+	find_package(bctoolbox 0.0.3 CONFIG REQUIRED OPTIONAL_COMPONENTS tester)
+	find_package(belr CONFIG REQUIRED)
+endif()
 
 if(ENABLE_ADVANCED_IM)
 	find_package(XercesC REQUIRED)
@@ -139,11 +148,16 @@ find_package(Sqlite3 REQUIRED)
 find_package(XML2 REQUIRED)
 
 if (ENABLE_DB_STORAGE)
-	#APPLE platform does not use dlopen for soci backend
-	if (APPLE OR ANDROID)
-		find_package(Soci REQUIRED COMPONENTS sqlite3)
+	if(NOT DISABLE_SOCI_PACKAGE_SEARCH)
+		#APPLE platform does not use dlopen for soci backend
+		if (APPLE OR ANDROID)
+			find_package(Soci REQUIRED COMPONENTS sqlite3)
+		else()
+			find_package(Soci REQUIRED)
+		endif()
 	else()
-		find_package(Soci REQUIRED)
+		set(SOCI_FOUND YES)
+		set(SOCI_LIBRARIES "soci_core")
 	endif()
 	set(HAVE_DB_STORAGE 1)
 endif()
@@ -402,9 +416,11 @@ write_basic_package_version_file(
 	VERSION ${LINPHONE_VERSION}
 	COMPATIBILITY AnyNewerVersion
 )
-export(EXPORT ${EXPORT_TARGETS_NAME}Targets
-	FILE "${CMAKE_CURRENT_BINARY_DIR}/LinphoneTargets.cmake"
-)
+if(LINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS)
+	export(EXPORT ${EXPORT_TARGETS_NAME}Targets
+		FILE "${CMAKE_CURRENT_BINARY_DIR}/LinphoneTargets.cmake"
+	)
+endif()
 configure_package_config_file(cmake/LinphoneConfig.cmake.in
 	"${CMAKE_CURRENT_BINARY_DIR}/LinphoneConfig.cmake"
 	INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION}
diff --git a/coreapi/CMakeLists.txt b/coreapi/CMakeLists.txt
index b665e0c12d..f21fb54933 100644
--- a/coreapi/CMakeLists.txt
+++ b/coreapi/CMakeLists.txt
@@ -161,6 +161,7 @@ if (ENABLE_SHARED)
 		${LINPHONE_PRIVATE_HEADER_FILES} ${LINPHONE_SOURCE_FILES_C} ${LINPHONE_SOURCE_FILES_CXX} ${LINPHONE_SOURCE_FILES_OBJC}
 	)
 	target_include_directories(linphone-coreapi PRIVATE ${LINPHONE_INCLUDE_DIRS})
+	target_link_libraries(linphone-coreapi PRIVATE ortp mediastreamer bellesip belr)
 	target_compile_options(linphone-coreapi PRIVATE "-fPIC")
 	add_dependencies(linphone-coreapi liblinphone-git-version)
 	if (ENABLE_JAVA_WRAPPER)
diff --git a/daemon/CMakeLists.txt b/daemon/CMakeLists.txt
index dba1788e7d..c1cd710193 100644
--- a/daemon/CMakeLists.txt
+++ b/daemon/CMakeLists.txt
@@ -118,7 +118,7 @@ bc_apply_compile_flags(DAEMON_SOURCE_FILES STRICT_OPTIONS_CPP STRICT_OPTIONS_CXX
 bc_apply_compile_flags(DAEMON_PIPETEST_SOURCE_FILES STRICT_OPTIONS_CPP STRICT_OPTIONS_C)
 add_executable(linphone-daemon ${DAEMON_SOURCE_FILES})
 target_include_directories(linphone-daemon PRIVATE ${CMAKE_CURRENT_LIST_DIR} ${LINPHONE_INCLUDE_DIRS})
-target_link_libraries(linphone-daemon ${LINPHONE_LIBS_FOR_TOOLS} mediastreamer ortp bctoolbox ${XSD_LIBRARIES})
+target_link_libraries(linphone-daemon ${LINPHONE_LIBS_FOR_TOOLS} mediastreamer ortp bctoolbox bellesip ${XSD_LIBRARIES})
 set_target_properties(linphone-daemon PROPERTIES LINK_FLAGS "${LINPHONE_LDFLAGS}")
 set_target_properties(linphone-daemon PROPERTIES LINKER_LANGUAGE CXX)
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1ca6605ccb..d76c8ff871 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,8 +24,10 @@ set(LINK_LIBS
 	bctoolbox
 	${BELLESIP_TARGETNAME}
 	belr
-	mediastreamer
+)
+set(PUBLIC_LINK_LIBS
 	ortp
+	mediastreamer
 )
 
 #APPLE_LIBS is mandatory for apple compilation
@@ -528,7 +530,10 @@ if(ENABLE_STATIC)
 		$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/>
 		PRIVATE ${LINPHONE_INCLUDE_DIRS} ${LINPHONE_CXX_OBJECTS_INCLUDE_DIRS}
 	)
-	target_link_libraries(linphone-static PRIVATE ${LINK_LIBS})
+	target_link_libraries(linphone-static
+		PUBLIC ${PUBLIC_LINK_LIBS}
+		PRIVATE ${LINK_LIBS}
+	)
 
 	if(APPLE)
 		target_link_libraries(linphone-static PUBLIC ${APPLE_LIBS})
@@ -599,7 +604,10 @@ if(ENABLE_SHARED)
 		$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/>
 		PRIVATE ${LINPHONE_INCLUDE_DIRS} ${LINPHONE_CXX_OBJECTS_INCLUDE_DIRS}
 	)
-	target_link_libraries(linphone PRIVATE ${LINK_LIBS})
+	target_link_libraries(linphone
+		PUBLIC ${PUBLIC_LINK_LIBS}
+		PRIVATE ${LINK_LIBS}
+	)
 
 	if(APPLE)
 		target_link_libraries(linphone PUBLIC ${APPLE_LIBS})
diff --git a/wrappers/cpp/CMakeLists.txt b/wrappers/cpp/CMakeLists.txt
index 23ee6e53f6..48fbf3ebd1 100644
--- a/wrappers/cpp/CMakeLists.txt
+++ b/wrappers/cpp/CMakeLists.txt
@@ -56,7 +56,7 @@ if(MSVC)
 endif()
 target_compile_definitions(linphone++ PRIVATE "-DLINPHONECXX_EXPORTS")
 target_link_libraries(linphone++
-	PRIVATE ${BCTOOLBOX_CORE_LIBRARIES} ${BELLESIP_LIBRARIES} linphone
+	PRIVATE bctoolbox bellesip linphone
 )
 
 set_target_properties(linphone++ PROPERTIES
@@ -66,12 +66,13 @@ set_target_properties(linphone++ PROPERTIES
 )
 
 target_include_directories(linphone++
-	PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/include
-	PRIVATE ${PROJECT_BINARY_DIR}/include
-	PRIVATE ${PROJECT_SOURCE_DIR}/include
-	PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
-	PRIVATE ${BCTOOLBOX_INCLUDE_DIRS}
-	PRIVATE ${BELLESIP_INCLUDE_DIRS}
+	PUBLIC
+		$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
+		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+		$<INSTALL_INTERFACE:include>
+	PRIVATE
+		${PROJECT_BINARY_DIR}/include
+		${PROJECT_SOURCE_DIR}/include
 )
 set_target_properties(linphone++ PROPERTIES SOVERSION ${LINPHONE_SO_VERSION})
 
@@ -94,9 +95,11 @@ write_basic_package_version_file(
 	VERSION ${PROJECT_VERSION}
 	COMPATIBILITY AnyNewerVersion
 )
-export(EXPORT LinphoneCxxTargets
-	FILE "${CMAKE_CURRENT_BINARY_DIR}/LinphoneCxxTargets.cmake"
-)
+if(LINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS)
+	export(EXPORT LinphoneCxxTargets
+		FILE "${CMAKE_CURRENT_BINARY_DIR}/LinphoneCxxTargets.cmake"
+	)
+endif()
 configure_file(LinphoneCxxConfig.cmake.in LinphoneCxxConfig.cmake @ONLY)
 
 install(EXPORT LinphoneCxxTargets
-- 
GitLab