From d430df770b2236fcd01ef4cbf99487be246697d8 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Wed, 10 Jun 2020 21:24:47 -0700 Subject: [PATCH] More work --- .travis.yml | 2 +- QGCSetup.pri => QGCPostLinkCommon.pri | 37 +++++++------------- QGCInstaller.pri => QGCPostLinkInstaller.pri | 36 ++++++++++--------- qgroundcontrol.pro | 21 ++++++----- tools/prepare_gstreamer_framework.sh | 2 +- 5 files changed, 45 insertions(+), 53 deletions(-) rename QGCSetup.pri => QGCPostLinkCommon.pri (67%) rename QGCInstaller.pri => QGCPostLinkInstaller.pri (64%) diff --git a/.travis.yml b/.travis.yml index 11443b695..32cb87086 100644 --- a/.travis.yml +++ b/.travis.yml @@ -212,7 +212,7 @@ script: mkdir -p ~/.config/QtProject/ && cp ${TRAVIS_BUILD_DIR}/test/qtlogging.ini ~/.config/QtProject/ && export QT_FATAL_WARNINGS=1 && - ./debug/qgroundcontrol-start.sh --unittest; + ./qgc-app/qgroundcontrol-start.sh --unittest; fi after_success: diff --git a/QGCSetup.pri b/QGCPostLinkCommon.pri similarity index 67% rename from QGCSetup.pri rename to QGCPostLinkCommon.pri index fb924291b..a545aa887 100644 --- a/QGCSetup.pri +++ b/QGCPostLinkCommon.pri @@ -7,37 +7,26 @@ # ################################################################################ -QMAKE_POST_LINK += echo "QGC Post Link" +# These are the Post Link steps which are common to all builds # # Perform platform specific setup # MacBuild { - # The Post Link phase happens before a qmake built XCode Project does the "Project Copy" phase. - # This means the QGroundControl.app is not yet in the DESTDIR. It is still in XCode BUILT_PRODUCTS_DIR location. - # I could figure out a way to make it work without duplicating the code. This is because XCode puts these command - # into a shell script and Qt Creator put them into a makefile. macx-xcode { - # Copy non-standard frameworks into app package - QMAKE_POST_LINK += && rsync -a --delete $$BASEDIR/libs/Frameworks $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/ - # SDL2 Framework - QMAKE_POST_LINK += && install_name_tool -change "@rpath/SDL2.framework/Versions/A/SDL2" "@executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2" $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/MacOS/$${TARGET} - # AirMap - contains (DEFINES, QGC_AIRMAP_ENABLED) { - QMAKE_POST_LINK += && rsync -a $$BASEDIR/libs/airmapd/macOS/$$AIRMAP_QT_PATH/* $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/Frameworks/ - QMAKE_POST_LINK += && install_name_tool -change "@rpath/libairmap-qt.0.0.1.dylib" "@executable_path/../Frameworks/libairmap-qt.0.0.1.dylib" $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/MacOS/$${TARGET} - } - } else { - # Copy non-standard frameworks into app package - QMAKE_POST_LINK += && rsync -a --delete $$BASEDIR/libs/Frameworks $$DESTDIR/$${TARGET}.app/Contents/ - # SDL2 Framework - QMAKE_POST_LINK += && install_name_tool -change "@rpath/SDL2.framework/Versions/A/SDL2" "@executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2" $$DESTDIR/$${TARGET}.app/Contents/MacOS/$${TARGET} - # AirMap - contains (DEFINES, QGC_AIRMAP_ENABLED) { - QMAKE_POST_LINK += && rsync -a $$BASEDIR/libs/airmapd/macOS/$$AIRMAP_QT_PATH/* $$DESTDIR/$${TARGET}.app/Contents/Frameworks/ - QMAKE_POST_LINK += && install_name_tool -change "@rpath/libairmap-qt.0.0.1.dylib" "@executable_path/../Frameworks/libairmap-qt.0.0.1.dylib" $$DESTDIR/$${TARGET}.app/Contents/MacOS/$${TARGET} - } + # XCode Project builds create the .app in BUILT_PRODUCTS_DIR. Copy it to the normal location for QtCreator builds. + QMAKE_POST_LINK += cp -r $BUILT_PRODUCTS_DIR/$${TARGET}.app . + } + + # Copy non-standard frameworks into app package + QMAKE_POST_LINK += rsync -a --delete $$BASEDIR/libs/Frameworks $${TARGET}.app/Contents/ + # SDL2 Framework + QMAKE_POST_LINK += && install_name_tool -change "@rpath/SDL2.framework/Versions/A/SDL2" "@executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2" $${TARGET}.app/Contents/MacOS/$${TARGET} + # AirMap + contains (DEFINES, QGC_AIRMAP_ENABLED) { + QMAKE_POST_LINK += && rsync -a $$BASEDIR/libs/airmapd/macOS/$$AIRMAP_QT_PATH/* $${TARGET}.app/Contents/Frameworks/ + QMAKE_POST_LINK += && install_name_tool -change "@rpath/libairmap-qt.0.0.1.dylib" "@executable_path/../Frameworks/libairmap-qt.0.0.1.dylib" $${TARGET}.app/Contents/MacOS/$${TARGET} } } diff --git a/QGCInstaller.pri b/QGCPostLinkInstaller.pri similarity index 64% rename from QGCInstaller.pri rename to QGCPostLinkInstaller.pri index 80bbd1d38..b2a275056 100644 --- a/QGCInstaller.pri +++ b/QGCPostLinkInstaller.pri @@ -7,9 +7,15 @@ # ################################################################################ +# These are the Post Link steps which are specific to installer builds + installer { DEFINES += QGC_INSTALL_RELEASE + MacBuild { + QMAKE_POST_LINK += && mkdir -p staging + QMAKE_POST_LINK += && cp -r $${TARGET}.app staging # fixme rsync instead + VideoEnabled { # Install the gstreamer framework # This will: @@ -18,24 +24,22 @@ installer { # Relocate all dylibs so they can work under @executable_path/... # Copy the result into the app bundle # Make sure qgroundcontrol can find them - message("Preparing GStreamer Framework") - QMAKE_POST_LINK += && $$BASEDIR/tools/prepare_gstreamer_framework.sh $${OUT_PWD}/gstwork/ $${DESTDIR}/$${TARGET}.app $${TARGET} - } else { - message("Skipping GStreamer Framework") + QMAKE_POST_LINK += && $$BASEDIR/tools/prepare_gstreamer_framework.sh $${OUT_PWD}/gstwork/ staging/$${TARGET}.app $${TARGET} } - # We cd to release directory so we can run macdeployqt without a path to the - # qgroundcontrol.app file. If you specify a path to the .app file the symbolic - # links to plugins will not be created correctly. - QMAKE_POST_LINK += && cd $${DESTDIR} && $$dirname(QMAKE_QMAKE)/macdeployqt $${TARGET}.app -appstore-compliant -verbose=1 -qmldir=$${BASEDIR}/src + + QMAKE_POST_LINK += && echo macdeployqt + QMAKE_POST_LINK += && $$dirname(QMAKE_QMAKE)/macdeployqt staging/$${TARGET}.app -appstore-compliant -verbose=1 -qmldir=$${BASEDIR}/src # macdeployqt is missing some relocations once in a while. "Fix" it: - QMAKE_POST_LINK += && python $$BASEDIR/tools/osxrelocator.py $${TARGET}.app/Contents @rpath @executable_path/../Frameworks -r > /dev/null 2>&1 + QMAKE_POST_LINK += && echo osxrelocator + QMAKE_POST_LINK += && python $$BASEDIR/tools/osxrelocator.py staging/$${TARGET}.app/Contents @rpath @executable_path/../Frameworks -r > /dev/null 2>&1 # Create package - QMAKE_POST_LINK += && hdiutil create /tmp/tmp.dmg -ov -volname "$${TARGET}-$${MAC_VERSION}" -fs HFS+ -srcfolder "$${DESTDIR}/" - QMAKE_POST_LINK += && mkdir -p $${DESTDIR}/package - QMAKE_POST_LINK += && hdiutil convert /tmp/tmp.dmg -format UDBZ -o $${DESTDIR}/package/$${TARGET}.dmg + QMAKE_POST_LINK += && echo hdiutil + QMAKE_POST_LINK += && mkdir -p package + QMAKE_POST_LINK += && hdiutil create /tmp/tmp.dmg -ov -volname "$${TARGET}-$${MAC_VERSION}" -fs HFS+ -srcfolder "staging" + QMAKE_POST_LINK += && hdiutil convert /tmp/tmp.dmg -format UDBZ -o package/$${TARGET}.dmg QMAKE_POST_LINK += && rm /tmp/tmp.dmg } WindowsBuild { @@ -48,9 +52,9 @@ installer { QMAKE_POST_LINK += && tar -cj --exclude='package' -f release/package/QGroundControl.tar.bz2 release --transform 's/release/qgroundcontrol/' } AndroidBuild { - QMAKE_POST_LINK += && mkdir -p $${DESTDIR}/package - QMAKE_POST_LINK += && make install INSTALL_ROOT=$${DESTDIR}/android-build/ - QMAKE_POST_LINK += && androiddeployqt --input android-libQGroundControl.so-deployment-settings.json --output $${DESTDIR}/android-build --deployment bundled --gradle --sign $${BASEDIR}/android/android_release.keystore dagar --storepass $$(ANDROID_STOREPASS) + QMAKE_POST_LINK += && mkdir -p package + QMAKE_POST_LINK += && make install INSTALL_ROOT=android-build/ + QMAKE_POST_LINK += && androiddeployqt --input android-libQGroundControl.so-deployment-settings.json --output android-build --deployment bundled --gradle --sign $${BASEDIR}/android/android_release.keystore dagar --storepass $$(ANDROID_STOREPASS) contains(QT_ARCH, arm) { QGC_APK_BITNESS = "32" } else:contains(QT_ARCH, arm64) { @@ -58,6 +62,6 @@ installer { } else { QGC_APK_BITNESS = "" } - QMAKE_POST_LINK += && cp $${DESTDIR}/android-build/build/outputs/apk/android-build-release-signed.apk $${DESTDIR}/package/QGroundControl$${QGC_APK_BITNESS}.apk + QMAKE_POST_LINK += && cp android-build/build/outputs/apk/android-build-release-signed.apk package/QGroundControl$${QGC_APK_BITNESS}.apk } } diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index c87c0e296..60293a11d 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -1,11 +1,11 @@ -# ------------------------------------------------- -# QGroundControl - Micro Air Vehicle Groundstation -# Please see our website at -# Maintainer: -# Lorenz Meier -# (c) 2009-2019 QGroundControl Developers -# License terms set in COPYING.md -# ------------------------------------------------- +################################################################################ +# +# (c) 2009-2020 QGROUNDCONTROL PROJECT +# +# QGroundControl is licensed according to the terms in the file +# COPYING.md in the root of the source code directory. +# +################################################################################ QMAKE_PROJECT_DEPTH = 0 # undocumented qmake flag to force absolute paths in make files @@ -28,7 +28,6 @@ include(QGCCommon.pri) TARGET = QGroundControl TEMPLATE = app QGCROOT = $$PWD -DESTDIR = qgc-app QML_IMPORT_PATH += $$PWD/src/QmlControls @@ -1385,7 +1384,7 @@ CONFIG+=lrelease embed_translations contains (CONFIG, QGC_DISABLE_BUILD_SETUP) { message("Disable standard build setup") } else { - include(QGCSetup.pri) + include(QGCPostLinkCommon.pri) } # @@ -1395,7 +1394,7 @@ contains (CONFIG, QGC_DISABLE_BUILD_SETUP) { contains (CONFIG, QGC_DISABLE_INSTALLER_SETUP) { message("Disable standard installer setup") } else { - include(QGCInstaller.pri) + include(QGCPostLinkInstaller.pri) } DISTFILES += \ diff --git a/tools/prepare_gstreamer_framework.sh b/tools/prepare_gstreamer_framework.sh index f59f4c93b..6589e46bb 100755 --- a/tools/prepare_gstreamer_framework.sh +++ b/tools/prepare_gstreamer_framework.sh @@ -75,7 +75,7 @@ echo "GST Installer: Copying $GST_SOURCE to $BUNDLE_TARGET/Contents/Frameworks/" rsync -a --delete $GST_SOURCE $BUNDLE_TARGET/Contents/Frameworks/ || die "Error copying framework into app bundle" #-- The plugin scanner needs to find the GStreamer libraries GSTINBUNDLE=$BUNDLE_TARGET/Contents/Frameworks/GStreamer.framework/Versions/$GST_VER -pushd $GSTINBUNDLE/libexec && ln -sf ../../../../../Frameworks . && popd || die "Error creating Frameworks symlink in $GST_TARGET/libexec" +pushd $GSTINBUNDLE/libexec && ln -sf ../../../../Frameworks . && popd || die "Error creating Frameworks symlink in $GST_TARGET/libexec" #-- Fix main binary install_name_tool -change /Library/Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer @executable_path/../Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer "$QGC_BINARY" > /dev/null || die "Error relocating $QGC_BINARY" pushd $GSTINBUNDLE && install_name_tool -id @executable_path/../Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer GStreamer && popd || die "Error relocating GStreamer" -- 2.22.0