From 39dc65266ec5b6287566d278ea241e137c673fcd Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Wed, 13 Jan 2021 22:43:21 +0100 Subject: [PATCH] - Add CI and update to new plugin version - Add plugin exportation - Use Q_DECL_* as attribute - Allow project to build shared library - Split plugin interface into dynamic library - Fix install include folder --- .../job-linux-desktop-debian9.yml | 14 +++++- .gitlab-ci-files/job-macosx-desktop.yml | 14 ++++++ .gitlab-ci-files/job-windows-desktop.yml | 27 +++++++---- CMakeLists.txt | 3 +- linphone-app/CMakeLists.txt | 47 ++++++++++++------- .../linphone_package/CMakeLists.txt | 19 ++++---- .../include/LinphoneApp/LinphonePlugin.hpp | 14 ++---- linphone-app/tools/create_appimage.sh | 1 + plugins/CMakeLists.txt | 2 + plugins/example/CMakeLists.txt | 4 +- 10 files changed, 98 insertions(+), 47 deletions(-) diff --git a/.gitlab-ci-files/job-linux-desktop-debian9.yml b/.gitlab-ci-files/job-linux-desktop-debian9.yml index eefbe5c6c..531a6bab3 100644 --- a/.gitlab-ci-files/job-linux-desktop-debian9.yml +++ b/.gitlab-ci-files/job-linux-desktop-debian9.yml @@ -75,6 +75,7 @@ job-debian9-makefile-clang: only: variables: - $NIGHTLY_MASTER + - $DEPLOY_PLUGINS variables: CMAKE_GENERATOR: Unix Makefiles CC: clang @@ -123,7 +124,6 @@ job-debian9-makefile-clang-package: paths: - build/OUTPUT/Packages/*.AppImage expire_in: 1 week - ################################################# # Deploy - Nightly @@ -141,6 +141,18 @@ job-debian9-makefile-clang-deploy: script: - rsync -rlv --ignore-existing build/OUTPUT/Packages/*.AppImage $DEPLOY_SERVER:$APPIMAGE_UPLOAD_DIRECTORY/ + +job-debian9-makefile-clang-plugins-deploy: + stage: deploy + tags: [ "deploy" ] + dependencies: + - job-debian9-makefile-clang + only: + variables: + - $DEPLOY_PLUGINS + script: + - rsync -rlv --ignore-existing build/OUTPUT/plugins/app/*.so $DEPLOY_SERVER:$APPIMAGE_UPLOAD_DIRECTORY/plugins/ + ################################################# # Debug ################################################# diff --git a/.gitlab-ci-files/job-macosx-desktop.yml b/.gitlab-ci-files/job-macosx-desktop.yml index d82dd6cce..a51f95d63 100644 --- a/.gitlab-ci-files/job-macosx-desktop.yml +++ b/.gitlab-ci-files/job-macosx-desktop.yml @@ -51,6 +51,7 @@ job-macosx-makefile: only: variables: - $NIGHTLY_MASTER + - $DEPLOY_PLUGINS variables: CMAKE_GENERATOR: Unix Makefiles ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS @@ -118,3 +119,16 @@ job-macosx-makefile-deploy: - $DEPLOY_MACOSX script: - rsync -rlv --ignore-existing build/OUTPUT/Packages/Linphone*.dmg $DEPLOY_SERVER:$MACOSX_UPLOAD_DIRECTORY + + +job-macosx-makefile-plugins-deploy: + stage: deploy + tags: [ "macosx-xcode11" ] + dependencies: + - job-macosx-makefile + only: + variables: + - $DEPLOY_PLUGINS + script: + - rsync -rlv --ignore-existing build/OUTPUT/plugins/app/*.dylib $DEPLOY_SERVER:$MACOSX_UPLOAD_DIRECTORY/plugins + diff --git a/.gitlab-ci-files/job-windows-desktop.yml b/.gitlab-ci-files/job-windows-desktop.yml index 9436b35ec..2da2f5f51 100644 --- a/.gitlab-ci-files/job-windows-desktop.yml +++ b/.gitlab-ci-files/job-windows-desktop.yml @@ -44,6 +44,7 @@ job-windows-vs2017: variables: - $NIGHTLY_MASTER - $NIGHTLY_RELEASE + - $DEPLOY_PLUGINS before_script: #cache disabled on scheduled builds since we dot not need the fastest build - set "CLCACHE_DISABLE=1" @@ -54,6 +55,9 @@ job-windows-vs2017-scheduled: job-windows-vs2017-novideo: extends: .job-windows-vs2017-scheduled + except: + variables: + - $DEPLOY_PLUGINS variables: CMAKE_OPTIONS: -DENABLE_LIME_X3DH=NO -DENABLE_VIDEO=NO @@ -75,17 +79,12 @@ job-windows-vs2017-package: script: - *build_all_windows_script - C:\PROGRA~1\Python37\Scripts\cl -s - - mkdir "%CI_PROJECT_DIR%/results" - - cd OUTPUT - - cd Packages - - copy /B *.exe "%CI_PROJECT_DIR%/results" artifacts: paths: - - results\* + - OUTPUT\* when: always expire_in: 1 weeks - - + ################################################# # DEPLOY ################################################# @@ -100,7 +99,19 @@ job-windows-vs2017-win32-upload: dependencies: - job-windows-vs2017-package script: - - scp "results/*.exe" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%" + - scp "build/OUTPUT/Packages/*.exe" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%" + + +job-windows-vs2017-plugins-upload: + stage: deploy + tags: [ "windows"] + only: + variables: + - $DEPLOY_PLUGINS + dependencies: + - job-windows-vs2017-scheduled + script: + - scp "build/OUTPUT/plugins/*.dll" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%/plugins" diff --git a/CMakeLists.txt b/CMakeLists.txt index dac846312..25558a162 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,7 +58,7 @@ set(LINPHONE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/linphone-sdk/desktop") set(APPLICATION_OUTPUT_DIR "${CMAKE_BINARY_DIR}/OUTPUT") -set(CMAKE_PREFIX_PATH "${LINPHONE_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR}/include${PREFIX_PATH}") +set(CMAKE_PREFIX_PATH "${LINPHONE_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR}/include${PREFIX_PATH};${CMAKE_BINARY_DIR}/linphone-app") string(REPLACE ";" "|" PREFIX_PATH "${CMAKE_PREFIX_PATH}") #set(PREFIX_PATH "${LINPHONE_OUTPUT_DIR}|${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}") @@ -225,6 +225,7 @@ else() add_dependencies(app-library ${APP_DEPENDS}) if( ENABLE_BUILD_APP_PLUGINS) add_custom_command(TARGET sdk PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/linphone-app/include/" "${CMAKE_INSTALL_PREFIX}/include/") +# set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${CMAKE_BINARY_DIR}/linphone-app") add_subdirectory(${CMAKE_SOURCE_DIR}/plugins "plugins-app") endif() endif() diff --git a/linphone-app/CMakeLists.txt b/linphone-app/CMakeLists.txt index 73f8e70b7..476fad769 100644 --- a/linphone-app/CMakeLists.txt +++ b/linphone-app/CMakeLists.txt @@ -43,8 +43,9 @@ include(CheckCXXCompilerFlag) set(TARGET_NAME linphone-qt) - +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS true) set(CMAKE_CXX_STANDARD 11) +set(CMAKE_ENABLE_EXPORTS ON) if(UNIX AND NOT APPLE) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) @@ -53,6 +54,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake") list(APPEND CMAKE_MODULE_PATH "${LINPHONE_OUTPUT_DIR}/cmake") set(APP_LIBRARY app-library) +set(APP_PLUGIN app-plugin) include(application_info.cmake) if(WIN32) @@ -165,12 +167,12 @@ set(SOURCES src/utils/MediastreamerUtils.cpp src/utils/QExifImageHeader.cpp src/utils/Utils.cpp - src/utils/plugins/PluginDataAPI.cpp - src/utils/plugins/PluginNetworkHelper.cpp - src/utils/plugins/LinphonePlugin.cpp - src/utils/plugins/PluginsManager.cpp - + src/utils/plugins/PluginsManager.cpp ) +set(PLUGIN_SOURCES src/utils/plugins/PluginDataAPI.cpp + src/utils/plugins/PluginNetworkHelper.cpp + src/utils/plugins/LinphonePlugin.cpp + ) set(HEADERS src/app/App.hpp @@ -238,10 +240,11 @@ set(HEADERS src/utils/QExifImageHeader.hpp src/utils/Utils.hpp src/utils/plugins/PluginsManager.hpp - include/LinphoneApp/PluginDataAPI.hpp - include/LinphoneApp/PluginNetworkHelper.hpp - include/LinphoneApp/LinphonePlugin.hpp ) +set(PLUGIN_HEADERS + include/LinphoneApp/PluginDataAPI.hpp + include/LinphoneApp/PluginNetworkHelper.hpp + include/LinphoneApp/LinphonePlugin.hpp) list(APPEND SOURCES include/LinphoneApp/PluginExample.json) set(MAIN_FILE src/app/main.cpp) @@ -310,6 +313,8 @@ endfunction () # Force absolute paths. PREPEND(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/") PREPEND(HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/") +PREPEND(PLUGIN_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/") +PREPEND(PLUGIN_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/") # ------------------------------------------------------------------------------ # Compute QML files list. @@ -401,11 +406,12 @@ if(WIN32) endif() add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${QML_SOURCES} ${QRC_RESOURCES}) +add_library(${APP_PLUGIN} SHARED ${PLUGIN_SOURCES} ${PLUGIN_HEADERS}) #add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${QML_SOURCES}) if (WIN32) - add_executable(${TARGET_NAME} WIN32 $ ${MAIN_FILE} ${QRC_BIG_RESOURCES} ${RC_FILE}) - install(TARGETS linphone-qt RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + add_executable(${TARGET_NAME} WIN32 $ $ ${MAIN_FILE} ${QRC_BIG_RESOURCES} ${RC_FILE}) + install(TARGETS linphone-qt RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") if(MSVC AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) install(FILES "$" DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() @@ -438,9 +444,11 @@ endif() #add_dependencies(project_b_exe project_a) #target_link_libraries(project_b_exe ${install_dir}/lib/alib.lib) -if(ENABLE_APP_EXPORT_PLUGIN) - add_definitions(-DENABLE_APP_EXPORT_PLUGIN) -endif() + +# add_definitions(-DENABLE_APP_EXPORT_PLUGIN) +target_compile_definitions(${APP_PLUGIN} PUBLIC "-DENABLE_APP_EXPORT_PLUGIN") +set_property(TARGET ${APP_PLUGIN} PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS ON) #Need by Qt + set(INCLUDED_DIRECTORIES "${LINPHONECXX_INCLUDE_DIRS}" ) list(APPEND INCLUDED_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/include") @@ -493,9 +501,13 @@ if (APPLE) endif () target_include_directories(${APP_LIBRARY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES}) +target_include_directories(${APP_PLUGIN} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES}) target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES}) -target_link_libraries(${TARGET_NAME} ${LIBRARIES}) +target_link_libraries(${APP_PLUGIN} ${LIBRARIES}) +target_link_libraries(${APP_LIBRARY} ${APP_PLUGIN}) + +target_link_libraries(${TARGET_NAME} ${LIBRARIES} ${APP_PLUGIN}) if(WIN32) target_link_libraries(${TARGET_NAME} wsock32 ws2_32) @@ -503,7 +515,7 @@ endif() target_compile_definitions(${APP_LIBRARY} PUBLIC ENABLE_APP_EXPORT_PLUGIN) add_dependencies(${APP_LIBRARY} update_translations ${TARGET_NAME}-git-version) -add_dependencies(${TARGET_NAME} ${APP_LIBRARY}) +add_dependencies(${TARGET_NAME} ${APP_LIBRARY} ${APP_PLUGIN}) # ------------------------------------------------------------------------------ @@ -514,7 +526,8 @@ set(LINPHONE_BUILDER_SIGNING_IDENTITY ${LINPHONE_BUILDER_SIGNING_IDENTITY}) add_custom_command(TARGET ${TARGET_NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/include/" "${CMAKE_INSTALL_PREFIX}/include/") #add_custom_command(TARGET ${TARGET_NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/include/LinphoneApp/*" "${CMAKE_INSTALL_PREFIX}/include/LinphoneApp/") #configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/*" "${CMAKE_INSTALL_PREFIX}/include/LinphoneApp/" COPYONLY) -install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include" DESTINATION ${CMAKE_INSTALL_PREFIX}) +install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include" DESTINATION ".") + add_subdirectory(build) add_subdirectory(cmake_builder/linphone_package) diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt index ce2166e09..9a3ef31af 100644 --- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt +++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt @@ -129,7 +129,7 @@ if (WIN32) install(FILES ${GRAMMAR_FILES} DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/" ) install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/images" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}" USE_SOURCE_PERMISSIONS OPTIONAL) install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}" USE_SOURCE_PERMISSIONS) - install(DIRECTORY "${CMAKE_INSTALL_PREFIX}/plugins/" DESTINATION "plugins" USE_SOURCE_PERMISSIONS OPTIONAL) + install(FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Linphone/rootca.pem" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}/") install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../assets/linphonerc-factory" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}") set(APP_QT_CONF_DPI "0") @@ -137,7 +137,8 @@ if (WIN32) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/../../assets/qt.conf.in" "${CMAKE_CURRENT_BINARY_DIR}/../../qt.conf" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../../qt.conf" DESTINATION "${CMAKE_INSTALL_BINDIR}") install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../assets/assistant" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS) - install( CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} \"\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${EXECUTABLE_NAME}.exe\" -qmldir=${LINPHONE_QML_DIR} --compiler-runtime)")# -verbose=2)" COMPONENT binary_application) + install(TARGETS ${APP_PLUGIN} DESTINATION "${CMAKE_INSTALL_BINDIR}") + install(CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} \"\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${EXECUTABLE_NAME}.exe\" -qmldir=${LINPHONE_QML_DIR} --compiler-runtime)")# -verbose=2)" COMPONENT binary_application) # list(REMOVE_ITEM SHARE_CONTENT "${CMAKE_INSTALL_DATAROOTDIR}/belr" "${CMAKE_INSTALL_DATAROOTDIR}/Belr" "${CMAKE_INSTALL_DATAROOTDIR}/images" "${CMAKE_INSTALL_DATAROOTDIR}/${APPLICATION_NAME}" "${CMAKE_INSTALL_DATAROOTDIR}/${APPLICATION_NAME}" "${CMAKE_INSTALL_DATAROOTDIR}/sounds") # foreach (ITEM IN LISTS SHARE_CONTENT) @@ -156,7 +157,7 @@ elseif (APPLE) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../../qt.conf" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../../Info.plist" DESTINATION "${APPLICATION_NAME}.app/Contents") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}.icns" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources") - install( CODE "execute_process(COMMAND rsync -a \"${LINPHONE_OUTPUT_DIR}/Frameworks\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/\" )") #Use rsync to bypass symlinks override issues of frameworks + install(CODE "execute_process(COMMAND rsync -a \"${LINPHONE_OUTPUT_DIR}/Frameworks\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/\" )") #Use rsync to bypass symlinks override issues of frameworks file(GLOB SHARED_LIBRARIES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/lib*.dylib") if( ENABLE_OPENH264 )# Remove openH264 lib from the installation. this codec will be download by user foreach(item ${SHARED_LIBRARIES}) @@ -182,22 +183,23 @@ elseif (APPLE) message("Changing RPATH of ${LIBRARY_FILENAME} from '${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}' to '@executable_path/../Frameworks'") execute_process(COMMAND install_name_tool -rpath "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}" "@executable_path/../Frameworks" "${LIBRARY}") endforeach () - install( CODE "execute_process(COMMAND install_name_tool -add_rpath \"@executable_path/../Frameworks/\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/MacOS/${EXECUTABLE_NAME}\")") - install( CODE "execute_process(COMMAND install_name_tool -add_rpath \"@executable_path/../lib/\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/MacOS/${EXECUTABLE_NAME}\")") + install(TARGETS ${APP_PLUGIN} DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks") + install(CODE "execute_process(COMMAND install_name_tool -add_rpath \"@executable_path/../Frameworks/\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/MacOS/${EXECUTABLE_NAME}\")") + install(CODE "execute_process(COMMAND install_name_tool -add_rpath \"@executable_path/../lib/\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/MacOS/${EXECUTABLE_NAME}\")") if(ENABLE_APP_PACKAGING) find_program(DEPLOYQT_PROGRAM macdeployqt) if (NOT DEPLOYQT_PROGRAM) message(FATAL_ERROR "Could not find the macdeployqt program. Make sure it is in the PATH.") endif() - install( CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} \${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR})") + install(CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} \${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR})") endif() if (LINPHONE_BUILDER_SIGNING_IDENTITY) install(CODE "file(GLOB FRAMEWORKS_NAMES \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/Frameworks/*\") foreach (FRAMEWORK \${FRAMEWORKS_NAMES}) execute_process(COMMAND \"codesign\" \"--options\" \"runtime,library\" \"--force\" \"--deep\" \"--verbose\" \"-s\" \"${LINPHONE_BUILDER_SIGNING_IDENTITY}\" \"\${FRAMEWORK}\") endforeach ()") - install( CODE "execute_process(COMMAND \"codesign\" \"--force\" \"--deep\" \"--options\" \"runtime,library\" \"--verbose\" \"-s\" \"${LINPHONE_BUILDER_SIGNING_IDENTITY}\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/Frameworks/mediastreamer2.framework/Versions/A/Libraries/libmswebrtc.so\")") - install( CODE "execute_process(COMMAND \"codesign\" \"--entitlements\" \"${CMAKE_CURRENT_BINARY_DIR}/../../entitlements.xml\" \"--force\" \"--deep\" \"--options\" \"runtime,library\" \"--verbose\" \"-s\" \"${LINPHONE_BUILDER_SIGNING_IDENTITY}\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app\")") + install(CODE "execute_process(COMMAND \"codesign\" \"--force\" \"--deep\" \"--options\" \"runtime,library\" \"--verbose\" \"-s\" \"${LINPHONE_BUILDER_SIGNING_IDENTITY}\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/Frameworks/mediastreamer2.framework/Versions/A/Libraries/libmswebrtc.so\")") + install(CODE "execute_process(COMMAND \"codesign\" \"--entitlements\" \"${CMAKE_CURRENT_BINARY_DIR}/../../entitlements.xml\" \"--force\" \"--deep\" \"--options\" \"runtime,library\" \"--verbose\" \"-s\" \"${LINPHONE_BUILDER_SIGNING_IDENTITY}\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app\")") endif () # install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app" DESTINATION "." USE_SOURCE_PERMISSIONS) else()# Not Windows and Apple @@ -254,6 +256,7 @@ else()# Not Windows and Apple foreach (DIR ${ICON_DIRS}) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../assets/icons/hicolor/${DIR}/apps/icon.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${DIR}/apps/" RENAME "${EXECUTABLE_NAME}.png") endforeach () + install(TARGETS ${APP_PLUGIN} DESTINATION "${CMAKE_INSTALL_LIBDIR}") endif () if (MSVC) diff --git a/linphone-app/include/LinphoneApp/LinphonePlugin.hpp b/linphone-app/include/LinphoneApp/LinphonePlugin.hpp index e6ec15cfd..7c1999921 100644 --- a/linphone-app/include/LinphoneApp/LinphonePlugin.hpp +++ b/linphone-app/include/LinphoneApp/LinphonePlugin.hpp @@ -5,18 +5,10 @@ #include // Overload this class to make a plugin for the address book importer -#if defined(_MSC_VER) - #ifdef ENABLE_APP_EXPORT_PLUGIN - #define LINPHONEAPP_DLL_API __declspec(dllexport) - #else - #define LINPHONEAPP_DLL_API __declspec(dllimport) - #endif +#ifdef ENABLE_APP_EXPORT_PLUGIN + #define LINPHONEAPP_DLL_API Q_DECL_EXPORT #else - #ifdef ENABLE_APP_EXPORT_PLUGIN - #define LINPHONEAPP_DLL_API __attribute__((visibility("default"))) - #else - #define LINPHONEAPP_DLL_API - #endif + #define LINPHONEAPP_DLL_API Q_DECL_IMPORT #endif class QPluginLoader; diff --git a/linphone-app/tools/create_appimage.sh b/linphone-app/tools/create_appimage.sh index fbeac0f69..5b28080f5 100755 --- a/linphone-app/tools/create_appimage.sh +++ b/linphone-app/tools/create_appimage.sh @@ -43,6 +43,7 @@ rm -rf "${WORK_DIR}/AppDir/usr/lib64" #Copy soci sqlite3 backend mkdir -p "${WORK_DIR}/AppDir/usr/lib" cp -f "${BIN_SOURCE_DIR}/lib"/libsoci_sqlite3* "${WORK_DIR}/AppDir/usr/lib/" +cp -f "${BIN_SOURCE_DIR}/lib"/libapp-plugin* "${WORK_DIR}/AppDir/usr/lib/" if [ -d "${BIN_SOURCE_DIR}/lib64/mediastreamer" ]; then mkdir -p "${WORK_DIR}/AppDir/usr/plugins/" diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 1a07fc2a7..eeeaa625f 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -21,6 +21,8 @@ ################################################################################ cmake_minimum_required(VERSION 3.1) +project(app-plugins) + ## Add custom plugins macro(get_all_subdirs result curdir) file(GLOB children RELATIVE ${curdir} ${curdir}/*) diff --git a/plugins/example/CMakeLists.txt b/plugins/example/CMakeLists.txt index 7b90d3958..28bfc6b99 100644 --- a/plugins/example/CMakeLists.txt +++ b/plugins/example/CMakeLists.txt @@ -101,6 +101,7 @@ find_package(Qt5 COMPONENTS ${QT5_PACKAGES_OPTIONAL} QUIET) find_package(LinphoneCxx CONFIG) find_package(bctoolbox CONFIG) +find_library(APP_PLUGIN_LIBRARY NAMES "app-plugin" PATHS "${APP_PLUGIN_LIB_PATH}" REQUIRED) # ------------------------------------------------------------------------------ # Build. @@ -108,9 +109,10 @@ find_package(bctoolbox CONFIG) add_library(${TARGET_NAME} SHARED ${SOURCES} ${HEADERS}) -target_link_libraries(${TARGET_NAME} PRIVATE Qt5::Widgets Qt5::Network ${LINPHONECXX_LIBRARIES}) +target_link_libraries(${TARGET_NAME} PRIVATE Qt5::Widgets Qt5::Network ${LINPHONECXX_LIBRARIES} ${APP_PLUGIN_LIBRARY}) target_compile_options(${TARGET_NAME} PRIVATE ${COMPILE_OPTIONS}) set_source_files_properties( ${TARGET_NAME} PROPERTIES EXTERNAL_OBJECT true GENERATED true ) + set_property(TARGET ${TARGET_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON) #Need by Qt target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_PREFIX_PATH} ${LINPHONECXX_INCLUDE_DIRS}) set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "${TARGET_NAME}-${PLUGIN_VERSION}")