diff --git a/.gitlab-ci-files/job-macosx-desktop.yml b/.gitlab-ci-files/job-macosx-desktop.yml index cc62bc541..e7f04fc3c 100644 --- a/.gitlab-ci-files/job-macosx-desktop.yml +++ b/.gitlab-ci-files/job-macosx-desktop.yml @@ -15,7 +15,7 @@ echo $DEFAULT_MACOS_CMAKE_OPTIONS echo $CMAKE_OPTIONS echo $ADDITIONAL_BUILD_OPTIONS - cmake .. -G "$CMAKE_GENERATOR" -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS + cmake .. -G "$CMAKE_GENERATOR" -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS -DLINPHONE_BUILDER_SIGNING_IDENTITY="$MACOS_SIGNING_IDENTITY" cmake --build . --target all $LBC_NODEBUG_OPTIONS -- $ADDITIONAL_BUILD_OPTIONS ccache -s @@ -91,7 +91,8 @@ job-macosx-makefile-package: extends: job-macosx-makefile script: - *build_all_script - - codesign --verbose -s "$MACOS_SIGNING_IDENTITY" OUTPUT/Packages/Linphone*.dmg + - codesign --options runtime,library --verbose -s "$MACOS_SIGNING_IDENTITY" OUTPUT/Packages/Linphone*.dmg + - ./../tools/app_notarization.sh artifacts: paths: - build/OUTPUT/Packages/Linphone*.dmg diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt index 2659a5c79..cf881cfde 100644 --- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt +++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt @@ -39,17 +39,17 @@ set(LINPHONE_QML_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../ui") # Build package version. # ============================================================================== -if (GIT_EXECUTABLE) +if (GIT_EXECUTABLE AND NOT(APP_PROJECT_VERSION)) execute_process( COMMAND ${GIT_EXECUTABLE} describe --always - OUTPUT_VARIABLE LINPHONE_GIT_REVISION + OUTPUT_VARIABLE APP_PROJECT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../.." ) -else () - set(LINPHONE_GIT_REVISION "0.0.0") +elseif (NOT(APP_PROJECT_VERSION)) + set(APP_PROJECT_VERSION "0.0.0") endif () -string(REGEX REPLACE "([0-9.]+)-?.*" "\\1" LINPHONE_VERSION "${LINPHONE_GIT_REVISION}") +string(REGEX REPLACE "([0-9.]+)-?.*" "\\1" LINPHONE_VERSION "${APP_PROJECT_VERSION}") string(REPLACE "." ";" SPLITTED_LINPHONE_VERSION "${LINPHONE_VERSION}") list(LENGTH SPLITTED_LINPHONE_VERSION SPLITTED_LINPHONE_VERSION_LENGTH) list(GET SPLITTED_LINPHONE_VERSION 0 LINPHONE_MAJOR_VERSION) @@ -80,7 +80,7 @@ endif () # find_program(7Z_PROGRAM 7z PATHS "$ENV{ProgramFiles}/7-Zip") # if (7Z_PROGRAM) # execute_process( -# COMMAND ${7Z_PROGRAM} a -tzip ${CMAKE_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-${LINPHONE_GIT_REVISION}-win32.zip "@${EXECUTABLE_NAME}-sdk.list" +# COMMAND ${7Z_PROGRAM} a -tzip ${CMAKE_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-${APP_PROJECT_VERSION}-win32.zip "@${EXECUTABLE_NAME}-sdk.list" # WORKING_DIRECTORY ${LINPHONE_OUTPUT_DIR} # ) # else () @@ -88,8 +88,8 @@ endif () # endif () #elseif (APPLE) # execute_process( -# COMMAND rm -rf "${CMAKE_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-${LINPHONE_GIT_REVISION}-mac.zip" -# COMMAND zip -ry "${CMAKE_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-${LINPHONE_GIT_REVISION}-mac.zip" . -i "@${EXECUTABLE_NAME}-sdk.list" +# COMMAND rm -rf "${CMAKE_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-${APP_PROJECT_VERSION}-mac.zip" +# COMMAND zip -ry "${CMAKE_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-${APP_PROJECT_VERSION}-mac.zip" . -i "@${EXECUTABLE_NAME}-sdk.list" # WORKING_DIRECTORY ${LINPHONE_OUTPUT_DIR} # ) #endif () @@ -180,18 +180,12 @@ elseif (APPLE) install( CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} \${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR})") endif() if (LINPHONE_BUILDER_SIGNING_IDENTITY) - file(GLOB FRAMEWORKS_NAMES "${CMAKE_CURRENT_BINARY_DIR}/../../${APPLICATION_NAME}.app/Contents/Frameworks/*") - foreach (FRAMEWORK ${FRAMEWORKS_NAMES}) - execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${FRAMEWORK}") - endforeach () - file(GLOB PLUGINS_NAMES "${CMAKE_CURRENT_BINARY_DIR}/../../${APPLICATION_NAME}.app/Contents/PlugIns/*") - foreach (PLUGIN ${PLUGINS_NAMES}) - file(GLOB PLUGINS_FILES "${PLUGIN}/*") - foreach (PLUGIN_FILE ${PLUGINS_FILES}) - execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${PLUGIN_FILE}") - endforeach () - endforeach () - execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${CMAKE_CURRENT_BINARY_DIR}/../../${APPLICATION_NAME}.app") + 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\" \"--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) @@ -199,7 +193,8 @@ else()# Not Windows and Apple foreach (LIBRARY ${SHARED_LIBRARIES}) get_filename_component(LIBRARY_FILENAME ${LIBRARY} NAME) message("Changing RPATH of ${LIBRARY_FILENAME} from '${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}' to '$ORIGIN/../${CMAKE_INSTALL_LIBDIR}'") - execute_process(COMMAND install_name_tool -rpath "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}" "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}" "${LIBRARY}") + execute_process(COMMAND install_name_tool -rpath "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}" "$ORIGIN/../lib" "${LIBRARY}") + execute_process(COMMAND install_name_tool -addrpath "$ORIGIN/../lib64" "${LIBRARY}") endforeach () install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_BINDIR}/" DESTINATION "${CMAKE_INSTALL_BINDIR}" USE_SOURCE_PERMISSIONS) @@ -232,7 +227,7 @@ else()# Not Windows and Apple install(FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/cpim_grammar" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/") install(FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/vcard_grammar" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/") install(FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/linphone/rootca.pem" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${APPLICATION_NAME}") #We use executable_name because of name folder that is not harmonized from the SDK - install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}" DESTINATION "${CMAKE_INSTALL_BINDIR}") + install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}" DESTINATION "${CMAKE_INSTALL_BINDIR}") endif () if (MSVC) @@ -288,7 +283,7 @@ if(${ENABLE_APP_PACKAGING}) set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/../../assets/icon.ico") if (APPLE) - set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${LINPHONE_GIT_REVISION}-mac") + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${APP_PROJECT_VERSION}-mac") set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/macos/background_dmg.jpg") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/linphone_dmg.scpt.in" "${CMAKE_CURRENT_BINARY_DIR}/linphone_dmg.scpt" @ONLY) set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/linphone_dmg.scpt") @@ -296,12 +291,12 @@ if(${ENABLE_APP_PACKAGING}) message(STATUS "Set DragNDrop CPack generator in OUTPUT/Packages") elseif(NOT(WIN32)) set(DO_APPIMAGE YES) - set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${LINPHONE_GIT_REVISION}") + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${APP_PROJECT_VERSION}") message(STATUS "Set AppImage CPack generator in OUTPUT/Packages") else() set(CPACK_GENERATOR "NSIS") set(DO_GENERATOR YES) - set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${LINPHONE_GIT_REVISION}-win32") + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${APP_PROJECT_VERSION}-win32") string(COMPARE EQUAL ${CPACK_GENERATOR} "NSIS" IS_NSIS) if (${IS_NSIS}) set(PACKAGE_EXT "exe") diff --git a/linphone-app/cmake_builder/linphone_package/packaging.cmake.in b/linphone-app/cmake_builder/linphone_package/packaging.cmake.in index 89e130737..48a0899d6 100644 --- a/linphone-app/cmake_builder/linphone_package/packaging.cmake.in +++ b/linphone-app/cmake_builder/linphone_package/packaging.cmake.in @@ -62,7 +62,7 @@ if (NOT "${CMAKE_INSTALL_PREFIX}" MATCHES .*/_CPack_Packages/.*) set(ENV QML_SOURCES_PATHS="@QML_SOURCES_PATHS@") set(ENV QML_MODULES_PATHS="@QML_MODULES_PATHS@") execute_process( COMMAND mkdir -p "WORK/Packages/AppImageDir/" WORKING_DIRECTORY "@CMAKE_INSTALL_PREFIX@/..") - execute_process( COMMAND cp -rfv "@CMAKE_CURRENT_SOURCE_DIR@/../../ui" "WORK/Packages/AppImageDir/" WORKING_DIRECTORY "@CMAKE_INSTALL_PREFIX@/..") + execute_process( COMMAND cp -rf "@CMAKE_CURRENT_SOURCE_DIR@/../../ui" "WORK/Packages/AppImageDir/" WORKING_DIRECTORY "@CMAKE_INSTALL_PREFIX@/..") execute_process( COMMAND "@CMAKE_CURRENT_SOURCE_DIR@/../../tools/create_appimage.sh" @CPACK_PACKAGE_FILE_NAME@ RESULT_VARIABLE CPACK_COMMAND_RESULT WORKING_DIRECTORY "@CMAKE_INSTALL_PREFIX@/.." ) if(CPACK_COMMAND_RESULT) message(FATAL_ERROR "Failed to create AppImage package with this command : '@CMAKE_CURRENT_SOURCE_DIR@/../../tools/create_appimage.sh @APP_PROJECT_VERSION@' at @CMAKE_INSTALL_PREFIX@/..\nMaybe the .appimage already exists and is running. Please remove the file before packaging if it is the case.") diff --git a/linphone-app/tools/create_appimage.sh b/linphone-app/tools/create_appimage.sh index 947f98a43..64b89b77c 100755 --- a/linphone-app/tools/create_appimage.sh +++ b/linphone-app/tools/create_appimage.sh @@ -25,12 +25,16 @@ BIN_SOURCE_DIR="OUTPUT/" WORK_DIR="WORK/Packages/AppImageDir" -mkdir -p "${WORK_DIR}/app/" -mkdir -p "${WORK_DIR}/usr/share" +rm -rf ${WORK_DIR}/AppDir +mkdir -p "${WORK_DIR}/AppDir/usr/" -cp -rfv "${BIN_SOURCE_DIR}"/* "${WORK_DIR}/app/" -rm -rfv "${WORK_DIR}/app/Packages" -cp -rfv "${WORK_DIR}/app/share" "${WORK_DIR}/usr/" +#Copy all files from the output project +cp -rf "${BIN_SOURCE_DIR}"/* "${WORK_DIR}/AppDir/usr/" +#remove Packages folder : it is not part of the project +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" if [ -f "${WORK_DIR}/AppBin/linuxdeploy-x86_64.AppImage" ]; then echo "linuxdeploy-x86_64.AppImage exists" @@ -44,7 +48,8 @@ else wget -P "${WORK_DIR}/AppBin" https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage chmod +x "${WORK_DIR}/AppBin/linuxdeploy-plugin-qt-x86_64.AppImage" fi -./${WORK_DIR}/AppBin/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 --plugin qt +export QML_SOURCES_PATHS=${QML_SOURCES_PATHS}:${WORK_DIR}/.. +./${WORK_DIR}/AppBin/linuxdeploy-x86_64.AppImage --appdir=${WORK_DIR}/AppDir -e ${WORK_DIR}/AppDir/usr/bin/linphone --output appimage --desktop-file=${WORK_DIR}/AppDir/usr/share/applications/linphone.desktop -i ${WORK_DIR}/AppDir/usr/share/icons/hicolor/scalable/apps/linphone.svg --plugin qt #./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 mkdir -p "${BIN_SOURCE_DIR}/Packages" diff --git a/linphone-sdk b/linphone-sdk index 30d17ef65..2756e2e3d 160000 --- a/linphone-sdk +++ b/linphone-sdk @@ -1 +1 @@ -Subproject commit 30d17ef6505f75f938943db373c6c617baa28028 +Subproject commit 2756e2e3d2e57944a8057d0c491dc2c67a8fce08 diff --git a/tools/app_notarization.sh b/tools/app_notarization.sh new file mode 100755 index 000000000..b1c1b0071 --- /dev/null +++ b/tools/app_notarization.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +#Notarization for Mac. Launch it from the build folder + +#rm notarize_result.plist +FILES=OUTPUT/Packages/Linphone*.dmg +for f in $FILES +do + linphone_file=$f +done + +echo "Uploading $linphone_file file with xcrun altool" +xcrun altool --notarize-app --primary-bundle-id $MACOSX_SIGNING_IDENTIFIER -u "$MACOSX_SIGNING_MAIL" -p "$MACOSX_SIGNING_PASS" --asc-provider "$MACOSX_SIGNING_PROVIDER" --file $linphone_file --output-format xml > "notarize_result.plist" +echo "dmg processed. Checking UUID" +request_uuid="$("/usr/libexec/PlistBuddy" -c "Print notarization-upload:RequestUUID" notarize_result.plist)" +echo "Notarization UUID: ${request_uuid}" +#Get status from upload +for (( ; ; )) +do + echo "Getting notarization status" + xcrun altool --notarization-info "${request_uuid}" -u "$MACOSX_SIGNING_MAIL" -p "$MACOSX_SIGNING_PASS" --asc-provider "$MACOSX_SIGNING_PROVIDER" --output-format xml > "notarize_result2.plist" + xcrun_result=$? + if [ "${xcrun_result}" != "0" ] + then + echo "Notarization failed: ${xcrun_result}" + cat "notarize_result2.plist" + exit 1 + fi + notarize_status="$("/usr/libexec/PlistBuddy" -c "Print notarization-info:Status" notarize_result2.plist)" + if [[ "${notarize_status}" == *"in progress"* ]]; then + echo "Waiting for notarization to complete: ${notarize_status}" + sleep 20 + else + echo "Notarization status: ${notarize_status}" + break + fi +done +log_url="$("/usr/libexec/PlistBuddy" -c "Print notarization-info:LogFileURL" notarize_result2.plist)" +echo "Notarization log URL: ${log_url}" + +if [ "${notarize_status}" != "success" ] +then + echo "Notarization failed." + if [ ! -z "${log_url}" ] + then + curl "${log_url}" + fi + exit 1 +fi + +echo "Stapling notarization result..." +for (( ; ; )) +do + xcrun stapler staple -q $linphone_file + stapler_result=$? + if [ "${stapler_result}" = "65" ] + then + echo "Waiting for stapling to find record" + sleep 10 + else + echo "Stapler status: ${stapler_result}" + break + fi +done + + +spctl --assess --type open --context context:primary-signature -v $linphone_file +#validation_result=$? + +echo "Validating image : $?" +#if [ "${validation_result}" != 0 ] +#then +# echo "Failed to validate image: ${validation_result}" +# curl "${log_url}" +# exit 1 +#fi +exit 0 diff --git a/tools/linuxdeploy-x86_64.AppImage b/tools/linuxdeploy-x86_64.AppImage deleted file mode 100755 index ab12118d3..000000000 Binary files a/tools/linuxdeploy-x86_64.AppImage and /dev/null differ