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 : ${HARRISONCHANNELSTRIP=harrison_channelstrip}
28 : ${HARRISONLV2=harrison_lv2s-n}
30 . ../define_versions.sh
32 while [ $# -gt 0 ] ; do
37 # top level build targets
43 PRODUCT_PKG_DIR=ArdourSAE ;
52 PRODUCT_PKG_DIR=Mixbus;
55 --mixbus32c) MIXBUS=1;
62 PRODUCT_PKG_DIR=Mixbus32C;
63 APPNAME=Mixbus32C-${major_version} ;
70 PRODUCT_PKG_DIR=Ardour;
75 PRODUCT_PKG_DIR=Ardour ;
77 --test) SAE= ; STRIP= ; shift ;;
80 # specific build flags
83 --noharvid) WITH_HARVID= ; shift ;;
84 --nostrip) STRIP= ; shift ;;
85 --sysdeps) PRINT_SYSDEPS=1; shift ;;
86 --nls) WITH_NLS=1 ; shift ;;
87 --chanstrip) HARRISONCHANNELSTRIP=$2 ; shift; shift ;;
91 if test -z "$PRODUCT_PKG_DIR" -o -z "$APPNAME"; then
92 echo "application or product-name was not specified"
96 echo "Version is $release_version"
97 if [ "x$commit" != "x" ] ; then
98 info_string="$release_version ($commit) built on `hostname` by `whoami` on `date`"
100 info_string="$release_version built on `hostname` by `whoami` on `date`"
102 echo "Info string is $info_string"
104 if [ x$DEBUG = xT ]; then
106 echo "Debug build, strip disabled"
108 if test x$STRIP != x ; then
109 echo "No debug build, strip enabled"
111 echo "No debug build, but strip disabled."
115 # setup directory structure
117 APPDIR=${APPNAME}${major_version}.app
118 APPROOT=$APPDIR/Contents
119 Frameworks=$APPROOT/lib
120 Resources=$APPROOT/Resources
122 # Since this is OS X, don't try to distinguish between etc and shared
123 # (machine dependent and independent data) - just put everything
128 Locale=$Resources/locale
130 # Bundled Plugins live in a top level folder
132 Plugins=$APPROOT/Plugins
133 Surfaces=$Frameworks/surfaces
134 Panners=$Frameworks/panners
135 Backends=$Frameworks/backends
136 MidiMaps=$Shared/midi_maps
137 ExportFormats=$Shared/export
138 Templates=$Shared/templates
139 PatchFiles=$Shared/patchfiles
140 LuaScripts=$Shared/scripts
141 MackieControl=$Shared/mcp
142 Themes=$Shared/themes
144 if [ x$PRINT_SYSDEPS != x ] ; then
146 # print system dependencies
149 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Plugins/*.so ; do
150 if ! file $file | grep -qs Mach-O ; then
153 otool -L $file | awk '{print $1}' | egrep -v "(^@executable_path|^Ardour[0-9][.0-9]*.app)"
158 echo "Removing old $APPDIR tree ..."
162 echo "Building new app directory structure ..."
164 # only bother to make the longest paths
166 mkdir -p $APPROOT/MacOS
167 mkdir -p $APPROOT/Resources
173 mkdir -p $ExportFormats
175 mkdir -p $Frameworks/modules
177 mkdir -p $MackieControl
182 # maybe set variables
184 if test x$SAE != x ; then
185 appname="Ardour${major_version}-SAE"
186 EXECUTABLE=${appname}
187 env="$env<key>ARDOUR_SAE</key><string>true</string>"
189 # current default for SAE version is German keyboard layout without a keypad
191 env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>de-nokeypad</string>"
192 env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui_sae.conf</string>"
193 elif test x$MIXBUS != x ; then
195 EXECUTABLE=${appname}${major_version}
196 env="$env<key>ARDOUR_MIXBUS</key><string>true</string>"
198 # current default for MIXBUS version is US keyboard layout without a keypad
200 env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>us-nokeypad</string>"
201 env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui.conf</string>"
203 appname="Ardour${major_version}"
204 EXECUTABLE=${appname}
208 # if we're not going to bundle JACK, make sure we can find
209 # jack in the places where it might be
212 env="$env<key>PATH</key><string>/usr/local/bin:/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>"
213 env="$env<key>DYLIB_FALLBACK_LIBRARY_PATH</key><string>/usr/local/lib:/opt/lib</string>"
215 env="<key>LSEnvironment</key><dict>$env<key>ARDOUR_BUNDLED</key><string>true</string></dict>"
219 sed -e "s?@ENV@?$env?g" \
220 -e "s?@VERSION@?$release_version?g" \
221 -e "s?@INFOSTRING@?$info_string?g" \
222 -e "s?@IDSUFFIX@?$EXECUTABLE?g" \
223 -e "s?@BUNDLENAME@?${APPNAME}${major_version}?g" \
224 -e "s?@EXECUTABLE@?$EXECUTABLE?g" < Info.plist.in > Info.plist
226 sed -e "s?@APPNAME@?$appname?" \
227 -e "s?@ENV@?$env?g" \
228 -e "s?@VERSION@?$release_version?g" \
229 -e "s?@INFOSTRING@?$info_string?g" < InfoPlist.strings.in > Resources/InfoPlist.strings || exit 1
233 cp Info.plist $APPROOT
234 cp -R Resources $APPROOT
238 rm -f Resources/InfoPlist.strings
241 # if we build a bundle without jack, then
242 # make the Ardour executable a helper
243 # script that checks to see if JACK is
247 cp startup_script $APPROOT/MacOS/$EXECUTABLE
248 chmod 775 $APPROOT/MacOS/$EXECUTABLE
249 MAIN_EXECUTABLE=Ardour.bin ## used in startup_script
251 echo "Copying ardour executable ...."
252 cp $BUILD_ROOT/gtk2_ardour/ardour-$release_version $APPROOT/MacOS/$MAIN_EXECUTABLE
253 if test x$SAE != x ; then
254 # cp $BUILD_ROOT/gtk2_ardour/evtest $APPROOT/MacOS/gtkevents
255 cp Ardour3-SAE.icns $Resources/appIcon.icns
256 elif test x$MIXBUS32C != x ; then
257 cp Mixbus32C.icns $Resources/appIcon.icns
258 elif test x$MIXBUS != x ; then
259 cp Mixbus.icns $Resources/appIcon.icns
261 cp Ardour.icns $Resources/appIcon.icns
263 cp typeArdour.icns $Resources/
265 set +e # things below are not error-free (optional files etc) :(
268 if test x$WITH_NLS != x ; then
269 echo "NLS support ..."
270 echo "I hope you remembered to run waf i18n"
273 for pkg in gtk2_ardour libs/ardour libs/gtkmm2ext ; do
274 files=`find ../../$pkg -name "*.mo"`
277 # the package name is appended with a number so that
278 # it can be parallel installed during a regular install
279 # with older (and newer) versions. it is just the major
280 # number of the release (i.e. leading digits)
283 vsuffix=`echo $release_version | sed 's/^\([0-9][0-9]*\).*/\1/'`
285 if [ -z "$files" ]; then
287 echo "!!!! WARNING !!!! - Did not find any .mo files in ../../$pkg"
294 lang=`basename $file | sed 's/\.mo//'`
295 mkdir -p $Locale/$lang/LC_MESSAGES
296 cp $file $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
297 echo copy $file to $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
298 if echo $LINGUAS | grep $lang >/dev/null 2>&1 ; then
301 LINGUAS="$LINGUAS $lang"
308 if [ -d $GTKSTACK_ROOT/share/locale/$l ] ; then
309 echo "Copying GTK i18n files for $l..."
310 cp -r $GTKSTACK_ROOT/share/locale/$l $Locale
312 # try with just the language spec
313 just_lang=`echo $l | sed 's/_[A-Z][A-Z]$//'`
314 if [ -d $GTKSTACK_ROOT/share/locale/$just_lang ] ; then
315 echo "Copying GTK i18n files for $l..."
316 cp -r $GTKSTACK_ROOT/share/locale/$just_lang $Locale
321 echo "Skipping NLS support"
325 # Copy stuff that may be dynamically loaded
328 cp -R $GTKSTACK_ROOT/etc/* $Etc
329 cp -R $GTKSTACK_ROOT/lib/charset.alias $Resources
331 # We rely on clearlooks, so include a version from our own build tree
332 # this one is special - we will set GTK_PATH to $Frameworks/gtkengines
334 GTK_ENGINE_DIR=$Frameworks/gtkengines/engines
335 mkdir -p $GTK_ENGINE_DIR
337 echo "Copying GTK engines ..."
338 cp $BUILD_ROOT/libs/clearlooks-newer/libclearlooks.dylib $Frameworks
339 (cd $GTK_ENGINE_DIR && ln -s ../../libclearlooks.dylib . && ln -s ../../libclearlooks.dylib libclearlooks.so)
341 cp $GTKSTACK_ROOT/lib/gtk-2.0/2.10.0/engines/libpixmap.so $Frameworks
342 (cd $GTK_ENGINE_DIR && ln -s ../../libpixmap.so)
345 # Control Surface shared libraries
346 cp $BUILD_ROOT/libs/surfaces/*/libardour_*.dylib $Surfaces
347 cp $BUILD_ROOT/libs/surfaces/control_protocol/libardourcp*.dylib $Frameworks
350 cp $BUILD_ROOT/libs/panners/*/lib*.dylib $Panners
353 for backend in jack wavesaudio dummy coreaudio; do
354 cp $BUILD_ROOT/libs/backends/$backend/lib*.dylib $Backends
357 # Export Formats/Presets
358 for f in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do
359 cp "$f" $ExportFormats ;
362 # Session and Route templates
363 #for f in $BUILD_ROOT/../templates/* ; do
364 # if [ -d "$f" ] ; then
365 # cp -r "$f" $Templates ;
370 # got to be careful with names here
371 for x in $BUILD_ROOT/../midi_maps/*.map ; do
376 # got to be careful with names here
377 for x in $BUILD_ROOT/../patchfiles/*.midnam ; do
382 # got to be careful with names here
383 for x in $BUILD_ROOT/../scripts/*.lua ; do
385 if test "${BN:0:1}" = "_"; then
392 # got to be careful with names here
393 for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
394 cp "$x" $MackieControl
397 # VAMP plugins that we use
398 cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
400 # Suil modules (new dir 'build-stack')
401 if test -d $GTKSTACK_ROOT/lib/suil-0/ ; then
402 cp $GTKSTACK_ROOT/lib/suil-0/lib* $Frameworks
405 # Suil modules (old dir 'build-ardour-stack')
406 if test -d $ARDOURSTACK_ROOT/lib/suil-0/ ; then
407 cp $ARDOURSTACK_ROOT/lib/suil-0/lib* $Frameworks
410 # VST scanner app and wrapper script, if they exist
411 if test -d $BUILD_ROOT/libs/fst ; then
412 cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $Frameworks/
416 if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
417 mkdir -p $Frameworks/vfork
418 cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $Frameworks/
421 # TODO check if this is still needed, even when building on 10.5
422 if file $BUILD_ROOT/gtk2_ardour/ardour-$release_version | grep -q ppc; then
423 STDCPP='|libstdc\+\+'
430 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Panners/*.dylib $Backends/*.dylib $Surfaces/*.dylib $Plugins/*.so ; do
431 if ! file $file | grep -qs Mach-O ; then
434 # libffi contains "S" (other section symbols) that should not be stripped.
435 if [[ $file == *"libffi"* ]] ; then
439 if test x$STRIP != x ; then
440 strip -u -r -arch all $file &>/dev/null
443 deps=`otool -L $file | awk '{print $1}' | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | grep -v 'libjack\.' | grep -v "$(basename $file)"`
445 for dep in $deps ; do
447 if ! test -f $Frameworks/$base; then
448 if echo $dep | grep -sq '^libs' ; then
449 cp $BUILD_ROOT/$dep $Frameworks
457 if test x$missing = xfalse ; then
458 # everything has been found
464 echo "Copying other stuff to $APPDIR ..."
466 cp $BUILD_ROOT/gtk2_ardour/ardour.keys $Resources
467 cp $BUILD_ROOT/gtk2_ardour/ardour.menus $Resources
468 cp $BUILD_ROOT/gtk2_ardour/default_ui_config $Resources
469 cp $BUILD_ROOT/gtk2_ardour/clearlooks.rc $Resources
471 # Copied directly from source tree
473 mkdir ${Resources}/icons
474 mkdir ${Resources}/resources
475 cp ../../system_config $Resources/system_config
476 cp ../../instant.xml $Resources/instant.xml
477 cp ../../gtk2_ardour/icons/*.png ${Resources}/icons/
478 cp -r ../../gtk2_ardour/icons/cursor_* ${Resources}/icons/
479 cp ../../gtk2_ardour/ArdourMono.ttf $Shared
480 cp ../../gtk2_ardour/resources/${PRODUCT_PKG_DIR}-* ${Resources}/resources/
483 # Themes: only install those named for this app
484 lower_case_appname=`echo $APPNAME | tr '[:upper:]' '[:lower:]'`
485 cp ../../gtk2_ardour/themes/*-${lower_case_appname}.colors $Themes
487 # go through and recursively remove any .svn dirs in the bundle
488 for svndir in `find $APPDIR -name .svn -type dir`; do
492 # install bundled LV2s to <app>/Contents/lib/LV2/
493 cp -R $BUILD_ROOT/libs/LV2 $Frameworks/
495 # lv2 core, classifications etc - TODO check if we need the complete LV2 ontology
496 if test -d $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
497 cp -R $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
498 elif test -d $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
499 cp -R $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
503 # now fix up the executables
504 echo "Fixing up executable dependency names ..."
505 executables=$MAIN_EXECUTABLE
506 if test x$SAE != x ; then
507 executables="$executables"
510 for exe in $executables; do
511 EXE=$APPROOT/MacOS/$exe
513 for lib in `otool -L $EXE | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
515 changes="$changes -change $lib @executable_path/../lib/$base"
517 if test "x$changes" != "x" ; then
518 install_name_tool $changes $EXE
522 echo "Fixing up library names ..."
523 # now do the same for all the libraries we include
524 for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners $Backends $Frameworks/LV2/* ; do
526 libbase=`basename $libdir`
528 for dylib in $libdir/*.dylib $libdir/*.so ; do
532 if test -L $dylib ; then
536 # change all the dependencies
539 for lib in `otool -L $dylib | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
541 if echo $lib | grep -s libbase; then
542 changes="$changes -change $lib @executable_path/../$libbase/$base"
544 changes="$changes -change $lib @executable_path/../lib/$base"
548 if test "x$changes" != x ; then
549 if install_name_tool $changes $dylib ; then
556 # now the change what the library thinks its own name is
558 base=`basename $dylib`
559 install_name_tool -id @executable_path/../$libbase/$base $dylib
564 # and now ... the DMG
567 rm -rf $PRODUCT_PKG_DIR
568 mkdir $PRODUCT_PKG_DIR
573 if [ x$SAE != x ] ; then
577 echo "Creating SAE packaging directory"
578 mv $APPDIR $PRODUCT_PKG_DIR/Ardour3-SAE.app
579 cp HowToInstallArdourSAE.pdf "$PRODUCT_PKG_DIR/How To Install Ardour SAE.pdf"
580 cp SAE-de-keypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts (keypad).pdf"
581 cp SAE-de-nokeypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts.pdf"
583 elif [ x$MIXBUS != x ] ; then
587 echo "Creating Mixbus packaging directory"
588 mv $APPDIR $PRODUCT_PKG_DIR/
589 DMGBACKGROUND=dmgbgMB
592 echo "Creating $APPNAME packaging directory"
593 mv $APPDIR $PRODUCT_PKG_DIR/
597 if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
600 elif file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q ppc; then
608 if test x$WITH_HARRISON_LV2 != x ; then
609 curl -s -S --fail -# \
610 -z "${CACHEDIR}/${HARRISONLV2}.${OSX_BENSID}.zip" \
611 -o "${CACHEDIR}/${HARRISONLV2}.${OSX_BENSID}.zip" \
612 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/${HARRISONLV2}.${OSX_BENSID}.zip"
614 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
615 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
616 "${CACHEDIR}/${HARRISONLV2}.${OSX_BENSID}.zip"
619 if test x$WITH_HARVID != x ; then
620 echo "installing video tools.."
621 HARVID_VERSION=$(curl -s -S http://ardour.org/files/video-tools/harvid_version.txt)
622 XJADEO_VERSION=$(curl -s -S http://ardour.org/files/video-tools/xjadeo_version.txt)
624 echo "copying harvid and xjadeo ..."
627 rsync://ardour.org/video-tools/harvid-osx-${HARVID_VERSION}.tgz \
628 "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz"
631 rsync://ardour.org/video-tools/jadeo-${XJADEO_VERSION:1}.dmg \
632 "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg"
635 -C $PRODUCT_PKG_DIR/$APPROOT \
636 -f "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz" || exit 1
638 JADEO=$(hdiutil attach "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg" | grep Apple_HFS | grep dev/ | cut -f 3)
639 cp -r "${JADEO}/Jadeo.app" "$PRODUCT_PKG_DIR/"
640 hdiutil detach "${JADEO}"
642 XJCONTENT=${PRODUCT_PKG_DIR}/Jadeo.app/Contents
643 HVLIBS=${PRODUCT_PKG_DIR}/$APPROOT/lib/harvid
645 for file in ${XJCONTENT}/MacOS/Jadeo-bin ${XJCONTENT}/Frameworks/*.dylib ${HVLIBS}/*.dylib ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/*harvid* ; do
646 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin && \
647 mv ${file}.thin ${file}
651 YPOS=$[ $DMGWINBOTTOM - 300 ]
652 XJADEOPOS="set position of item \"Jadeo.app\" of container window to {310, ${YPOS}}"
654 DMGBACKGROUND=${DMGBACKGROUND}xj
657 ################################################################################
658 ### Mixbus plugins, etc
659 if test x$WITH_X42_LV2 != x ; then
660 echo "bundling x42 plugins"
661 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
663 for proj in x42-meters x42-midifilter x42-midimap x42-stereoroute x42-eq setBfree; do
664 X42_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/${proj}.latest.txt)
665 rsync -a -q --partial \
666 rsync://x42-plugins.com/x42/osx/${proj}-lv2-osx-${X42_VERSION}.zip \
667 "$CACHEDIR/${proj}-lv2-osx-${X42_VERSION}.zip"
668 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
669 "$CACHEDIR/${proj}-lv2-osx-${X42_VERSION}.zip"
672 for file in ${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/*/*.dylib ; do
673 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin
674 mv ${file}.thin ${file}
678 if test -n "$MIXBUS"; then
679 echo "deploying harrison channelstrip for $OSX_BENSID"
681 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip"
683 curl -s -S --fail -# \
684 -z "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
685 -o "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
686 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so"
688 cp "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
689 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip/${HARRISONCHANNELSTRIP}.so"
691 echo "deploying harrison vamp plugins for $OSX_BENSID"
693 curl -s -S --fail -# \
694 -z "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
695 -o "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
696 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/harrison_vamp.${OSX_BENSID}.dylib"
698 cp "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
699 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/harrison_vamp.dylib"
702 ################################################################################
704 if test x$DEMO_SESSION_URL != x ; then
705 mkdir -p $Shared/sessions
706 DEMO_SESSIONS=$(curl -s -S --fail $DEMO_SESSION_URL/index.txt)
707 for demo in $DEMO_SESSIONS; do
708 curl -s -S --fail -# -o $Shared/sessions/$demo $DEMO_SESSION_URL/$demo
712 ################################################################################
714 ( cd $PRODUCT_PKG_DIR ; find . ) > file_list.txt
716 echo "Building DMG ..."
718 # UC_DMG=$APPNAME-${release_version}-UC.dmg
719 # FINAL_DMG=$APPNAME-${release_version}.dmg
721 if [ x$DEBUG = xT ]; then
722 UC_DMG=$APPNAME-$release_version-dbg.dmg
724 UC_DMG=$APPNAME-$release_version.dmg
726 VOLNAME=$APPNAME-$release_version
728 MNTPATH=`mktemp -d -t ardourimg`
729 TMPDMG=`mktemp -t ardour`
730 ICNSTMP=`mktemp -t ardouricon`
732 DMGMEGABYTES=$[ `du -sk "$PRODUCT_PKG_DIR" | cut -f 1` * 1024 / 1048576 + $EXTRA_SPACE_MB ]
734 echo "DMG MB = " $DMGMEGABYTES
736 rm -f $UC_DMG "$TMPDMG" "${TMPDMG}.dmg" "$ICNSTMP"
740 TMPDMG="${TMPDMG}.dmg"
742 trap "rm -rf $MNTPATH $TMPDMG ${TMPDMG}.dmg $ICNSTMP" EXIT
744 hdiutil create -megabytes $DMGMEGABYTES -fs HFS+ -volname "${VOLNAME}" "$TMPDMG"
745 DiskDevice=$(hdid -nomount "$TMPDMG" | grep Apple_HFS | cut -f 1 -d ' ')
746 mount -t hfs -o nobrowse "${DiskDevice}" "${MNTPATH}"
748 cp -r ${PRODUCT_PKG_DIR}/* "${MNTPATH}" || exit
749 mkdir "${MNTPATH}/.background"
750 cp -vi ${DMGBACKGROUND}.png "${MNTPATH}/.background/dmgbg.png"
752 echo "setting DMG background ..."
754 if test $(sw_vers -productVersion | cut -d '.' -f 2) -lt 9; then
758 # OSX 10.9.X and later
759 DISKNAME=`basename "${MNTPATH}"`
763 tell application "Finder"
765 tell disk "${DISKNAME}"
768 set current view of container window to icon view
769 set toolbar visible of container window to false
770 set statusbar visible of container window to false
771 set the bounds of container window to {400, 200, 800, ${DMGWINBOTTOM}}
772 set theViewOptions to the icon view options of container window
773 set arrangement of theViewOptions to not arranged
774 set icon size of theViewOptions to 64
775 set background picture of theViewOptions to file ".background:dmgbg.png"
776 make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
777 set position of item "${APPDIR}" of container window to {90, 100}
778 set position of item "Applications" of container window to {310, 100}
784 update without registering applications
791 chmod -Rf go-w "${MNTPATH}"
795 echo "compressing Image ..."
797 # Umount the image ('eject' above may already have done that)
798 umount "${DiskDevice}" || true
799 hdiutil eject "${DiskDevice}" || true
800 # Create a read-only version, use zlib compression
801 hdiutil convert -format UDZO "${TMPDMG}" -imagekey zlib-level=9 -o "${UC_DMG}"
803 if test $(sw_vers -productVersion | cut -d '.' -f 2) -gt 5; then
804 echo "setting file icon ..."
806 cp ${PRODUCT_PKG_DIR}/$Resources/appIcon.icns ${ICNSTMP}.icns
807 sips -i ${ICNSTMP}.icns
808 DeRez -only icns ${ICNSTMP}.icns > ${ICNSTMP}.rsrc
809 Rez -append ${ICNSTMP}.rsrc -o "$UC_DMG"
810 SetFile -a C "$UC_DMG"
812 rm ${ICNSTMP}.icns ${ICNSTMP}.rsrc
815 rm -rf ${PRODUCT_PKG_DIR}
818 echo "packaging suceeded."