diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
commit | 267c6f2ac71f92999e969232431ba04678e7437e (patch) | |
tree | 358c9467650e1d0a1d7227a21dac2e3d08b622b2 /bin/create-dmg-from-merged-app-bundle | |
parent | Initial commit. (diff) | |
download | libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.tar.xz libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.zip |
Adding upstream version 4:24.2.0.upstream/4%24.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'bin/create-dmg-from-merged-app-bundle')
-rwxr-xr-x | bin/create-dmg-from-merged-app-bundle | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/bin/create-dmg-from-merged-app-bundle b/bin/create-dmg-from-merged-app-bundle new file mode 100755 index 0000000000..483b1298d7 --- /dev/null +++ b/bin/create-dmg-from-merged-app-bundle @@ -0,0 +1,152 @@ +#!/usr/bin/env bash + +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Exit on errors +set -e + +# Use of unset variable is an error +set -u + +# If any part of a pipeline of commands fails, the whole pipeline fails +set -o pipefail + +if [ `uname` != Darwin ]; then + echo This is for macOS only >&2 + exit 1 +fi + +if [ $# != 2 ]; then + echo Usage: $0 signed-app-bundle type + echo " where type is 'release', 'dev', or 'collabora'" + exit 1 +fi + +if [ ! -d "$1" ]; then + echo No such directory: $1 >&2 + exit 1 +fi + +if [[ "$1" != *.app ]]; then + echo "signed-app-bundle argument $1 does not end with .app" >&2 + exit 1 +fi + +DSSTOREFILE= +VOLUMEICON= +if [ "$2" = "release" ];then + DSSTOREFILE=DS_Store +elif [ "$2" = "dev" ];then + DSSTOREFILE=DS_Store_Dev +elif [ "$2" = "collabora" ];then + DSSTOREFILE=DS_Store + # Collabora is not currently using a volume icon + #VOLUMEICON=main.icns +else + echo "type argument $2 is not equal to 'release', 'dev', or 'collabora'" >&2 + exit 1 +fi + +IN=$(cd "$1" && /bin/pwd) +INAPP=$(basename "$IN") +INDIR=$(dirname "$IN") +OUTVOLUME=$(basename "$IN" .app) +OUTVOLUMEMOUNT=/Volumes/"$OUTVOLUME" +OUTTMPDIR=$(dirname "$IN")/"$OUTVOLUME" +OUTFILE="$OUTTMPDIR".dmg +OUTFILETMP="$OUTTMPDIR".tmp.dmg +SRCDIR=$(cd `dirname "$0"`/.. && /bin/pwd) + +# Create $OUTTMPDIR directory in the same directory as the output .dmg and +# assemble assets + +if [ -f "$OUTFILE" ]; then + echo The file $OUTFILE exists already >&2 + exit 1 +fi + +if [ -d "$OUTFILE" ]; then + echo $OUTFILE exists and is a directory >&2 + exit 1 +fi + +if [ -f "$OUTFILETMP" ]; then + echo The file $OUTFILETMP exists already >&2 + exit 1 +fi + +if [ -d "$OUTFILETMP" ]; then + echo $OUTFILETMP exists and is a directory >&2 + exit 1 +fi + +if [ -d "$OUTTMPDIR" ]; then + echo The directory $OUTTMPDIR exists already >&2 + exit 1 +fi + +if [ -f "$OUTTMPDIR" ]; then + echo $OUTTMPDIR exists and is a file >&2 + exit 1 +fi + +if [ -d "$OUTVOLUMEMOUNT" ]; then + echo The directory $OUTVOLUMEMOUNT exists already >&2 + exit 1 +fi + +if [ -f "$OUTVOLUMEMOUNT" ]; then + echo $OUTVOLUMEMOUNT exists and is a file >&2 + exit 1 +fi + +mkdir "$OUTTMPDIR" +mkdir "$OUTTMPDIR"/.background +tar cf - "$INAPP" -C "$INDIR" | tar xvpf - -C "$OUTTMPDIR" +ln -s /Applications "$OUTTMPDIR"/Applications +cp "$SRCDIR"/setup_native/source/packinfo/DS_Store "$OUTTMPDIR"/.DS_Store +if [ ! -z "$VOLUMEICON" ]; then + cp "$SRCDIR"/sysui/desktop/icons/"$VOLUMEICON" "$OUTTMPDIR"/.VolumeIcon.icns +fi +cp "$SRCDIR"/setup_native/source/packinfo/osxdndinstall.png "$OUTTMPDIR"/.background/background.png + +# Create and mount empty .dmg + +sync + +if [ -z "$VOLUMEICON" ]; then +# Copied and adapted to bash from solenv/bin/modules/installer/simplepackage.pm +# tdf#151341 Use lzfse compression instead of bzip2 +hdiutil create -srcfolder "$OUTTMPDIR" "$OUTFILE" -ov -fs HFS+ -volname "$OUTVOLUME" -format ULFO +else +# To set a volume icon, we need to create a writable .dmg, mount it, set the +# volume icon, unmount it, and then convert it to a read-only .dmg +hdiutil create -srcfolder "$OUTTMPDIR" "$OUTFILETMP" -ov -fs HFS+ -volname "$OUTVOLUME" -format UDRW +sync +hdiutil attach "$OUTFILETMP" +if [ -f "$OUTVOLUMEMOUNT"/.VolumeIcon.icns ]; then + # TODO: SetFile is deprecated so we will eventually need to find another + # way to set the volume icon or stop trying to set the volume icon + SetFile -a C "$OUTVOLUMEMOUNT" +fi +hdiutil detach "$OUTVOLUMEMOUNT" +sync +hdiutil convert "$OUTFILETMP" -format ULFO -o "$OUTFILE" +fi + +sync + +# Print warning about notarization +echo "Successfully created '$OUTFILE'" +echo +echo "Warning: the .dmg is NOT notarized!" +echo +echo "You can manually notarize the .dmg using the following commands:" +echo " xcrun notarytool submit '$OUTFILE' ... [--wait]" +echo " xcrun stapler staple '$OUTFILE'" +echo " xcrun stapler validate '$OUTFILE'" +exit 0 |