File:  [Local Repository] / imach / distributions / osx / createdmg4.sh
Revision 1.3: download - view: text, annotated - select for diffs
Sun Sep 11 07:59:43 2022 UTC (21 months, 3 weeks ago) by brouard
Branches: MAIN
CVS tags: HEAD
Summary: Version 0.99r38

    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}
  127: 	   set position of item "README.txt" of container window to {360, 60}
  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
  148: ##rm -rf "${DMG_TMP}"
  149: ##rm -rf "${STAGING_DIR}"
  150: 
  151: echo 'Done.'
  152: 
  153: exit

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>