File:  [Local Repository] / imach / distributions / osx / create-dmg
Revision 1.1: download - view: text, annotated - select for diffs
Tue Aug 18 16:42:35 2015 UTC (8 years, 10 months ago) by brouard
Branches: MAIN
CVS tags: HEAD
*** empty log message ***

    1: #! /bin/bash
    2: 
    3: # Create a read-only disk image of the contents of a folder
    4: #
    5: # Usage: make-diskimage <image_file>
    6: #                       <src_folder>
    7: #                       <volume_name>
    8: #                       <applescript>
    9: #                       <artpath>
   10: #                       <eula_resource_file>
   11: set -x
   12: set -e;
   13: 
   14: function pure_version() {
   15:   echo '1.0.0.2'
   16: }
   17: 
   18: function version() {
   19:   echo "create-dmg $(pure_version)"
   20: }
   21: 
   22: function usage() {
   23:   version
   24:   echo "Creates a fancy DMG file."
   25:   echo "Usage:  $(basename $0) options... image.dmg source_folder"
   26:   echo "All contents of source_folder will be copied into the disk image."
   27:   echo "Options:"
   28:   echo "  --volname name"
   29:   echo "      set volume name (displayed in the Finder sidebar and window title)"
   30:   echo "  --background pic.png"
   31:   echo "      set folder background image (provide png, gif, jpg)"
   32:   echo "  --window-pos x y"
   33:   echo "      set position the folder window"
   34:   echo "  --window-size width height"
   35:   echo "      set size of the folder window"
   36:   echo "  --icon-size icon_size"
   37:   echo "      set window icons size (up to 128)"
   38:   echo "  --icon file_name x y"
   39:   echo "      set position of the file's icon"
   40:   echo "  --custom-icon file_name custom_icon_or_sample_file x y"
   41:   echo "      set position and custom icon"
   42:   echo "  --version         show tool version number"
   43:   echo "  -h, --help        display this help"
   44:   exit 0
   45: }
   46: 
   47: WINX=10
   48: WINY=60
   49: WINW=600
   50: WINH=400
   51: ICON_SIZE=128
   52: 
   53: while test "${1:0:1}" = "-"; do
   54:   case $1 in
   55:     --volname)
   56:       VOLUME_NAME="$2"
   57:       shift; shift;;
   58:     --background)
   59:       BACKGROUND_FILE="$2"
   60:       BACKGROUND_FILE_NAME="$(basename $BACKGROUND_FILE)"
   61:       BACKGROUND_CLAUSE="set background picture of opts to file \".background:$BACKGROUND_FILE_NAME\""
   62:       shift; shift;;
   63:     --icon-size)
   64:       ICON_SIZE="$2"
   65:       shift; shift;;
   66:     --window-pos)
   67:       WINX=$2; WINY=$3
   68:       shift; shift; shift;;
   69:     --window-size)
   70:       WINW=$2; WINH=$3
   71:       shift; shift; shift;;
   72:     --icon)
   73:       POSITION_CLAUSE="${POSITION_CLAUSE}set position of item \"$2\" to {$3, $4}
   74: "
   75:       shift; shift; shift; shift;;
   76:     --custom-icon)
   77:       shift; shift; shift; shift; shift;;
   78:     -h | --help)
   79:       usage;;
   80:     --version)
   81:       version; exit 0;;
   82:     --pure-version)
   83:       pure_version; exit 0;;
   84:     -*)
   85:       echo "Unknown option $1. Run with --help for help."
   86:       exit 1;;
   87:   esac
   88: done
   89: 
   90: test -z "$2" && {
   91:   echo "Not enough arguments. Invoke with --help for help."
   92:   exit 1
   93: }
   94: 
   95: DMG_PATH="$1"
   96: DMG_DIRNAME="$(dirname "$DMG_PATH")"
   97: DMG_DIR="$(cd $DMG_DIRNAME > /dev/null; pwd)"
   98: DMG_NAME="$(basename "$DMG_PATH")"
   99: DMG_TEMP_NAME="$DMG_DIR/rw.${DMG_NAME}"
  100: SRC_FOLDER="$(cd "$2" > /dev/null; pwd)"
  101: test -z "$VOLUME_NAME" && VOLUME_NAME="$(basename "$DMG_PATH" .dmg)"
  102: 
  103: AUX_PATH="$(cd "$(dirname $0)"; pwd)/support"
  104: 
  105: test -d "$AUX_PATH" || {
  106:   echo "Cannot find support directory: $AUX_PATH"
  107:   exit 1
  108: }
  109: 
  110: # Create the image
  111: echo "Creating disk image..."
  112: test -f "${DMG_TEMP_NAME}" && rm -f "${DMG_TEMP_NAME}"
  113: hdiutil create -srcfolder "$SRC_FOLDER" -volname "${VOLUME_NAME}" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size 300m "${DMG_TEMP_NAME}"
  114: 
  115: # mount it
  116: echo "Mounting disk image..."
  117: MOUNT_DIR="/Volumes/${VOLUME_NAME}"
  118: echo "Mount directory: $MOUNT_DIR"
  119: DEV_NAME=$(hdiutil attach -readwrite -noverify -noautoopen "${DMG_TEMP_NAME}" | egrep '^/dev/' | sed 1q | awk '{print $1}')
  120: echo "Device name:     $DEV_NAME"
  121: 
  122: #cp RightDS_Store "/Volumes/${VOLUME_NAME}/.DS_Store"
  123: 
  124: if ! test -z "$BACKGROUND_FILE"; then
  125:   echo "Copying background file..."
  126:   test -d "$MOUNT_DIR/.background" || mkdir "$MOUNT_DIR/.background"
  127:   cp "$BACKGROUND_FILE" "$MOUNT_DIR/.background/$BACKGROUND_FILE_NAME"
  128: fi
  129: 
  130: # run applescript
  131: APPLESCRIPT=$(mktemp -t createdmg.XXXXXXX)
  132: echo APPLESCRIPT1=$APPLESCRIPT
  133: cat "$AUX_PATH/template.applescript" | sed -e "s/WINX/$WINX/g" -e "s/WINY/$WINY/g" -e "s/WINW/$WINW/g" -e "s/WINH/$WINH/g" -e "s/BACKGROUND_CLAUSE/$BACKGROUND_CLAUSE/g" -e "s/ICON_SIZE/$ICON_SIZE/g" | perl -pe  "s/POSITION_CLAUSE/$POSITION_CLAUSE/g" >"$APPLESCRIPT"
  134: echo APPLESCRIPT=$APPLESCRIPT
  135: 
  136: # echo "Running Applescript: ./AdiumApplescriptRunner \"${APPLESCRIPT}\" process_disk_image \"${VOLUME_NAME}\""
  137: # "$AUX_PATH/AdiumApplescriptRunner" "${APPLESCRIPT}" process_disk_image "${VOLUME_NAME}" || true
  138: #echo "Done running the applescript..."
  139: #sleep 4
  140: 
  141: # make sure it's not world writeable
  142: echo "Fixing permissions..."
  143: chmod -Rf go-w "${MOUNT_DIR}" || true
  144: echo "Done fixing permissions."
  145: 
  146: # make the top window open itself on mount:
  147: if [ -x /usr/local/bin/openUp ]; then
  148:     echo "Applying openUp..."
  149:     /usr/local/bin/openUp "${MOUNT_DIR}"
  150: fi
  151: 
  152: # unmount
  153: echo "Unmounting disk image..."
  154: hdiutil detach "${DEV_NAME}"
  155: 
  156: # compress image
  157: echo "Compressing disk image..."
  158: hdiutil convert "${DMG_TEMP_NAME}" -format UDZO -imagekey zlib-level=9 -o "${DMG_DIR}/${DMG_NAME}"
  159: rm -f "${DMG_TEMP_NAME}"
  160: 
  161: # adding EULA resources
  162: if [ ! -z "${EULA_RSRC}" -a "${EULA_RSRC}" != "-null-" ]; then
  163:         echo "adding EULA resources"
  164:         hdiutil unflatten "${DMG_DIR}/${DMG_NAME}"
  165:         /Developer/Tools/ResMerger -a "${EULA_RSRC}" -o "${DMG_DIR}/${DMG_NAME}"
  166:         hdiutil flatten "${DMG_DIR}/${DMG_NAME}"
  167: fi
  168: 
  169: echo "Disk image done"
  170: exit 0

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