diff --git a/CMakeLists.txt b/CMakeLists.txt index 712c99586a8bc8d7051d74c93e352aa5f005b4c0..ac59388ce0908d26cf7dce46df1a5f5f3d7c0f0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ option(JAMI_NATPMP "Build with NAT-PMP" ON) option(JAMI_PUPNP "Build with PUPNP" ON) option(JAMI_PLUGIN "Build with plugin support" ON) option(JAMI_JNI "Build the JNI binding" OFF) +option(JAMI_DBUS "Build the DBUS binding" OFF) option(JAMI_VIDEO "Build with video support" ON) option(BUILD_CONTRIB "Build contrib to CONTRIB_PATH" ON) option(BUILD_EXTRA_TOOLS "Build extra tools" OFF) @@ -110,8 +111,8 @@ if(NOT MSVC) if (JAMI_NATPMP) pkg_search_module (natpmp IMPORTED_TARGET natpmp) if (NOT natpmp_FOUND) - find_library(natpmp natpmp) - if (natpmp_NOTFOUND) + find_library(natpmp_LIBRARIES natpmp) + if (NOT natpmp_LIBRARIES) message("NAT-PMP not found: disabling") set(JAMI_NATPMP Off) endif() @@ -123,6 +124,10 @@ if(NOT MSVC) set(JAMI_PUPNP Off) endif() endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + pkg_search_module (udev REQUIRED IMPORTED_TARGET libudev) + pkg_search_module (pulseaudio REQUIRED IMPORTED_TARGET libpulse) + endif() endif() ################################################################################ @@ -204,8 +209,18 @@ if (ANDROID) ${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/opensl/audio_recorder.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/opensl/opensllayer.cpp ) -endif() -if(MSVC) +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") + if (JAMI_VIDEO) + list (APPEND ALL_FILES ${ALL_FILES} + ${CMAKE_CURRENT_SOURCE_DIR}/src/media/video/v4l2/video_device_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/media/video/v4l2/video_device_monitor_impl.cpp + ) + endif() + list (APPEND ALL_FILES ${ALL_FILES} + ${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/pulseaudio/audiostream.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/pulseaudio/pulselayer.cpp + ) +elseif(MSVC) list (APPEND ALL_FILES ${ALL_FILES} "${Source_Files__media__audio__portaudio}" "${Source_Files__media__video__uwpvideo}" @@ -453,7 +468,7 @@ else() find_package (jsoncpp REQUIRED) find_package (yaml-cpp REQUIRED) - find_package (fmt REQUIRED) + pkg_search_module (fmt REQUIRED IMPORTED_TARGET fmt) pkg_search_module (webrtcap REQUIRED IMPORTED_TARGET webrtc-audio-processing) pkg_search_module (gnutls REQUIRED IMPORTED_TARGET gnutls) pkg_search_module (opendht REQUIRED IMPORTED_TARGET opendht) @@ -484,8 +499,8 @@ else() PkgConfig::swscale jsoncpp yaml-cpp - fmt - secp256k1 + PkgConfig::fmt + PkgConfig::secp256k1 PUBLIC PkgConfig::avutil ) @@ -503,9 +518,18 @@ else() ) if (ANDROID) target_link_libraries(${PROJECT_NAME} PRIVATE OpenSLES log) + elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") + target_link_libraries(${PROJECT_NAME} PRIVATE + PkgConfig::udev + PkgConfig::pulseaudio + ) endif() if (JAMI_NATPMP) - target_link_libraries(${PROJECT_NAME} PRIVATE natpmp) + if (natpmp_FOUND) + target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::natpmp) + elseif (natpmp_LIBRARIES) + target_link_libraries(${PROJECT_NAME} PRIVATE natpmp_LIBRARIES) + endif() endif() if (JAMI_PUPNP) target_link_libraries(${PROJECT_NAME} PRIVATE upnp) @@ -517,10 +541,71 @@ else() target_link_directories(${PROJECT_NAME}-jni PRIVATE ${CONTRIB_PATH}/lib) target_link_libraries(${PROJECT_NAME}-jni ${PROJECT_NAME} android log) set_target_properties(${PROJECT_NAME}-jni PROPERTIES CXX_STANDARD 17) + target_compile_options(${PROJECT_NAME}-jni PRIVATE + -fvisibility=hidden + -Wall -Wextra + -Wnon-virtual-dtor + -Wno-deprecated + -Wno-deprecated-declarations + -Wno-unknown-pragmas + -Wno-unused-function + -Wno-unused-parameter + ) target_link_options(${PROJECT_NAME}-jni PRIVATE -Wl,-Bsymbolic -Wall -Wextra ) endif() + if (JAMI_DBUS) + find_program(DBusXml2Cpp dbusxx-xml2cpp REQUIRED) + pkg_search_module (DBusCpp REQUIRED IMPORTED_TARGET dbus-c++-1) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/net.jami.daemon.service.in + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.service + @ONLY) + set(DBUS_XML_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.CallManager.xml + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.ConfigurationManager.xml + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.Instance.xml + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.PresenceManager.xml + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.VideoManager.xml + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.PluginManagerInterface.xml + ) + set(DBUS_ADAPTOR_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuscallmanager.adaptor.h + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusconfigurationmanager.adaptor.h + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusinstance.adaptor.h + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuspresencemanager.adaptor.h + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusvideomanager.adaptor.h + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuspluginmanagerinterface.adaptor.h + ) + set(DBUS_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuscallmanager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusclient.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusconfigurationmanager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusinstance.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuspresencemanager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/main.cpp + ) + + # XML adaptors + foreach(DBUS_XML_FILE ${DBUS_XML_FILES}) + list(FIND DBUS_XML_FILES ${DBUS_XML_FILE} DBUS_XML_FILE_INDEX) + list(GET DBUS_ADAPTOR_FILES ${DBUS_XML_FILE_INDEX} DBUS_ADAPTOR_FILE) + add_custom_command( + OUTPUT ${DBUS_ADAPTOR_FILE} + COMMAND ${DBusXml2Cpp} ${DBUS_XML_FILE} --adaptor=${DBUS_ADAPTOR_FILE} + DEPENDS ${DBUS_XML_FILE} + ) + endforeach() + + # Jamid + add_executable(jamid + ${DBUS_FILES} + ${DBUS_ADAPTOR_FILES} + ) + target_link_libraries(jamid ${PROJECT_NAME} PkgConfig::DBusCpp) + endif() + endif() diff --git a/contrib/src/fmt/rules.mak b/contrib/src/fmt/rules.mak index 696412a6cdde5d8b84ef31bc0a11b7ce4f203283..41b40363b2b4cbf3110545db68af5de8af52234d 100644 --- a/contrib/src/fmt/rules.mak +++ b/contrib/src/fmt/rules.mak @@ -8,8 +8,7 @@ PKGS_FOUND += fmt endif FMT_CMAKECONF = -DBUILD_SHARED_LIBS=Off \ - -DFMT_TEST=Off \ - CMAKE_INSTALL_LIBDIR=$(PREFIX)/lib + -DFMT_TEST=Off $(TARBALLS)/fmt-$(FMT_VERSION).tar.gz: $(call download,$(FMT_URL)) diff --git a/contrib/src/libgit2/rules.mak b/contrib/src/libgit2/rules.mak index 4f56da14658a7c144ab1a5f8eef9b67b0bf2b4bd..7d83a33627e08026de7266c3792a0cbe7edb78fa 100644 --- a/contrib/src/libgit2/rules.mak +++ b/contrib/src/libgit2/rules.mak @@ -23,6 +23,6 @@ libgit2: libgit2-v$(LIBGIT2_VERSION).tar.gz .sum-libgit2 # TODO windows pcre? .libgit2: libgit2 cd $< && mkdir -p build && cd build \ - && $(CMAKE) -DCMAKE_C_FLAGS=-fPIC -DCMAKE_INSTALL_PREFIX=$(PREFIX) -DUSE_HTTPS=OFF -DCURL=OFF -DUSE_HTTP_PARSER=system -DBUILD_CLAR=OFF -DBUILD_SHARED_LIBS=OFF -DUSE_SSH=OFF -DREGEX_BACKEND=regcomp .. \ + && $(CMAKE) -DCMAKE_C_FLAGS=-fPIC -DUSE_HTTPS=OFF -DCURL=OFF -DUSE_HTTP_PARSER=system -DBUILD_CLAR=OFF -DBUILD_SHARED_LIBS=OFF -DUSE_SSH=OFF -DREGEX_BACKEND=regcomp .. \ && $(MAKE) install touch $@ diff --git a/contrib/src/main.mak b/contrib/src/main.mak index b09cc4973e98621b5a8467f61d896a25969cfd28..76eeb2ae38d202ab449ba4dcc4c3d08d98b71ffd 100644 --- a/contrib/src/main.mak +++ b/contrib/src/main.mak @@ -403,7 +403,8 @@ CMAKE = cmake . -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolch -DCMAKE_INSTALL_PREFIX=$(PREFIX) else CMAKE = cmake . -DCMAKE_TOOLCHAIN_FILE=$(abspath toolchain.cmake) \ - -DCMAKE_INSTALL_PREFIX=$(PREFIX) + -DCMAKE_INSTALL_PREFIX=$(PREFIX) \ + -DCMAKE_INSTALL_LIBDIR=$(PREFIX)/lib endif #