diff --git a/CMakeLists.txt b/CMakeLists.txt index 25558a162..9b5546aa5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,7 +58,12 @@ 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};${CMAKE_BINARY_DIR}/linphone-app") +set(CMAKE_PREFIX_PATH "${LINPHONE_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR}/include${PREFIX_PATH}") +if(WIN32) + set( CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${APPLICATION_OUTPUT_DIR}/${CMAKE_INSTALL_BINDIR}") +else() + set( CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${APPLICATION_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}") +endif() string(REPLACE ";" "|" PREFIX_PATH "${CMAKE_PREFIX_PATH}") #set(PREFIX_PATH "${LINPHONE_OUTPUT_DIR}|${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}") @@ -145,6 +150,26 @@ if(UNIX AND NOT APPLE) set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/lib64:$ORIGIN/../lib64:$ORIGIN/lib:$ORIGIN/../lib:${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}") list(APPEND APP_OPTIONS "-DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH}") endif() + + + +if(ENABLE_BUILD_APP_PLUGINS) + file(GLOB children RELATIVE plugins plugins/*) + set(dirlist "") + foreach(child ${children}) + if(IS_DIRECTORY ${curdir}/${child} AND (ENABLE_BUILD_EXAMPLES OR NOT ${child} MATCHES "example")) + list(APPEND dirlist ${child}) + endif() + endforeach() + list(LENGTH dirlist count) + if(NOT count) + set(ENABLE_BUILD_APP_PLUGINS OFF) + message(STATUS "No plugins found for the application to build") + endif() +endif() + + + ExternalProject_Add(sdk PREFIX "${CMAKE_BINARY_DIR}/sdk" SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-sdk" INSTALL_DIR "${LINPHONE_OUTPUT_DIR}" @@ -166,8 +191,6 @@ ExternalProject_Add_Step(sdk force_build include(FindPkgConfig) set(APP_DEPENDS sdk) - - find_package(Qt5 5.9 COMPONENTS Core REQUIRED) if ( NOT Qt5_FOUND ) @@ -189,7 +212,6 @@ if(NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR N BINARY_DIR "${CMAKE_BINARY_DIR}/linphone-app" DEPENDS ${APP_DEPENDS} BUILD_COMMAND ${CMAKE_COMMAND} --build --config $ ${PROJECT_BUILD_COMMAND} - INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step will not be done by external project" LIST_SEPARATOR | # Use the alternate list separator CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_PREFIX_PATH=${PREFIX_PATH} # ${APP_OPTIONS} @@ -200,9 +222,8 @@ if(NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR N SOURCE_DIR "${CMAKE_SOURCE_DIR}/plugins" INSTALL_DIR "${APPLICATION_OUTPUT_DIR}" BINARY_DIR "${CMAKE_BINARY_DIR}/plugins-app" - DEPENDS ${APP_DEPENDS} linphone-qt + DEPENDS linphone-qt BUILD_COMMAND ${CMAKE_COMMAND} --build --config $ ${PROJECT_BUILD_COMMAND} - INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time." LIST_SEPARATOR | # Use the alternate list separator CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_PREFIX_PATH=${PREFIX_PATH} ) @@ -224,8 +245,6 @@ else() add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app) 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 476fad769..21116e150 100644 --- a/linphone-app/CMakeLists.txt +++ b/linphone-app/CMakeLists.txt @@ -43,9 +43,8 @@ include(CheckCXXCompilerFlag) set(TARGET_NAME linphone-qt) -SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS true) +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) @@ -405,12 +404,11 @@ if(WIN32) set(RC_FILE ${CMAKE_CURRENT_BINARY_DIR}/appDetailsWindows.rc) 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}) +add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${QML_SOURCES} ${QRC_RESOURCES} ${PLUGIN_HEADERS})#Need to add Headers to resolve moc Qt symbols if (WIN32) - add_executable(${TARGET_NAME} WIN32 $ $ ${MAIN_FILE} ${QRC_BIG_RESOURCES} ${RC_FILE}) + add_executable(${TARGET_NAME} $ ${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}) @@ -422,14 +420,16 @@ else () add_executable(${TARGET_NAME} $ ${MAIN_FILE} ${QRC_BIG_RESOURCES}) install(TARGETS linphone-qt RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") endif () -set_source_files_properties( ${APP_LIBRARY} PROPERTIES EXTERNAL_OBJECT true GENERATED true ) + set_property(TARGET ${APP_LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE ON) #Need by Qt +set_property(TARGET ${APP_PLUGIN} PROPERTY POSITION_INDEPENDENT_CODE ON) #Need by Qt #Turn on automatic resources compilation by cmake #Instead of excplicitely calling qt5_add_resources set_property(TARGET ${APP_LIBRARY} PROPERTY AUTORCC ON) +set_property(TARGET ${APP_PLUGIN} PROPERTY AUTORCC ON) @@ -439,16 +439,9 @@ if(MSVC) set_target_properties(${TARGET_NAME} PROPERTIES PDB_NAME "${EXECUTABLE_NAME}_app") endif() -#ExternalProject_Get_Property(project_a install_dir) -#include_directories(${install_dir}/include) -#add_dependencies(project_b_exe project_a) -#target_link_libraries(project_b_exe ${install_dir}/lib/alib.lib) - -# 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_target_properties(${APP_PLUGIN} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) set(INCLUDED_DIRECTORIES "${LINPHONECXX_INCLUDE_DIRS}" ) list(APPEND INCLUDED_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/include") @@ -492,29 +485,27 @@ foreach (package ${QT5_PACKAGES_OPTIONAL}) endif () endforeach () -#find_library(CONTACTS_PLUGIN_LIBRARY linphoneAppContacts HINTS "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") -#list(APPEND LIBRARIES ${CONTACTS_PLUGIN_LIBRARY}) if (APPLE) list(APPEND LIBRARIES "-framework Cocoa -framework IOKit -framework AVFoundation") # -framework linphone") #This doesn't work yet 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_include_directories(${APP_LIBRARY} SYSTEM PUBLIC ${INCLUDED_DIRECTORIES}) +target_include_directories(${APP_PLUGIN} SYSTEM PUBLIC ${INCLUDED_DIRECTORIES}) +target_include_directories(${TARGET_NAME} SYSTEM PUBLIC ${INCLUDED_DIRECTORIES}) +target_link_libraries(${APP_LIBRARY} ${LIBRARIES}) target_link_libraries(${APP_PLUGIN} ${LIBRARIES}) target_link_libraries(${APP_LIBRARY} ${APP_PLUGIN}) - -target_link_libraries(${TARGET_NAME} ${LIBRARIES} ${APP_PLUGIN}) +target_link_libraries(${TARGET_NAME} ${LIBRARIES}) +target_link_libraries(${TARGET_NAME} ${APP_PLUGIN}) if(WIN32) target_link_libraries(${TARGET_NAME} wsock32 ws2_32) endif() -target_compile_definitions(${APP_LIBRARY} PUBLIC ENABLE_APP_EXPORT_PLUGIN) -add_dependencies(${APP_LIBRARY} update_translations ${TARGET_NAME}-git-version) +add_dependencies(${APP_LIBRARY} update_translations ${TARGET_NAME}-git-version ${APP_PLUGIN}) add_dependencies(${TARGET_NAME} ${APP_LIBRARY} ${APP_PLUGIN}) diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt index 9a3ef31af..331d0e27d 100644 --- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt +++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt @@ -73,6 +73,11 @@ elseif (APPLE) set(LIBPREFIX "lib") set(LIBEXT "dylib") set(PLUGINEXT "so") +else() + set(LIBDIR ${CMAKE_INSTALL_LIBDIR}) + set(LIBPREFIX "lib") + set(LIBEXT "so") + set(PLUGINEXT "so") endif () # Removed unless it is useful to get a zip from SDK : The SDK is packaged with binaries. @@ -94,6 +99,12 @@ endif () # ) #endif () +install(TARGETS ${APP_PLUGIN} + ARCHIVE DESTINATION "${LIBDIR}" + LIBRARY DESTINATION "${LIBDIR}" + RUNTIME DESTINATION "${LIBDIR}" + ) + # ============================================================================== # Specific deployment. # ============================================================================== @@ -137,7 +148,6 @@ 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(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") @@ -183,7 +193,11 @@ 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(TARGETS ${APP_PLUGIN} DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks") + install(TARGETS ${APP_PLUGIN} + ARCHIVE DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks" + LIBRARY DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks" + RUNTIME 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) @@ -256,9 +270,9 @@ 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) # string(REGEX REPLACE "Visual Studio ([0-9]+).*" "\\1" MSVC_VERSION "${CMAKE_GENERATOR}") include(InstallRequiredSystemLibraries) diff --git a/linphone-app/include/LinphoneApp/PluginDataAPI.hpp b/linphone-app/include/LinphoneApp/PluginDataAPI.hpp index 010215e48..af2814e46 100644 --- a/linphone-app/include/LinphoneApp/PluginDataAPI.hpp +++ b/linphone-app/include/LinphoneApp/PluginDataAPI.hpp @@ -4,7 +4,7 @@ #include #ifdef ENABLE_APP_EXPORT_PLUGIN - #include "include/LinphoneApp/LinphonePlugin.hpp" + #include "LinphonePlugin.hpp" #else #include #endif diff --git a/linphone-app/include/LinphoneApp/PluginNetworkHelper.hpp b/linphone-app/include/LinphoneApp/PluginNetworkHelper.hpp index 6bfb62574..c7feb0a64 100644 --- a/linphone-app/include/LinphoneApp/PluginNetworkHelper.hpp +++ b/linphone-app/include/LinphoneApp/PluginNetworkHelper.hpp @@ -7,7 +7,7 @@ #ifdef ENABLE_APP_EXPORT_PLUGIN - #include "include/LinphoneApp/LinphonePlugin.hpp" + #include "LinphonePlugin.hpp" #else #include #endif diff --git a/linphone-app/src/utils/plugins/PluginsManager.cpp b/linphone-app/src/utils/plugins/PluginsManager.cpp index 63143e3c5..3ed134814 100644 --- a/linphone-app/src/utils/plugins/PluginsManager.cpp +++ b/linphone-app/src/utils/plugins/PluginsManager.cpp @@ -20,8 +20,9 @@ #include "PluginsManager.hpp" //#include "ContactsImporterModel.hpp" -#include "include/LinphoneApp/LinphonePlugin.hpp" -#include "include/LinphoneApp/PluginNetworkHelper.hpp" +#include "../../../include/LinphoneApp/LinphonePlugin.hpp" +#include "../../../include/LinphoneApp/PluginDataAPI.hpp" +#include "../../../include/LinphoneApp/PluginNetworkHelper.hpp" #include "utils/Utils.hpp" #include "app/paths/Paths.hpp"