| Index: tools/mac_build_editor_dmg.sh
|
| diff --git a/tools/mac_build_editor_dmg.sh b/tools/mac_build_editor_dmg.sh
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..2da8c0fec139963b3e1ffd4b0cdab72fd0332b58
|
| --- /dev/null
|
| +++ b/tools/mac_build_editor_dmg.sh
|
| @@ -0,0 +1,102 @@
|
| +#!/bin/bash
|
| +# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| +# for details. All rights reserved. Use of this source code is governed by
|
| +# BSD-style license that can be found in the LICENSE file.
|
| +
|
| +# This is partly based on
|
| +# https://bitbucket.org/rmacnak/nsvm/src/
|
| +# b2de52432a2baff9c4ada099430fb16a771d34ef/vm/onebuild/installer-Darwin.gmk
|
| +
|
| +# Fail if a command failed
|
| +set -e
|
| +
|
| +if [ $# -ne 4 ]; then
|
| + echo "Usage $0 <output.dmg> <app-folder> <icon.icns> <volume-name>"
|
| + exit 1
|
| +fi
|
| +
|
| +OUTPUT_DMG_FILE=$1
|
| +INPUT_APP_FOLDER_PATH=$2
|
| +INPUT_ICON=$3
|
| +INPUT_VOLUME_NAME=$4
|
| +
|
| +APP_FOLDER_NAME=$(basename "$INPUT_APP_FOLDER_PATH")
|
| +VOLUME_MOUNTPOINT="/Volumes/$INPUT_VOLUME_NAME"
|
| +SPARSEIMAGE="$OUTPUT_DMG_FILE.sparseimage"
|
| +
|
| +# Input validations
|
| +if [ "${INPUT_APP_FOLDER_PATH##*.}" != "app" ]; then
|
| + echo "Application folder has to end in '.app' " \
|
| + "(but was $INPUT_APP_FOLDER_PATH)."
|
| + exit 1
|
| +fi
|
| +if [ "${INPUT_ICON##*.}" != "icns" ]; then
|
| + echo "Volume icon has to end in '.icns'."
|
| + exit 1
|
| +fi
|
| +
|
| +# If an old image is still mounted, umount it
|
| +if [ -e "$VOLUME_MOUNTPOINT" ]; then
|
| + hdiutil eject "$VOLUME_MOUNTPOINT"
|
| +fi
|
| +
|
| +# Remove old output files
|
| +if [ -f "$SPARSEIMAGE" ]; then
|
| + rm "$SPARSEIMAGE"
|
| +fi
|
| +if [ -f "$OUTPUT_DMG_FILE" ]; then
|
| + rm "$OUTPUT_DMG_FILE"
|
| +fi
|
| +
|
| +# Create a new image and attach it
|
| +hdiutil create -size 300m -type SPARSE -volname "$INPUT_VOLUME_NAME" -fs \
|
| + 'Journaled HFS+' "$SPARSEIMAGE"
|
| +hdiutil attach "$SPARSEIMAGE"
|
| +
|
| +# Add link to /Applications (so the user can drag-and-drop into it)
|
| +ln -s /Applications "$VOLUME_MOUNTPOINT/"
|
| +# Copy our application
|
| +ditto "$INPUT_APP_FOLDER_PATH" "$VOLUME_MOUNTPOINT/$APP_FOLDER_NAME"
|
| +# Make sure that the folder gets opened when mounting the image
|
| +bless --folder "$VOLUME_MOUNTPOINT" --openfolder "$VOLUME_MOUNTPOINT"
|
| +# Copy the volume icon
|
| +cp "$INPUT_ICON" "$VOLUME_MOUNTPOINT/.VolumeIcon.icns"
|
| +
|
| +# Set the 'custom-icon' attribute on the volume
|
| +SetFile -a C "$VOLUME_MOUNTPOINT"
|
| +
|
| +# Use an applescript to setup the layout of the folder.
|
| +osascript << EOF
|
| +tell application "Finder"
|
| + tell disk "$INPUT_VOLUME_NAME"
|
| + open
|
| + tell container window
|
| + set current view to icon view
|
| + set toolbar visible to false
|
| + set statusbar visible to false
|
| + set position to {100, 100}
|
| + set bounds to {100, 100, 512, 256}
|
| + end tell
|
| + tell icon view options of container window
|
| + set arrangement to not arranged
|
| + set icon size to 128
|
| + end tell
|
| + set position of item "$APP_FOLDER_NAME" to {64, 64}
|
| + set position of item "Applications" to {320, 64}
|
| + eject
|
| + end tell
|
| +end tell
|
| +EOF
|
| +
|
| +# Wait until the script above has umounted the image
|
| +while [ -e "$VOLUME_MOUNTPOINT" ]; do
|
| + echo "Waiting for Finder to eject $VOLUME_MOUNTPOINT"
|
| + sleep 2
|
| +done
|
| +
|
| +# Compress the sparse image
|
| +hdiutil convert "$SPARSEIMAGE" -format UDBZ -o "$OUTPUT_DMG_FILE"
|
| +
|
| +# Remove sparse image
|
| +rm "$SPARSEIMAGE"
|
| +
|
|
|