#!/usr/bin/env bash # Shamelessly lifted from Banshee's build process pushd $(dirname $0) &>/dev/null DMG_APP=$1 RENDER_OP=$2 if [ -z "$DMG_APP" ]; then DMG_APP=MonoDevelop.app fi if test ! -e "$DMG_APP" ; then echo "Missing $DMG_APP" exit 1 fi NAME=`grep -A1 CFBundleDisplayName "$DMG_APP/Contents/Info.plist" | grep string | sed -e 's/.*//' -e 's,,,'` VERSION=`grep -A1 CFBundleVersion "$DMG_APP/Contents/Info.plist" | grep string | sed -e 's/.*//' -e 's,,,'` #if we use the version in the volume name, Finder can't find the background image #because the DS_Store depends on the volume name, and we aren't currently able #to alter it programmatically VOLUME_NAME="$NAME" echo "Building bundle for $NAME $VERSION..." DMG_FILE="$NAME-$VERSION.dmg" MOUNT_POINT="$VOLUME_NAME.mounted" rm -f "$DMG_FILE" rm -f "$DMG_FILE.master" echo "Populating image..." mkdir -p "$MOUNT_POINT/.background" # this used to be mv, but we need to preserve the bundle directory to do more checks on the contents # such as compatibility-check ditto "$DMG_APP" "$MOUNT_POINT/$DMG_APP" # This won't result in any deletions #find "$MOUNT_POINT" -type d -iregex '.*\.svn$' &>/dev/null | xargs rm -rf pushd "$MOUNT_POINT" &>/dev/null ln -s /Applications Applications popd &>/dev/null mkdir -p "$MOUNT_POINT/.background" if [ "$RENDER_OP" == "norender" ]; then cp dmg-bg.png "$MOUNT_POINT/.background/dmg-bg.png" else DYLD_FALLBACK_LIBRARY_PATH="/Library/Frameworks/Mono.framework/Versions/Current/lib:/lib:/usr/lib" mono render.exe "$NAME $VERSION" mv dmg-bg-with-version.png "$MOUNT_POINT/.background/dmg-bg.png" fi cp DS_Store "$MOUNT_POINT/.DS_Store" if [ -e VolumeIcon.icns ] ; then cp VolumeIcon.icns "$MOUNT_POINT/.VolumeIcon.icns" SetFile -c icnC "$MOUNT_POINT/.VolumeIcon.icns" fi SetFile -a C "$MOUNT_POINT" # Compute an approximated image size in MB, and bloat by double # codesign adds a unknown amount of extra size requirements and there are some # files where the additional size required is even more "unknown". doubling # is a brute force approach, but doesn't really impact final distribution size # because the empty space is compressed to nothing. image_size=$(du -ck "$DMG_APP" | tail -n1 | cut -f1) image_size=$((($image_size *2) / 1000)) echo "Creating disk image (${image_size}MB)..." hdiutil create -srcfolder "$MOUNT_POINT" -megabytes $image_size -ov "$DMG_FILE" -volname "$VOLUME_NAME" -fs HFS+ -format UDBZ || exit $? echo "Built disk image $DMG_FILE" rm -rf "$MOUNT_POINT" echo "Done." popd &>/dev/null