Annotation of imach/distributions/osx/createdmg4.sh, revision 1.3
1.1 brouard 1: #!/bin/bash
2: set -x
3: LANG=C # Otherwise du gives french comma and can't sum!
4: # borrowed to Andy Maloney
5: # http://asmaloney.com/2013/07/howto/packaging-a-mac-os-x-application-using-a-dmg/
6:
7: # make sure we are in the correct dir when we double-click a .command file
8: dir=${0%/*}
9: if [ -d "$dir" ]; then
10: cd "$dir"
11: fi
12:
13: # set up your app name, version number, and background image file name
14: #APP_NAME="imach"
15: APP_NAME=$4
16: VERSION=$5
17: #"0.98nT"
18: DMG_BACKGROUND_IMG="Background.png"
19:
20: # you should not need to change these
21: #APP_EXE="/Users/nbrouard/Documents/imachcvs/NetBeans/imach/src
22: #APP_EXE="${APP_NAME}.app/Contents/MacOS/${APP_NAME}"
23: #APP_EXE="${APP_NAME}.app/Contents/MacOS/applet"
24: APP_EXE="${APP_NAME}.app/Contents/Resources/bin/imach"
25:
26: #VOL_NAME="${APP_NAME} ${VERSION}" # volume name will be "SuperCoolApp 1.0.0"
27: VOL_NAME=$2 # volume name will be "SuperCoolApp 1.0.0"
28: #DMG_FINAL="${VOL_NAME}.dmg" # final DMG name will be "SuperCoolApp 1.0.0.dmg"
29: DMG_FINAL=$3 # final DMG name will be "SuperCoolApp 1.0.0.dmg"
30: DMG_TMP="${VOL_NAME}-temp.dmg"
31: STAGING_DIR="./Install" # we copy all our stuff into this dir
32:
33: # Check the background image DPI and convert it if it isn't 72x72
34: _BACKGROUND_IMAGE_DPI_H=`sips -g dpiHeight ${DMG_BACKGROUND_IMG} | grep -Eo '[0-9]+\.[0-9]+'`
35: _BACKGROUND_IMAGE_DPI_W=`sips -g dpiWidth ${DMG_BACKGROUND_IMG} | grep -Eo '[0-9]+\.[0-9]+'`
36:
37: if [ $(echo " $_BACKGROUND_IMAGE_DPI_H != 72.0 " | bc) -eq 1 -o $(echo " $_BACKGROUND_IMAGE_DPI_W != 72.0 " | bc) -eq 1 ]; then
38: echo "WARNING: The background image's DPI is not 72. This will result in distorted backgrounds on Mac OS X 10.7+."
39: echo " I will convert it to 72 DPI for you."
40:
41: _DMG_BACKGROUND_TMP="${DMG_BACKGROUND_IMG%.*}"_dpifix."${DMG_BACKGROUND_IMG##*.}"
42:
43: sips -s dpiWidth 72 -s dpiHeight 72 ${DMG_BACKGROUND_IMG} --out ${_DMG_BACKGROUND_TMP}
44:
45: DMG_BACKGROUND_IMG="${_DMG_BACKGROUND_TMP}"
46: fi
47:
48: # clear out any old data
49: rm -rf "${STAGING_DIR}" "${DMG_TMP}" "${DMG_FINAL}"
50:
51: # copy over the stuff we want in the final disk image to our staging dir
52: mkdir -p "${STAGING_DIR}"
53: cp -rpf "${APP_NAME}.app" "${STAGING_DIR}"
54: # ... cp anything else you want in the DMG - documentation, etc.
55:
56: pushd "${STAGING_DIR}"
57:
58: # strip the executable
59: echo "Stripping ${APP_EXE}..."
60: strip -u -r "${APP_EXE}"
61:
62: # compress the executable if we have upx in PATH
63: # UPX: http://upx.sourceforge.net/
64: if hash upx 2>/dev/null; then
65: echo "Compressing (UPX) ${APP_EXE}..."
66: upx -9 "${APP_EXE}"
67: fi
68:
69: # ... perform any other stripping/compressing of libs and executables
70:
71: popd
72:
73: # figure out how big our DMG needs to be
74: # assumes our contents are at least 1M!
75: SIZE=`du -sh "${STAGING_DIR}" | sed 's/\([0-9\.]*\)M\(.*\)/\1/'`
76: #SIZE=`du -sm "${STAGING_DIR}" | sed 's/\([0-9\.]*\)m\(.*\)/\1/'`
77: SIZE=`echo "${SIZE} + 1.0" | bc | awk '{print int($1+0.5)}'`
78: #SIZE=1
79:
80: if [ $? -ne 0 ]; then
81: echo "Error: Cannot compute size of staging dir"
82: exit
83: fi
84:
85: # create the temp DMG file
86: hdiutil create -srcfolder "${STAGING_DIR}" -volname "${VOL_NAME}" -fs HFS+ \
87: -format UDRW -size ${SIZE}M "${DMG_TMP}"
88: # -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${SIZE}M "${DMG_TMP}"
89:
90: echo "Created DMG: ${DMG_TMP}"
91:
92: # mount it and save the device
93: # works and I verified that it keeps the hml subdirectory.
94: DEVICE=$(hdiutil attach -readwrite -noverify "${DMG_TMP}" | \
95: egrep '^/dev/' | sed 1q | awk '{print $1}')
96:
97: sleep 2
98:
99: # add a link to the Applications dir
100: echo "Add link to /Applications"
101: pushd /Volumes/"${VOL_NAME}"
102: ln -s /Applications
103: popd
104:
105: # add a background image
106: mkdir /Volumes/"${VOL_NAME}"/.background
107: cp "${DMG_BACKGROUND_IMG}" /Volumes/"${VOL_NAME}"/.background/
108:
109: cp ../../src/README.txt /Volumes/"${VOL_NAME}"/
110: #cp ../../src/LICENSE.txt /Volumes/"${VOL_NAME}"/
111: # tell the Finder to resize the window, set the background,
112: # change the icon size, place the icons in the right position, etc.
113: echo '
114: tell application "Finder"
115: tell disk "'${VOL_NAME}'"
116: open
117: set current view of container window to icon view
118: set toolbar visible of container window to false
119: set statusbar visible of container window to false
120: set the bounds of container window to {400, 100, 920, 440}
121: set viewOptions to the icon view options of container window
122: set arrangement of viewOptions to not arranged
123: set icon size of viewOptions to 72
124: set background picture of viewOptions to file ".background:'${DMG_BACKGROUND_IMG}'"
125: set position of item "'${APP_NAME}'.app" of container window to {160, 205}
126: set position of item "Applications" of container window to {360, 205}
1.2 brouard 127: set position of item "README.txt" of container window to {360, 60}
1.1 brouard 128: close
129: open
130: update without registering applications
131: delay 2
132: end tell
133: end tell
134: ' | osascript
135:
136: sync
137:
138: # unmount it
139: hdiutil detach "${DEVICE}"
140:
141: # now make the final image a compressed disk image
142: echo "Creating compressed image"
143: hdiutil convert "${DMG_TMP}" -format UDZO -imagekey zlib-level=9 -o "${DMG_FINAL}"
144:
145: # clean up
146: pwd
147: sleep 2
1.3 ! brouard 148: ##rm -rf "${DMG_TMP}"
! 149: ##rm -rf "${STAGING_DIR}"
1.1 brouard 150:
151: echo 'Done.'
152:
153: exit
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>