OSCAR-code/Building/MacOS/create_dmg

121 lines
3.9 KiB
Plaintext
Raw Normal View History

#!/bin/bash
# Usage: create_dmg target_name file1 [file2...]
STAGING_DIR="./Staging"
# Extract the target name
TARGET="$1"
shift
# Look for the .app in the files to be added to the .dmg
APP=""
BACKGROUND_IMG=""
for src in "$@"
do
[[ "$src" == *.app ]] && APP="$src"
[[ "$src" == *background.png ]] && BACKGROUND_IMG="$src"
done
if [[ ${APP} != "" ]]; then
if [[ -z "$QT_BIN" ]]; then
echo "Error: QT_BIN must be defined"
exit 1
fi
# Get the version from the application bundle.
VERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleGetInfoString" ${APP}/Contents/Info.plist`
echo ${APP} is version ${VERSION}
# If it's a prerelease version, include the git revision.
if [[ ${VERSION} == *-* ]]; then
GIT_REVISION=`/usr/libexec/PlistBuddy -c "Print GitRevision" ${APP}/Contents/Info.plist 2>/dev/null`
if [[ ${GIT_REVISION} != "" ]]; then
VERSION=${VERSION}-${GIT_REVISION}
fi
# TODO: possibly add -no-strip to macdeployqt for prerelease versions
fi
# Create a deployable application bundle (if it hasn't been already been done).
# Edit: do it every time so that the application gets stripped, just suppress the spurious warnings.
#if [[ ! -d "${APP}/Contents/Frameworks/QtCore.framework" ]]; then
echo "${QT_BIN}"/macdeployqt "${APP}"
"${QT_BIN}"/macdeployqt "${APP}" 2>/dev/null || exit
#fi
fi
mkdir "${STAGING_DIR}" || exit
for src in "$@"
do
echo "Copying ${src}"
cp -a "$src" "${STAGING_DIR}/."
done
VOL_NAME="${TARGET} ${VERSION} Installer"
echo "Creating .dmg"
if [[ ${BACKGROUND_IMG} == "" ]]; then
hdiutil create -srcfolder "${STAGING_DIR}" -volname "${VOL_NAME}" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDZO -imagekey zlib-level=9 -o "${TARGET}-${VERSION}.dmg" -ov
else
# Arrange the files needed for a custom Finder display.
pushd "${STAGING_DIR}" > /dev/null
# Add a link to /Applications
echo "Add link to /Applications"
ln -s /Applications
# Add a hidden .background folder and move the png to it
echo "Move background.png into position"
mkdir .background
mv background.png .background/background.png
popd > /dev/null
# Create a temporary image then mount it so we can tell Finder how to display it.
TARGET_TMP="${TARGET}-${VERSION}-tmp.dmg"
hdiutil create -srcfolder "${STAGING_DIR}" -volname "${VOL_NAME}" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW "${TARGET_TMP}" -ov
DEVICE=$(hdiutil attach "${TARGET_TMP}" | egrep '^/dev/' | sed 1q | awk '{print $1}')
sleep 2
# tell Finder to resize the window, set the background,
# change the icon size, place the icons in the right position, etc.
echo '
tell application "Finder"
tell disk "'${VOL_NAME}'"
open
set current view of container window to icon view
set toolbar visible of container window to false
set statusbar visible of container window to false
set the bounds of container window to {400, 100, 1040, 610}
set viewOptions to the icon view options of container window
set arrangement of viewOptions to not arranged
set icon size of viewOptions to 72
set background picture of viewOptions to file ".background:background.png"
set position of item "'${APP}'" of container window to {210, 350}
set position of item "Applications" of container window to {430, 350}
set position of item "README.rtfd" of container window to {210, 220}
close
open
update without registering applications
delay 2
end tell
end tell
' | osascript
sync
# unmount it
hdiutil detach "${DEVICE}"
# now make the final image for distribution
echo "Creating compressed image"
hdiutil convert "${TARGET_TMP}" -format UDZO -imagekey zlib-level=9 -o "${TARGET}-${VERSION}.dmg" -ov
rm -rf "${TARGET_TMP}"
fi
rm -rf "${STAGING_DIR}"