From ca7b1e70e4948e311f79aab18307361ef571f2c0 Mon Sep 17 00:00:00 2001
From: Amin Bandali <amin.bandali@savoirfairelinux.com>
Date: Fri, 14 Oct 2022 10:55:36 -0400
Subject: [PATCH] build: Add daemon submodule and optionally use it.

This allows invoking cmake with -DWITH_DAEMON_SUBMODULE=true to use
the daemon header files and library from the submodule.  Note that it
is currently still necessary to build the daemon separately first,
either manually or using the build.py convenience script.

The goal is to eventually add support for building the daemon with
CMake in the future, so that we could add_subdirectory(${DAEMON_DIR})
in client-qt's CMakeLists.txt and have CMake take care of everything.

Change-Id: I3a16c44837e6c79616b3101fea8a6ff3defa3ab5
---
 .gitmodules                                  |  3 +
 CMakeLists.txt                               | 12 +++
 daemon                                       |  1 +
 extras/build/cmake/modules/FindLibJami.cmake | 80 ++++++++++++--------
 4 files changed, 64 insertions(+), 32 deletions(-)
 create mode 160000 daemon

diff --git a/.gitmodules b/.gitmodules
index ddfbe1ddd..01f7b1730 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -11,3 +11,6 @@
 	url = https://github.com/atraczyk/SortFilterProxyModel.git
 	branch = qt-6
 	ignore = dirty
+[submodule "daemon"]
+	path = daemon
+	url = https://review.jami.net/jami-daemon
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f2850f5d4..d0a8fd709 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,6 +39,8 @@ set(CMAKE_AUTOUIC ON)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
 # Main project directories:
+# daemon
+set(DAEMON_DIR ${PROJECT_SOURCE_DIR}/daemon)
 # src
 set(LIBCLIENT_SRC_DIR ${PROJECT_SOURCE_DIR}/src/libclient)
 set(APP_SRC_DIR ${PROJECT_SOURCE_DIR}/src/app)
@@ -102,6 +104,16 @@ set(CMAKE_CXX_FLAGS
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)
 
 # jami-daemon
+if(NOT DEFINED WITH_DAEMON_SUBMODULE)
+  set(WITH_DAEMON_SUBMODULE false)
+endif()
+if (WITH_DAEMON_SUBMODULE AND NOT EXISTS ${DAEMON_DIR}/src)
+  message(FATAL_ERROR
+    "Jami Daemon sources not found in ${DAEMON_DIR}/src.  If you \
+cloned this repository via git, perhaps you did not initialize its \
+submodules afterwards.  You can do so by running \"git submodule \
+update --init\" in the repository.")
+endif()
 set(CMAKE_MODULE_PATH
   ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
 find_package(LibJami REQUIRED)
diff --git a/daemon b/daemon
new file mode 160000
index 000000000..8abb7a04d
--- /dev/null
+++ b/daemon
@@ -0,0 +1 @@
+Subproject commit 8abb7a04dcd08078662b95a26bf4dd5e15f1a2f2
diff --git a/extras/build/cmake/modules/FindLibJami.cmake b/extras/build/cmake/modules/FindLibJami.cmake
index 5aa72a9a5..ddb053190 100644
--- a/extras/build/cmake/modules/FindLibJami.cmake
+++ b/extras/build/cmake/modules/FindLibJami.cmake
@@ -26,20 +26,24 @@
 
 set(LIBJAMI_FOUND true)
 
-if(EXISTS ${LIBJAMI_INCLUDE_DIR}/jami.h)
-  set(LIBJAMI_INCLUDE_DIRS ${LIBJAMI_INCLUDE_DIR})
-elseif(EXISTS ${LIBJAMI_BUILD_DIR}/jami/jami.h)
-  set(LIBJAMI_INCLUDE_DIRS ${LIBJAMI_BUILD_DIR}/jami)
-elseif(EXISTS ${RING_INCLUDE_DIR}/jami.h)
-  set(LIBJAMI_INCLUDE_DIRS ${RING_INCLUDE_DIR})
-elseif(EXISTS ${RING_BUILD_DIR}/jami/jami.h)
-  set(LIBJAMI_INCLUDE_DIRS ${RING_BUILD_DIR}/jami)
-elseif(EXISTS ${CMAKE_INSTALL_PREFIX}/include/jami/jami.h)
-  set(LIBJAMI_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include/jami)
+if(WITH_DAEMON_SUBMODULE)
+  set(LIBJAMI_INCLUDE_DIRS ${DAEMON_DIR}/src/jami)
 else()
-  message(STATUS "Jami daemon headers not found!
+  if(EXISTS ${LIBJAMI_INCLUDE_DIR}/jami.h)
+    set(LIBJAMI_INCLUDE_DIRS ${LIBJAMI_INCLUDE_DIR})
+  elseif(EXISTS ${LIBJAMI_BUILD_DIR}/jami/jami.h)
+    set(LIBJAMI_INCLUDE_DIRS ${LIBJAMI_BUILD_DIR}/jami)
+  elseif(EXISTS ${RING_INCLUDE_DIR}/jami.h)
+    set(LIBJAMI_INCLUDE_DIRS ${RING_INCLUDE_DIR})
+  elseif(EXISTS ${RING_BUILD_DIR}/jami/jami.h)
+    set(LIBJAMI_INCLUDE_DIRS ${RING_BUILD_DIR}/jami)
+  elseif(EXISTS ${CMAKE_INSTALL_PREFIX}/include/jami/jami.h)
+    set(LIBJAMI_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include/jami)
+  else()
+    message(STATUS "Jami daemon headers not found!
 Set -DLIBJAMI_BUILD_DIR or -DCMAKE_INSTALL_PREFIX")
-  set(LIBJAMI_FOUND false)
+    set(LIBJAMI_FOUND false)
+  endif()
 endif()
 
 # Save the current value of CMAKE_FIND_LIBRARY_SUFFIXES.
@@ -47,39 +51,51 @@ set(CMAKE_FIND_LIBRARY_SUFFIXES_orig ${CMAKE_FIND_LIBRARY_SUFFIXES})
 
 set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib;.so;.dll")
 
-# Search only in these given PATHS.
-find_library(LIBJAMI_LIB NAMES jami ring
-  PATHS ${LIBJAMI_BUILD_DIR}/.libs
-  PATHS ${RING_BUILD_DIR}/.libs
-  PATHS ${CMAKE_INSTALL_PREFIX}/lib
-  PATHS ${CMAKE_INSTALL_PREFIX}/libexec
-  PATHS ${CMAKE_INSTALL_PREFIX}/bin
-  NO_DEFAULT_PATH)
-
-# Search elsewhere as well (e.g. system-wide).
-if(NOT LIBJAMI_LIB)
-  find_library(LIBJAMI_LIB NAMES jami ring)
-endif()
-
-# Try for a static version also.
-if(NOT LIBJAMI_LIB)
-  set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.lib")
-
+if(WITH_DAEMON_SUBMODULE)
+  find_library(LIBJAMI_LIB NAMES jami ring
+    PATHS ${DAEMON_DIR}/src/.libs
+    NO_DEFAULT_PATH)
+else()
   # Search only in these given PATHS.
   find_library(LIBJAMI_LIB NAMES jami ring
     PATHS ${LIBJAMI_BUILD_DIR}/.libs
     PATHS ${RING_BUILD_DIR}/.libs
     PATHS ${CMAKE_INSTALL_PREFIX}/lib
     PATHS ${CMAKE_INSTALL_PREFIX}/libexec
+    PATHS ${CMAKE_INSTALL_PREFIX}/bin
     NO_DEFAULT_PATH)
 
   # Search elsewhere as well (e.g. system-wide).
   if(NOT LIBJAMI_LIB)
     find_library(LIBJAMI_LIB NAMES jami ring)
   endif()
+endif()
+
+# Try for a static version also.
+if(NOT LIBJAMI_LIB)
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.lib")
+
+  if(WITH_DAEMON_SUBMODULE)
+    find_library(LIBJAMI_LIB NAMES jami ring
+      PATHS ${DAEMON_DIR}/src/.libs
+      NO_DEFAULT_PATH)
+  else()
+    # Search only in these given PATHS.
+    find_library(LIBJAMI_LIB NAMES jami ring
+      PATHS ${LIBJAMI_BUILD_DIR}/.libs
+      PATHS ${RING_BUILD_DIR}/.libs
+      PATHS ${CMAKE_INSTALL_PREFIX}/lib
+      PATHS ${CMAKE_INSTALL_PREFIX}/libexec
+      NO_DEFAULT_PATH)
+
+    # Search elsewhere as well (e.g. system-wide).
+    if(NOT LIBJAMI_LIB)
+      find_library(LIBJAMI_LIB NAMES jami ring)
+    endif()
 
-  if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
-    add_definitions(-fPIC)
+    if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+      add_definitions(-fPIC)
+    endif()
   endif()
 endif()
 
-- 
GitLab