diff --git a/CMakeLists.txt b/CMakeLists.txt index 979dae2a..21adb2fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,7 +60,6 @@ endif() if(JAMICORE_AS_SUBDIR) add_subdirectory(${DAEMON_DIR} EXCLUDE_FROM_ALL) - set(LIBJAMI_LIB jami-core) endif() # init some variables for includes, libs, etc. @@ -226,11 +225,9 @@ submodules afterwards. You can do so by running \"git submodule \ update --init\" in the repository.") endif() list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/extras/build/cmake/modules) -if (NOT JAMICORE_AS_SUBDIR) - find_package(LibJami REQUIRED) - if(LIBJAMI_FOUND) - include_directories(${LIBJAMI_INCLUDE_DIR}) - endif() +find_package(LibJami REQUIRED) +if (NOT TARGET LibJami::LibJami) + message(FATAL_ERROR "libjami could not be found") endif() include(FindPython3) @@ -755,6 +752,8 @@ foreach(MODULE ${QT_MODULES}) list(APPEND QT_LIBS "Qt::${MODULE}") endforeach() +list(APPEND CLIENT_LIBS LibJami::LibJami) + if(MSVC) # Makes it a GUI executable instead of a console application set_target_properties( @@ -763,7 +762,6 @@ if(MSVC) WIN32_EXECUTABLE TRUE) list(APPEND CLIENT_LIBS - ${LIBJAMI_LIB} ${GNUTLS_LIB} ${LIBCLIENT_NAME} ${QT_LIBS} diff --git a/extras/build/cmake/modules/FindLibJami.cmake b/extras/build/cmake/modules/FindLibJami.cmake index ee2bf6d9..92cd9e55 100644 --- a/extras/build/cmake/modules/FindLibJami.cmake +++ b/extras/build/cmake/modules/FindLibJami.cmake @@ -14,17 +14,38 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# Once done, this find module will set: -# -# LIBJAMI_INCLUDE_DIR - libjami include directory -# LIBJAMI_FOUND - whether it was able to find the include directories -# LIBJAMI_LIB - path to libjami or libring library +# Once done, this find module will set the LibJami::LibJami imported +# target, which references all what is needed (headers, libraries, +# dependencies). A pure interface variant target, LibJami::Headers, is +# also defined. It can be used if only the headers are required. set(LIBJAMI_FOUND true) +# Do not use ALIAS as these are not in the global scope. +function(create_libjami_target backend_target) + add_library(LibJami::LibJami INTERFACE IMPORTED GLOBAL) + target_link_libraries(LibJami::LibJami INTERFACE ${backend_target}) +endfunction() + if(WITH_DAEMON_SUBMODULE) + if(JAMICORE_AS_SUBDIR) + create_libjami_target(jami-core) + message(STATUS "Using jami-core CMake project directly as libjami") + return() + endif() set(LIBJAMI_INCLUDE_DIR ${DAEMON_DIR}/src/jami) else() + # Preferably find libjami via pkg-config. + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(LIBJAMI QUIET IMPORTED_TARGET jami) + if(LIBJAMI_FOUND) + create_libjami_target(PkgConfig::LIBJAMI) + message(STATUS "Found LibJami via pkg-config") + return() + endif() + endif() + find_path(LIBJAMI_INCLUDE_DIR jami.h PATH_SUFFIXES jami) if(NOT LIBJAMI_INCLUDE_DIR) message(STATUS "Jami daemon headers not found! @@ -109,5 +130,16 @@ endif() # Restore the original value of CMAKE_FIND_LIBRARY_SUFFIXES. set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_orig}) -message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIR}) -message(STATUS "Jami daemon library is at " ${LIBJAMI_LIB}) +# Assemble a CMake imported target with the above information gathered +# by other means than pkg-config. +if(LIBJAMI_FOUND AND LIBJAMI_LIB AND LIBJAMI_INCLUDE_DIR) + add_library(LibJami::LibJami UNKNOWN IMPORTED GLOBAL) + set_target_properties(LibJami::LibJami PROPERTIES + IMPORTED_LOCATION "${LIBJAMI_LIB}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBJAMI_INCLUDE_DIR}" + ) + message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIR}) + message(STATUS "Jami daemon library is at " ${LIBJAMI_LIB}) +else() + message(WARNING "Could not find Jami library") +endif() diff --git a/src/libclient/CMakeLists.txt b/src/libclient/CMakeLists.txt index 04cdbc6d..26744a6e 100644 --- a/src/libclient/CMakeLists.txt +++ b/src/libclient/CMakeLists.txt @@ -46,10 +46,6 @@ if(NOT DEFINED EXTRAS_DIR) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules") -find_package(LibJami REQUIRED) -if(LIBJAMI_FOUND) - include_directories(${LIBJAMI_INCLUDE_DIR}) -endif() string(SUBSTRING ${CMAKE_GENERATOR} 0 14 CMAKE_GENERATOR_SHORT) if(CMAKE_GENERATOR_SHORT MATCHES "Visual Studio ") @@ -202,10 +198,6 @@ Qt${QT_VERSION_MAJOR} enabled.") add_subdirectory(qtwrapper) include_directories(qtwrapper) - if(JAMICORE_AS_SUBDIR) - add_dependencies(qtwrapper jami-core) - endif() - if(${VERBOSE_IPC} MATCHES true) message(STATUS "Adding more debug output") add_definitions(-DVERBOSE_IPC=true) @@ -454,16 +446,6 @@ add_library(${LIBCLIENT_NAME} STATIC ${LIBCLIENT_HEADERS_API} ${LIBCLIENT_HEADERS_MOC}) -if(JAMICORE_AS_SUBDIR) - # Define the project dependencies depending on the build type. - if(ENABLE_LIBWRAP) - add_dependencies(qtwrapper jami-core) - add_dependencies(${LIBCLIENT_NAME} qtwrapper) - else() - add_dependencies(${LIBCLIENT_NAME} jami-core) - endif() -endif() - foreach(QT_LIB ${QT_LIBS}) target_link_libraries(${LIBCLIENT_NAME} ${QT_LIB}) endforeach() @@ -479,6 +461,8 @@ if(ENABLE_LIBWRAP) if (NOT (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")) target_link_libraries(${LIBCLIENT_NAME} ${AVUTIL_LIBRARY}) endif() +else() + target_link_libraries(${LIBCLIENT_NAME} LibJami::LibJami) endif() if (NOT (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")) target_link_libraries(${LIBCLIENT_NAME} -lpthread) diff --git a/src/libclient/qtwrapper/CMakeLists.txt b/src/libclient/qtwrapper/CMakeLists.txt index c412112f..ba4bd5cb 100644 --- a/src/libclient/qtwrapper/CMakeLists.txt +++ b/src/libclient/qtwrapper/CMakeLists.txt @@ -39,7 +39,6 @@ else() endif() include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -include_directories(${LIBJAMI_INCLUDE_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dbus) @@ -49,4 +48,4 @@ add_library(${PROJECT_NAME} STATIC target_link_libraries(${PROJECT_NAME} Qt::Core - ${LIBJAMI_LIB}) + LibJami::LibJami)