- Fix cmake error (remove object from executable)

- Rewrite import/export libraries
- Fix LIBDIR for all platforms
- Do not try to build plugins if no one exist
This commit is contained in:
Julien Wadel 2021-01-16 14:54:26 +01:00
parent 39dc65266e
commit 7ba41675d1
6 changed files with 63 additions and 38 deletions

View file

@ -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 <BINARY_DIR> --config $<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=<INSTALL_DIR> -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 <BINARY_DIR> --config $<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=<INSTALL_DIR> -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()

View file

@ -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 $<TARGET_OBJECTS:${APP_LIBRARY}> $<TARGET_OBJECTS:${APP_PLUGIN}> ${MAIN_FILE} ${QRC_BIG_RESOURCES} ${RC_FILE})
add_executable(${TARGET_NAME} $<TARGET_OBJECTS:${APP_LIBRARY}> ${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 "$<TARGET_PDB_FILE:${TARGET_NAME}>" DESTINATION ${CMAKE_INSTALL_BINDIR})
@ -422,14 +420,16 @@ else ()
add_executable(${TARGET_NAME} $<TARGET_OBJECTS:${APP_LIBRARY}> ${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})

View file

@ -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)

View file

@ -4,7 +4,7 @@
#include <QVariantMap>
#ifdef ENABLE_APP_EXPORT_PLUGIN
#include "include/LinphoneApp/LinphonePlugin.hpp"
#include "LinphonePlugin.hpp"
#else
#include <LinphoneApp/LinphonePlugin.hpp>
#endif

View file

@ -7,7 +7,7 @@
#ifdef ENABLE_APP_EXPORT_PLUGIN
#include "include/LinphoneApp/LinphonePlugin.hpp"
#include "LinphonePlugin.hpp"
#else
#include <LinphoneApp/LinphonePlugin.hpp>
#endif

View file

@ -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"