aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtools/darwin/packaging/osx/dmgmaker.pl79
-rwxr-xr-xtools/darwin/packaging/osx/dmgmaker.sh42
-rwxr-xr-xtools/darwin/packaging/osx/mkdmg-osx.sh.in6
3 files changed, 45 insertions, 82 deletions
diff --git a/tools/darwin/packaging/osx/dmgmaker.pl b/tools/darwin/packaging/osx/dmgmaker.pl
deleted file mode 100755
index 8d3ab07b53..0000000000
--- a/tools/darwin/packaging/osx/dmgmaker.pl
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/perl
-
-# Copyright (C) 2008-2013 Team Kodi
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-use strict;
-use warnings;
-
-sub make_dmg {
- my $mpkg = shift;
- my $volname = shift;
- my $pkgname = shift;
- my $dev_handle;
-
- die("Could not find \"$mpkg\"\n")
- if ! -d $mpkg;
-
- my $ext = $1 if $mpkg =~ /.*\.(.*?)$/;
- $ext = "mpkg" if !$ext;
-
- # thanks to http://dev.simon-cozens.org/songbee/browser/release-manager-tools/build-dmg.sh
- `hdiutil create -fs HFS+ -volname "$pkgname" -format UDRW -srcfolder "$mpkg" "$volname.dmg"`;
- $dev_handle = `hdiutil attach -readwrite -noverify -noautoopen "$volname.dmg" | grep Apple_HFS`;
- chomp $dev_handle;
- $dev_handle = $1 if $dev_handle =~ /^\/dev\/(disk\d+)/;
- die("Could not obtain device handle\n") if !$dev_handle;
- print "Got device handle \"$dev_handle\"\n";
- #clear the volume - we will copy stuff on it with ditto later
- #this removes crap which might have come in via the srcfolder
- #parameter of hdiutil above
- `rm -r /Volumes/$pkgname/*`;
- print "Ignore \"No space left on device\" warnings from ditto, they are an autosize artifact\n";
- `ditto "$mpkg" "/Volumes/$pkgname/$pkgname.$ext"`;
-
- # set a volume icon if we have one
- if ( -f "VolumeIcon.icns" ) {
- `ditto VolumeIcon.icns "/Volumes/$pkgname/.VolumeIcon.icns"`;
- }
- # make symlink to /Applications
- `ln -s /Applications "/Volumes/$pkgname/Applications"`;
-
- `mkdir "/Volumes/$pkgname/background"`;
- `ditto ../media/osx/background "/Volumes/$pkgname/background/"`;
- `xcrun SetFile -a V "/Volumes/$pkgname/background"`;
- `xcrun SetFile -a C "/Volumes/$pkgname/"`;
- `cp VolumeDSStoreApp "/Volumes/$pkgname/.DS_Store"`;
- `diskutil unmountDisk $dev_handle`;
- `hdiutil detach $dev_handle`;
- `hdiutil convert "$volname.dmg" -format UDZO -imagekey zlib-level=9 -o "$volname.udzo.dmg"`;
- `rm -f "$volname.dmg"`;
- `mv "$volname.udzo.dmg" "$volname.dmg"`;
- `hdiutil internet-enable -yes "$volname.dmg"`;
-}
-
-if (! defined $ARGV[0]) {
- die("Please specify the mpkg to make a DMG of as the first argument\n".
- "or -c to create a package and use it.\n");
-}
-
-if ( $ARGV[0] eq "-c" ) {
- die("TODO: -c\n");
- #make_dmg(make_mpkg(), "Kodi Atlantis - 8.10", "Kodi Media Center");
- exit;
-}
-
-make_dmg($ARGV[0], $ARGV[1], "Kodi");
diff --git a/tools/darwin/packaging/osx/dmgmaker.sh b/tools/darwin/packaging/osx/dmgmaker.sh
new file mode 100755
index 0000000000..9a5dc2757e
--- /dev/null
+++ b/tools/darwin/packaging/osx/dmgmaker.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+
+# Copyright (C) 2022 Team Kodi
+# This file is part of Kodi - https://kodi.tv
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+# See LICENSES/README.md for more information.
+
+appPath="$1"
+appName="$2"
+dmgPath="$3"
+
+if [[ ! -d "$appPath" ]]; then
+ echo "app not found at $appPath"
+ exit 1
+fi
+
+tempDir=$(mktemp -d -t "$appName")
+
+# prepare DMG contents
+ditto "$appPath" "$tempDir/$appName.app"
+ditto VolumeIcon.icns "$tempDir/.VolumeIcon.icns"
+cp VolumeDSStoreApp "$tempDir/.DS_Store"
+ln -s /Applications "$tempDir/Applications"
+
+destBackgroundPath="$tempDir/background"
+ditto ../media/osx/background "$destBackgroundPath"
+xcrun SetFile -a V "$destBackgroundPath"
+
+# volume icon attribute must be set on the mounted DMG
+dmgFileTemp="$(mktemp -t "$appName").dmg"
+hdiutil create -fs HFS+ -format UDRW -volname "$appName" -srcfolder "$tempDir" "$dmgFileTemp"
+# deviceHandle is /dev/disk<number>
+deviceHandle=$(hdiutil attach -readwrite -noverify -noautoopen "$dmgFileTemp" \
+ | fgrep GUID_partition_scheme | awk -F '[[:space:]]' '{print $1}')
+xcrun SetFile -a C "/Volumes/$appName"
+
+# compress DMG
+diskutil eject "$deviceHandle"
+hdiutil convert "$dmgFileTemp" -format ULFO -o "$dmgPath"
+
+rm -rf "$dmgFileTemp" "$tempDir"
diff --git a/tools/darwin/packaging/osx/mkdmg-osx.sh.in b/tools/darwin/packaging/osx/mkdmg-osx.sh.in
index 5ef14e9b56..458a7b6ec3 100755
--- a/tools/darwin/packaging/osx/mkdmg-osx.sh.in
+++ b/tools/darwin/packaging/osx/mkdmg-osx.sh.in
@@ -60,8 +60,8 @@ echo Creating $PACKAGE package version $VERSION revision $REVISION
dmgPath="$DIRNAME/$ARCHIVE.dmg"
rm -rf "$dmgPath"
-if [ -e "/Volumes/@APP_NAME_LC@" ]; then
- umount /Volumes/@APP_NAME_LC@
+if [ -e "/Volumes/@APP_NAME@" ]; then
+ umount /Volumes/@APP_NAME@
fi
#generate volume iconset
@@ -71,7 +71,7 @@ then
iconutil -c icns --output "VolumeIcon.icns" "../media/osx/volumeIcon.iconset"
fi
-$DIRNAME/dmgmaker.pl $APP $ARCHIVE
+"$DIRNAME/dmgmaker.sh" "$APP" "@APP_NAME@" "$dmgPath"
echo "done"