* Fix error links like liblinphone++.so.10, complete rpath to use build folder at last

* Allow `--target install` to do build/install
* Generic program installation and simplify "only target"
* Update CI to call explicitly install step
* Rewrite install target name
* Add manually libsoci_sqlite3 in appimage as it cannot be done from binaries
This commit is contained in:
Julien Wadel 2020-10-14 15:55:22 +02:00
parent 721b191fc6
commit 52f5a9f046
10 changed files with 40 additions and 51 deletions

View file

@ -96,7 +96,7 @@ job-centos7-ninja-gcc-package:
- echo $CMAKE_SANITIZER_OPTIONS
- cd build
- cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS
- cmake --build . --target all --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS
- cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS
artifacts:
paths:
- build/OUTPUT/Packages/*.AppImage

View file

@ -118,7 +118,7 @@ job-debian9-makefile-clang-package:
- echo $CMAKE_SANITIZER_OPTIONS
- cd build
- cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS
- cmake --build . --target all --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS
- cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS
artifacts:
paths:
- build/OUTPUT/Packages/*.AppImage

View file

@ -13,7 +13,7 @@
echo $CMAKE_SANITIZER_OPTIONS
cd build
cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS
cmake --build . --target all --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS
cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS
.job-linux-desktop:
stage: build

View file

@ -17,7 +17,7 @@
echo $CMAKE_OPTIONS
echo $ADDITIONAL_BUILD_OPTIONS
cmake .. -G "$CMAKE_GENERATOR" -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS -DLINPHONE_BUILDER_SIGNING_IDENTITY="$MACOS_SIGNING_IDENTITY"
cmake --build . --target all --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS -- $ADDITIONAL_BUILD_OPTIONS
cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS -- $ADDITIONAL_BUILD_OPTIONS
ccache -s
.job-macosx-desktop:
@ -28,6 +28,7 @@
artifacts:
paths:
- build/OUTPUT
when: always
expire_in: 1 week
#################################################
@ -97,7 +98,8 @@ job-macosx-makefile-package:
- ./../tools/app_notarization.sh
artifacts:
paths:
- build/OUTPUT/Packages/Linphone*.dmg
- build/OUTPUT/*
when: always
expire_in: 1 week
#################################################

View file

@ -11,7 +11,7 @@
mkdir OUTPUT
C:\PROGRA~1\Python37\Scripts\cl -s
cmake .. -G "Visual Studio 15 2017" -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=%CI_BUILD_TYPE% %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS%
cmake --build . --target ALL_BUILD --config %CI_BUILD_TYPE% %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
cmake --build . --target install --config %CI_BUILD_TYPE% %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
C:\PROGRA~1\Python37\Scripts\cl -s
.job-windows-vs2017:

View file

@ -135,7 +135,10 @@ if(CMAKE_VERBOSE_MAKEFILE)
list(APPEND PROJECT_BUILD_COMMAND "--verbose")
endif()
endif()
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()
ExternalProject_Add(sdk PREFIX "${CMAKE_BINARY_DIR}/sdk"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-sdk"
INSTALL_DIR "${LINPHONE_OUTPUT_DIR}"
@ -174,17 +177,18 @@ find_package(ortp CONFIG QUIET)
if(NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR NOT (belcard_FOUND) OR NOT (Mediastreamer2_FOUND) OR NOT (ortp_FOUND) OR FORCE_APP_EXTERNAL_PROJECTS)
message("Projects are set as External projects. You can start building them by using for example : cmake --build . --target all")
ExternalProject_Add(linphone-qt PREFIX "${CMAKE_BINARY_DIR}/linphoneqt"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
DEPENDS ${APP_DEPENDS}
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}
message("Projects are set as External projects. You can start building them by using for example : cmake --build . --target install")
ExternalProject_Add(linphone-qt PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
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}
BUILD_ALWAYS ON
BUILD_ALWAYS ON
)
install(CODE "message(STATUS Running install)")
set(AUTO_REGENERATION auto_regeneration)
@ -197,9 +201,10 @@ else()
add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
add_dependencies(app-library ${APP_DEPENDS})
endif()
ExternalProject_Add(linphone-qt-only PREFIX "${CMAKE_BINARY_DIR}/linphoneqt"
ExternalProject_Add(linphone-qt-only PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
BINARY_DIR "${CMAKE_BINARY_DIR}/linphone-app"
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

View file

@ -47,10 +47,10 @@ set(TARGET_NAME linphone-qt)
set(CMAKE_CXX_STANDARD 11)
if(UNIX AND NOT APPLE)
set(CMAKE_INSTALL_RPATH "$ORIGIN;$ORIGIN/lib64;$ORIGIN/../lib64;$ORIGIN/lib;$ORIGIN/../lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake")
list(APPEND CMAKE_MODULE_PATH "${LINPHONE_OUTPUT_DIR}/cmake")
set(APP_LIBRARY app-library)
include(application_info.cmake)
@ -385,27 +385,20 @@ endif()
add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${QML_SOURCES} ${QRC_RESOURCES})
#add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${QML_SOURCES})
if(TARGET_NAME_ONLY)
add_library(${APP_LIBRARY_ONLY} OBJECT EXCLUDE_FROM_ALL ${SOURCES} ${HEADERS} ${QML_SOURCES}})
endif()
if (WIN32)
add_executable(${TARGET_NAME} WIN32 $<TARGET_OBJECTS:${APP_LIBRARY}> ${MAIN_FILE} ${QRC_BIG_RESOURCES} ${RC_FILE})
if(TARGET_NAME_ONLY)
add_executable(${TARGET_NAME_ONLY} WIN32 EXCLUDE_FROM_ALL $<TARGET_OBJECTS:${APP_LIBRARY_ONLY}> ${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})
endif()
elseif (APPLE)
add_executable(${TARGET_NAME} $<TARGET_OBJECTS:${APP_LIBRARY}> ${MAIN_FILE} ${QRC_BIG_RESOURCES})
install(TARGETS linphone-qt RUNTIME DESTINATION "${APPLICATION_NAME}.app/Contents/MacOS") # using ${TARGET_NAME} lead to cmake error on target name. Use directly linphone-qt.
else ()
add_executable(${TARGET_NAME} $<TARGET_OBJECTS:${APP_LIBRARY}> ${MAIN_FILE} ${QRC_BIG_RESOURCES})
if(TARGET_NAME_ONLY)
add_executable(${TARGET_NAME_ONLY} EXCLUDE_FROM_ALL $<TARGET_OBJECTS:${APP_LIBRARY_ONLY}> ${MAIN_FILE} ${QRC_BIG_RESOURCES})
endif()
install(TARGETS linphone-qt RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif ()
if(TARGET_NAME_ONLY)
target_compile_options(${TARGET_NAME_ONLY} PRIVATE -fPIC)
set_source_files_properties( ${APP_LIBRARY_ONLY} PROPERTIES EXTERNAL_OBJECT true GENERATED true )
set_property(TARGET ${APP_LIBRARY_ONLY} PROPERTY POSITION_INDEPENDENT_CODE ON) #Need by Qt
set_property(TARGET ${APP_LIBRARY_ONLY} PROPERTY AUTORCC ON)
set_target_properties(${TARGET_NAME_ONLY} PROPERTIES OUTPUT_NAME "${EXECUTABLE_NAME}")
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
@ -421,7 +414,6 @@ set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "${EXECUTABLE_NAME}"
if(MSVC)
set_target_properties(${TARGET_NAME} PROPERTIES PDB_NAME "${EXECUTABLE_NAME}_app")
set_target_properties(${TARGET_NAME_ONLY} PROPERTIES PDB_NAME "${EXECUTABLE_NAME}_app")
endif()
#ExternalProject_Get_Property(project_a install_dir)
@ -479,18 +471,8 @@ if (APPLE)
endif ()
target_include_directories(${APP_LIBRARY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
if(TARGET_NAME_ONLY)
target_include_directories(${APP_LIBRARY_ONLY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
target_include_directories(${TARGET_NAME_ONLY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
target_link_libraries(${TARGET_NAME_ONLY} ${LIBRARIES})
add_dependencies(${APP_LIBRARY_ONLY} update_translations ${TARGET_NAME}-git-version)
add_dependencies(${TARGET_NAME_ONLY} update_translations )
endif()
#target_link_libraries(${APP_LIBRARY} ${LIBRARIES})
target_link_libraries(${TARGET_NAME} ${LIBRARIES})
if(WIN32)
@ -510,6 +492,7 @@ set(LINPHONE_BUILDER_SIGNING_IDENTITY ${LINPHONE_BUILDER_SIGNING_IDENTITY})
add_subdirectory(build)
add_subdirectory(cmake_builder/linphone_package)
# ------------------------------------------------------------------------------
# To start better integration into IDE.
# ------------------------------------------------------------------------------

View file

@ -121,7 +121,6 @@ if (WIN32)
install(FILES ${PDB_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}/" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
file(GLOB PDB_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/*.pdb")
install(FILES ${PDB_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}/" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}_app.pdb" DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
install(FILES ${EXE_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}/")
file(GLOB PLUGINS_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/mediastreamer/plugins/*")
@ -137,7 +136,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}/${APPLICATION_NAME}" USE_SOURCE_PERMISSIONS)
install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}.exe" 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")
@ -158,7 +156,6 @@ elseif (APPLE)
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(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}" DESTINATION "${APPLICATION_NAME}.app/Contents/MacOS")
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})
@ -256,7 +253,6 @@ 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(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}" DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif ()
if (MSVC)

View file

@ -40,6 +40,9 @@ rm -rf "${WORK_DIR}/AppDir/usr/Packages"
#remove libraries : there are automatically found by linuxdeploy
rm -rf "${WORK_DIR}/AppDir/usr/lib"
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/"
if [ -d "${BIN_SOURCE_DIR}/lib64/mediastreamer" ]; then
mkdir -p "${WORK_DIR}/AppDir/usr/plugins/"
@ -82,7 +85,7 @@ else
#./linuxdeploy-x86_64.AppImage --appdir=${WORK_DIR}/ -e ${WORK_DIR}/app/bin/linphone --output appimage --desktop-file=${WORK_DIR}/app/share/applications/linphone.desktop -i ${WORK_DIR}/app/share/icons/hicolor/scalable/apps/linphone.svg
echo "-- Code Signing of AppImage"
if [ -z "$3" ]; then
./${WORK_DIR}/AppBin/appimagetool-x86_64.AppImage ${WORK_DIR}/AppDir --sign --sign-key $2
./${WORK_DIR}/AppBin/appimagetool-x86_64.AppImage ${WORK_DIR}/AppDir --sign --sign-key $2
else
./${WORK_DIR}/AppBin/appimagetool-x86_64.AppImage ${WORK_DIR}/AppDir --sign --sign-key $2 --sign-args "--pinentry-mode loopback --passphrase $3"
fi

@ -1 +1 @@
Subproject commit b37ed8c48d2a8effa053b9679c47d50111aad50b
Subproject commit c8700f691113dc7771d24e80feb339e1cf0970a0