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>