5 # script for pulling together a MacOSX app bundle.
7 GTKSTACK_ROOT=$HOME/gtk/inst
8 ARDOURSTACK_ROOT=$HOME/a3/inst
11 # where harvid and xjadeo binaries are cached
12 if test -z "$CACHEDIR" -o ! -d "$CACHEDIR"; then
27 while [ $# -gt 0 ] ; do
32 # top level build targets
39 PRODUCT_PKG_DIR=ArdourSAE ;
49 PRODUCT_PKG_DIR=Mixbus;
55 PRODUCT_PKG_DIR=Ardour;
62 PRODUCT_PKG_DIR=Ardour ;
64 --test) SAE= ; WITH_LADSPA=; STRIP= ; shift ;;
67 # specific build flags
70 --noharvid) WITH_HARVID= ; shift ;;
71 --noladspa) WITH_LADSPA= ; shift ;;
72 --nostrip) STRIP= ; shift ;;
73 --sysdeps) PRINT_SYSDEPS=1; shift ;;
74 --nls) WITH_NLS=1 ; shift ;;
78 if test -z "$PRODUCT_PKG_DIR" -o -z "$APPNAME"; then
79 echo "application or product-name was not specified"
83 . ../define_versions.sh
84 echo "Version is $release_version"
85 if [ "x$commit" != "x" ] ; then
86 info_string="$release_version ($commit) built on `hostname` by `whoami` on `date`"
88 info_string="$release_version built on `hostname` by `whoami` on `date`"
90 echo "Info string is $info_string"
92 if [ x$DEBUG = xT ]; then
94 echo "Debug build, strip disabled"
96 if test x$STRIP != x ; then
97 echo "No debug build, strip enabled"
99 echo "No debug build, but strip disabled."
103 # setup directory structure
105 APPDIR=${APPNAME}${major_version}.app
106 APPROOT=$APPDIR/Contents
107 Frameworks=$APPROOT/lib
108 Resources=$APPROOT/Resources
110 # Since this is OS X, don't try to distinguish between etc and shared
111 # (machine dependent and independent data) - just put everything
116 Locale=$Resources/locale
118 # Bundled Plugins live in a top level folder
120 Plugins=$APPROOT/Plugins
121 Surfaces=$Frameworks/surfaces
122 Panners=$Frameworks/panners
123 Backends=$Frameworks/backends
124 MidiMaps=$Shared/midi_maps
125 ExportFormats=$Shared/export
126 Templates=$Shared/templates
127 PatchFiles=$Shared/patchfiles
128 MackieControl=$Shared/mcp
130 if [ x$PRINT_SYSDEPS != x ] ; then
132 # print system dependencies
135 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Plugins/*.so ; do
136 if ! file $file | grep -qs Mach-O ; then
139 otool -L $file | awk '{print $1}' | egrep -v "(^@executable_path|^Ardour[0-9][.0-9]*.app)"
144 echo "Removing old $APPDIR tree ..."
148 echo "Building new app directory structure ..."
150 # only bother to make the longest paths
152 mkdir -p $APPROOT/MacOS
153 mkdir -p $APPROOT/Resources
159 mkdir -p $ExportFormats
161 mkdir -p $Frameworks/modules
163 mkdir -p $MackieControl
166 # maybe set variables
168 if test x$SAE != x ; then
169 appname="Ardour${major_version}-SAE"
170 EXECUTABLE=${appname}
171 env="$env<key>ARDOUR_SAE</key><string>true</string>"
173 # current default for SAE version is German keyboard layout without a keypad
175 env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>de-nokeypad</string>"
176 env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui_sae.conf</string>"
177 elif test x$MIXBUS != x ; then
179 EXECUTABLE=${appname}${major_version}
180 env="$env<key>ARDOUR_MIXBUS</key><string>true</string>"
182 # current default for MIXBUS version is US keyboard layout without a keypad
184 env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>us-nokeypad</string>"
185 env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui.conf</string>"
187 appname="Ardour${major_version}"
188 EXECUTABLE=${appname}
192 # if we're not going to bundle JACK, make sure we can find
193 # jack in the places where it might be
196 env="$env<key>PATH</key><string>/usr/local/bin:/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>"
197 env="$env<key>DYLIB_FALLBACK_LIBRARY_PATH</key><string>/usr/local/lib:/opt/lib</string>"
199 env="<key>LSEnvironment</key><dict>$env<key>ARDOUR_BUNDLED</key><string>true</string></dict>"
203 sed -e "s?@ENV@?$env?g" \
204 -e "s?@VERSION@?$release_version?g" \
205 -e "s?@INFOSTRING@?$info_string?g" \
206 -e "s?@IDSUFFIX@?$EXECUTABLE?g" \
207 -e "s?@BUNDLENAME@?${APPNAME}${major_version}?g" \
208 -e "s?@EXECUTABLE@?$EXECUTABLE?g" < Info.plist.in > Info.plist
210 sed -e "s?@APPNAME@?$appname?" \
211 -e "s?@ENV@?$env?g" \
212 -e "s?@VERSION@?$release_version?g" \
213 -e "s?@INFOSTRING@?$info_string?g" < InfoPlist.strings.in > Resources/InfoPlist.strings || exit 1
217 cp Info.plist $APPROOT
218 cp -R Resources $APPROOT
222 rm -f Resources/InfoPlist.strings
225 # if we build a bundle without jack, then
226 # make the Ardour executable a helper
227 # script that checks to see if JACK is
231 cp startup_script $APPROOT/MacOS/$EXECUTABLE
232 chmod 775 $APPROOT/MacOS/$EXECUTABLE
233 MAIN_EXECUTABLE=Ardour.bin ## used in startup_script
235 echo "Copying ardour executable ...."
236 cp $BUILD_ROOT/gtk2_ardour/ardour-$release_version $APPROOT/MacOS/$MAIN_EXECUTABLE
237 if test x$SAE != x ; then
238 # cp $BUILD_ROOT/gtk2_ardour/evtest $APPROOT/MacOS/gtkevents
239 cp Ardour3-SAE.icns $Resources/appIcon.icns
240 elif test x$MIXBUS != x ; then
241 cp Mixbus.icns $Resources/appIcon.icns
243 cp Ardour.icns $Resources/appIcon.icns
245 cp typeArdour.icns $Resources/
247 set +e # things below are not error-free (optional files etc) :(
250 if test x$WITH_NLS != x ; then
251 echo "NLS support ..."
252 echo "I hope you remembered to run waf i18n"
255 for pkg in gtk2_ardour libs/ardour libs/gtkmm2ext ; do
256 files=`find ../../$pkg -name "*.mo"`
259 # the package name is appended with a number so that
260 # it can be parallel installed during a regular install
261 # with older (and newer) versions. it is just the major
262 # number of the release (i.e. leading digits)
265 vsuffix=`echo $release_version | sed 's/^\([0-9][0-9]*\).*/\1/'`
267 if [ -z "$files" ]; then
269 echo "!!!! WARNING !!!! - Did not find any .mo files in ../../$pkg"
276 lang=`basename $file | sed 's/\.mo//'`
277 mkdir -p $Locale/$lang/LC_MESSAGES
278 cp $file $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
279 echo copy $file to $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
280 if echo $LINGUAS | grep $lang >/dev/null 2>&1 ; then
283 LINGUAS="$LINGUAS $lang"
290 if [ -d $GTKSTACK_ROOT/share/locale/$l ] ; then
291 echo "Copying GTK i18n files for $l..."
292 cp -r $GTKSTACK_ROOT/share/locale/$l $Locale
294 # try with just the language spec
295 just_lang=`echo $l | sed 's/_[A-Z][A-Z]$//'`
296 if [ -d $GTKSTACK_ROOT/share/locale/$just_lang ] ; then
297 echo "Copying GTK i18n files for $l..."
298 cp -r $GTKSTACK_ROOT/share/locale/$just_lang $Locale
303 echo "Skipping NLS support"
307 # Copy stuff that may be dynamically loaded
310 cp -R $GTKSTACK_ROOT/etc/* $Etc
311 cp -R $GTKSTACK_ROOT/lib/charset.alias $Resources
313 # We rely on clearlooks, so include a version from our own build tree
314 # this one is special - we will set GTK_PATH to $Frameworks/gtkengines
316 GTK_ENGINE_DIR=$Frameworks/gtkengines/engines
317 mkdir -p $GTK_ENGINE_DIR
319 echo "Copying GTK engines ..."
320 cp $BUILD_ROOT/libs/clearlooks-newer/libclearlooks.dylib $Frameworks
321 (cd $GTK_ENGINE_DIR && ln -s ../../libclearlooks.dylib . && ln -s ../../libclearlooks.dylib libclearlooks.so)
323 cp $GTKSTACK_ROOT/lib/gtk-2.0/2.10.0/engines/libpixmap.so $Frameworks
324 (cd $GTK_ENGINE_DIR && ln -s ../../libpixmap.so)
327 if test x$WITH_LADSPA != x ; then
328 if test x$SAE != x ; then
330 elif test x$MIXBUS != x ; then
331 plugdir=mixbus_ladspa
335 if [ -d $plugdir -a "x$(ls $plugdir)" != x ] ; then
336 echo "Copying `ls $plugdir | wc -l` plugins ..."
337 cp -r $plugdir/* $Plugins
341 # Control Surface shared libraries
342 cp $BUILD_ROOT/libs/surfaces/*/libardour_*.dylib $Surfaces
343 cp $BUILD_ROOT/libs/surfaces/control_protocol/libardourcp*.dylib $Frameworks
346 cp $BUILD_ROOT/libs/panners/*/lib*.dylib $Panners
349 for backend in jack wavesaudio dummy coreaudio; do
350 cp $BUILD_ROOT/libs/backends/$backend/lib*.dylib $Backends
353 # Export Formats/Presets
354 for f in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do
355 cp "$f" $ExportFormats ;
358 # Session and Route templates
359 #for f in $BUILD_ROOT/../templates/* ; do
360 # if [ -d "$f" ] ; then
361 # cp -r "$f" $Templates ;
366 # got to be careful with names here
367 for x in $BUILD_ROOT/../midi_maps/*.map ; do
372 # got to be careful with names here
373 for x in $BUILD_ROOT/../patchfiles/*.midnam ; do
378 # got to be careful with names here
379 for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
380 cp "$x" $MackieControl
383 # VAMP plugins that we use
384 cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
386 # Suil modules (new dir 'build-stack')
387 if test -d $GTKSTACK_ROOT/lib/suil-0/ ; then
388 cp $GTKSTACK_ROOT/lib/suil-0/lib* $Frameworks
391 # Suil modules (old dir 'build-ardour-stack')
392 if test -d $ARDOURSTACK_ROOT/lib/suil-0/ ; then
393 cp $ARDOURSTACK_ROOT/lib/suil-0/lib* $Frameworks
396 # VST scanner app and wrapper script, if they exist
397 if test -d $BUILD_ROOT/libs/fst ; then
398 cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $Frameworks/
402 if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
403 mkdir -p $Frameworks/vfork
404 cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $Frameworks/
407 # TODO check if this is still needed, even when building on 10.5
408 if file $BUILD_ROOT/gtk2_ardour/ardour-$release_version | grep -q ppc; then
409 STDCPP='|libstdc\+\+'
416 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Panners/*.dylib $Backends/*.dylib $Surfaces/*.dylib $Plugins/*.so ; do
417 if ! file $file | grep -qs Mach-O ; then
420 # libffi contains "S" (other section symbols) that should not be stripped.
421 if [[ $file == *"libffi"* ]] ; then
425 if test x$STRIP != x ; then
426 strip -u -r -arch all $file &>/dev/null
429 deps=`otool -L $file | awk '{print $1}' | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | grep -v 'libjack\.' | grep -v "$(basename $file)"`
431 for dep in $deps ; do
433 if ! test -f $Frameworks/$base; then
434 if echo $dep | grep -sq '^libs' ; then
435 cp $BUILD_ROOT/$dep $Frameworks
443 if test x$missing = xfalse ; then
444 # everything has been found
450 echo "Copying other stuff to $APPDIR ..."
452 #cp $BUILD_ROOT/gtk2_ardour/ergonomic-us.bindings $Resources
454 cp $BUILD_ROOT/gtk2_ardour/mnemonic-us.bindings $Resources
455 cp $BUILD_ROOT/gtk2_ardour/ardour.menus $Resources
456 cp $BUILD_ROOT/gtk2_ardour/default_ui_config $Resources
457 cp $BUILD_ROOT/gtk2_ardour/clearlooks.rc $Resources
459 # Copied directly from source tree
461 cp ../../system_config $Resources/system_config
462 cp ../../instant.xml $Resources/instant.xml
463 cp ../../gtk2_ardour/step_editing.bindings $Resources
464 cp ../../gtk2_ardour/mixer.bindings $Resources
465 cp -r ../../gtk2_ardour/icons $Resources
466 cp -r ../../gtk2_ardour/pixmaps $Resources
467 cp ../../gtk2_ardour/dark.colors $Resources
468 cp -R ../../gtk2_ardour/splash.png $Shared
469 cp -R ../../gtk2_ardour/small-splash.png $Shared
470 cp -R ../../gtk2_ardour/ArdourMono.ttf $Shared
472 # go through and recursively remove any .svn dirs in the bundle
473 for svndir in `find $APPDIR -name .svn -type dir`; do
477 # install bundled LV2s to <app>/Contents/lib/LV2/
478 cp -R $BUILD_ROOT/libs/LV2 $Frameworks/
480 # lv2 core, classifications etc - TODO check if we need the complete LV2 ontology
481 if test -d $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
482 cp -R $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
483 elif test -d $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
484 cp -R $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
488 # now fix up the executables
489 echo "Fixing up executable dependency names ..."
490 executables=$MAIN_EXECUTABLE
491 if test x$SAE != x ; then
492 executables="$executables"
495 for exe in $executables; do
496 EXE=$APPROOT/MacOS/$exe
498 for lib in `otool -L $EXE | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
500 changes="$changes -change $lib @executable_path/../lib/$base"
502 if test "x$changes" != "x" ; then
503 install_name_tool $changes $EXE
507 echo "Fixing up library names ..."
508 # now do the same for all the libraries we include
509 for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners $Backends ; do
511 libbase=`basename $libdir`
513 for dylib in $libdir/*.dylib $libdir/*.so ; do
517 if test -L $dylib ; then
521 # change all the dependencies
524 for lib in `otool -L $dylib | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
526 if echo $lib | grep -s libbase; then
527 changes="$changes -change $lib @executable_path/../$libbase/$base"
529 changes="$changes -change $lib @executable_path/../lib/$base"
533 if test "x$changes" != x ; then
534 if install_name_tool $changes $dylib ; then
541 # now the change what the library thinks its own name is
543 base=`basename $dylib`
544 install_name_tool -id @executable_path/../$libbase/$base $dylib
549 # and now ... the DMG
552 rm -rf $PRODUCT_PKG_DIR
553 mkdir $PRODUCT_PKG_DIR
558 if [ x$SAE != x ] ; then
562 echo "Creating SAE packaging directory"
563 mv $APPDIR $PRODUCT_PKG_DIR/Ardour3-SAE.app
564 cp HowToInstallArdourSAE.pdf "$PRODUCT_PKG_DIR/How To Install Ardour SAE.pdf"
565 cp SAE-de-keypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts (keypad).pdf"
566 cp SAE-de-nokeypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts.pdf"
568 elif [ x$MIXBUS != x ] ; then
572 echo "Creating Mixbus packaging directory"
573 mv $APPDIR $PRODUCT_PKG_DIR/
574 DMGBACKGROUND=dmgbgMB
577 echo "Creating $APPNAME packaging directory"
578 mv $APPDIR $PRODUCT_PKG_DIR/
582 if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
585 elif file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q ppc; then
593 if test x$WITH_HARRISON_LV2 != x ; then
594 curl -s -S --fail -# \
595 -z "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
596 -o "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
597 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/harrison_lv2s.${OSX_BENSID}.zip"
599 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
600 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
601 "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip"
604 if test x$WITH_HARVID != x ; then
605 echo "installing video tools.."
606 HARVID_VERSION=$(curl -s -S http://ardour.org/files/video-tools/harvid_version.txt)
607 XJADEO_VERSION=$(curl -s -S http://ardour.org/files/video-tools/xjadeo_version.txt)
609 echo "copying harvid and xjadeo ..."
612 rsync://ardour.org/video-tools/harvid-osx-${HARVID_VERSION}.tgz \
613 "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz"
616 rsync://ardour.org/video-tools/jadeo-${XJADEO_VERSION:1}.dmg \
617 "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg"
620 -C $PRODUCT_PKG_DIR/$APPROOT \
621 -f "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz" || exit 1
623 JADEO=$(hdiutil attach "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg" | grep Apple_HFS | grep dev/ | cut -f 3)
624 cp -r "${JADEO}/Jadeo.app" "$PRODUCT_PKG_DIR/"
625 hdiutil detach "${JADEO}"
627 XJCONTENT=${PRODUCT_PKG_DIR}/Jadeo.app/Contents
628 HVLIBS=${PRODUCT_PKG_DIR}/$APPROOT/lib/harvid
630 for file in ${XJCONTENT}/MacOS/Jadeo-bin ${XJCONTENT}/Frameworks/*.dylib ${HVLIBS}/*.dylib ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/*harvid* ; do
631 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin && \
632 mv ${file}.thin ${file}
636 YPOS=$[ $DMGWINBOTTOM - 300 ]
637 XJADEOPOS="set position of item \"Jadeo.app\" of container window to {310, ${YPOS}}"
639 DMGBACKGROUND=${DMGBACKGROUND}xj
642 ################################################################################
643 ### Mixbus plugins, etc
644 if test x$WITH_X42_LV2 != x ; then
645 echo "bundling x42 plugins"
646 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
648 METERS_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-meters.latest.txt)
649 rsync -a -q --partial \
650 rsync://x42-plugins.com/x42/osx/x42-meters-lv2-osx-${METERS_VERSION}.zip \
651 "$CACHEDIR/x42-meters-lv2-osx-${METERS_VERSION}.zip"
652 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
653 "$CACHEDIR/x42-meters-lv2-osx-${METERS_VERSION}.zip"
655 SETBFREE_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/setBfree.latest.txt)
656 rsync -a -q --partial \
657 rsync://x42-plugins.com/x42/osx/setBfree-lv2-osx-${SETBFREE_VERSION}.zip \
658 "$CACHEDIR/setBfree-lv2-osx-${SETBFREE_VERSION}.zip"
659 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
660 "$CACHEDIR/setBfree-lv2-osx-${SETBFREE_VERSION}.zip"
662 MIDIFILTER_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-midifilter.latest.txt)
663 rsync -a -q --partial \
664 rsync://x42-plugins.com/x42/osx/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip \
665 "$CACHEDIR/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip"
666 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
667 "$CACHEDIR/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip"
669 for file in ${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/*/*.dylib ; do
670 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin
671 mv ${file}.thin ${file}
675 if test -n "$MIXBUS"; then
676 echo "deploying harrison tools for $OSX_BENSID"
678 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip"
680 curl -s -S --fail -# \
681 -z "${CACHEDIR}/harrison_channelstrip.${OSX_BENSID}.so" \
682 -o "${CACHEDIR}/harrison_channelstrip.${OSX_BENSID}.so" \
683 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/harrison_channelstrip.${OSX_BENSID}.so"
685 cp "${CACHEDIR}/harrison_channelstrip.${OSX_BENSID}.so" \
686 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip/harrison_channelstrip.so"
688 ################################################################################
690 ( cd $PRODUCT_PKG_DIR ; find . ) > file_list.txt
692 echo "Building DMG ..."
694 # UC_DMG=$APPNAME-${release_version}-UC.dmg
695 # FINAL_DMG=$APPNAME-${release_version}.dmg
697 if [ x$DEBUG = xT ]; then
698 UC_DMG=$APPNAME-$release_version-dbg.dmg
700 UC_DMG=$APPNAME-$release_version.dmg
702 VOLNAME=$APPNAME-$release_version
704 MNTPATH=`mktemp -d -t ardourimg`
705 TMPDMG=`mktemp -t ardour`
706 ICNSTMP=`mktemp -t ardouricon`
708 DMGMEGABYTES=$[ `du -sk "$PRODUCT_PKG_DIR" | cut -f 1` * 1024 / 1048576 + $EXTRA_SPACE_MB ]
710 echo "DMG MB = " $DMGMEGABYTES
712 rm -f $UC_DMG "$TMPDMG" "${TMPDMG}.dmg" "$ICNSTMP"
716 TMPDMG="${TMPDMG}.dmg"
718 trap "rm -rf $MNTPATH $TMPDMG ${TMPDMG}.dmg $ICNSTMP" EXIT
720 hdiutil create -megabytes $DMGMEGABYTES -fs HFS+ -volname "${VOLNAME}" "$TMPDMG"
721 DiskDevice=$(hdid -nomount "$TMPDMG" | grep Apple_HFS | cut -f 1 -d ' ')
722 mount -t hfs -o nobrowse "${DiskDevice}" "${MNTPATH}"
724 cp -r ${PRODUCT_PKG_DIR}/* "${MNTPATH}" || exit
725 mkdir "${MNTPATH}/.background"
726 cp -vi ${DMGBACKGROUND}.png "${MNTPATH}/.background/dmgbg.png"
728 echo "setting DMG background ..."
730 if test $(sw_vers -productVersion | cut -d '.' -f 2) -lt 9; then
734 # OSX 10.9.X and later
735 DISKNAME=`basename "${MNTPATH}"`
739 tell application "Finder"
741 tell disk "${DISKNAME}"
744 set current view of container window to icon view
745 set toolbar visible of container window to false
746 set statusbar visible of container window to false
747 set the bounds of container window to {400, 200, 800, ${DMGWINBOTTOM}}
748 set theViewOptions to the icon view options of container window
749 set arrangement of theViewOptions to not arranged
750 set icon size of theViewOptions to 64
751 set background picture of theViewOptions to file ".background:dmgbg.png"
752 make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
753 set position of item "${APPDIR}" of container window to {90, 100}
754 set position of item "Applications" of container window to {310, 100}
760 update without registering applications
767 chmod -Rf go-w "${MNTPATH}"
771 echo "compressing Image ..."
773 # Umount the image ('eject' above may already have done that)
774 umount "${DiskDevice}" || true
775 hdiutil eject "${DiskDevice}" || true
776 # Create a read-only version, use zlib compression
777 hdiutil convert -format UDZO "${TMPDMG}" -imagekey zlib-level=9 -o "${UC_DMG}"
779 if test $(sw_vers -productVersion | cut -d '.' -f 2) -gt 5; then
780 echo "setting file icon ..."
782 cp ${PRODUCT_PKG_DIR}/$Resources/appIcon.icns ${ICNSTMP}.icns
783 sips -i ${ICNSTMP}.icns
784 DeRez -only icns ${ICNSTMP}.icns > ${ICNSTMP}.rsrc
785 Rez -append ${ICNSTMP}.rsrc -o "$UC_DMG"
786 SetFile -a C "$UC_DMG"
788 rm ${ICNSTMP}.icns ${ICNSTMP}.rsrc
791 rm -rf ${PRODUCT_PKG_DIR}
794 echo "packaging suceeded."