5 # Create a MacOSX dmg (disk image) for a given directory.
17 # ****************************** usage ********************************
21 make-osxdmg.sh <dmgname> [dirname] [volumename]
26 # ****************************** validate cmdline args ****************
28 function defaultArgs() {
29 if test "x${BIN_DIR}" = "x"; then
32 if test "x${VOLUME_NAME}" = "x"; then
33 VOLUME_NAME="$DMG_NAME"
37 function validateArgs() {
38 if test "x$DMG_NAME" = "x"; then
45 # ****************************** sizing *******************************
48 SIZE_KB=`du -sk ${BIN_DIR} | awk '{print $1}'`
49 SIZE_KB=`expr $SIZE_KB + ${EXTRA_SIZE}`
53 # ****************************** setup disk ***************************
55 function setupDisk() {
58 if test -e "${DST_IMG}"; then
59 echo " deleting old dmg ..."
62 hdiutil create -size ${SIZE_KB}k ${DST_IMG} -layout NONE
64 DISK=`hdid -nomount ${DST_IMG} | awk '{print $1}'`
65 echo " disk (no mount): $DISK"
67 newfs_hfs -v "${VOLUME_NAME}" "${DISK}"
70 DISK=`hdid ${DST_IMG} | awk '{print $1}'`
74 function ejectDisk() {
75 hdiutil eject "${DISK}"
78 function convertToReadOnlyCompressedImage() {
81 # convert .dmg into read-only zlib (-9) compressed release version
82 hdiutil convert -format UDZO ${SRC_DMG} -o ${DST_DMG} -imagekey zlib-level=9
85 function internetEnableDiskImage() {
86 # internet-enable the release .dmg. for details see
87 # http://developer.apple.com/ue/files/iedi.html
88 hdiutil internet-enable -yes "$1"
92 # ****************************** running ******************************
97 echo "Building MacOSX DMG ${DMG_NAME}.dmg for $BIN_DIR .."
100 echo " size: ${SIZE_KB}K"
102 setupDisk "${DMG_NAME}.dmg"
104 echo -n " coping content to disk .."
106 gnutar cf - . | ( cd "/Volumes/${VOLUME_NAME}" ; gnutar xf - )
110 # once again eject, to synchronize
113 REL_DMG="${DMG_NAME}-release.dmg"
114 convertToReadOnlyCompressedImage "${DMG_NAME}.dmg" "${REL_DMG}"
115 internetEnableDiskImage "${REL_DMG}"