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}
29 . ../define_versions.sh
31 while [ $# -gt 0 ] ; do
36 # top level build targets
43 PRODUCT_PKG_DIR=ArdourSAE ;
53 PRODUCT_PKG_DIR=Mixbus;
56 --mixbus32c) MIXBUS=1;
64 PRODUCT_PKG_DIR=Mixbus32C;
65 APPNAME=Mixbus32C-${major_version} ;
71 PRODUCT_PKG_DIR=Ardour;
77 PRODUCT_PKG_DIR=Ardour ;
79 --test) SAE= ; WITH_LADSPA=; STRIP= ; shift ;;
82 # specific build flags
85 --noharvid) WITH_HARVID= ; shift ;;
86 --noladspa) WITH_LADSPA= ; shift ;;
87 --nostrip) STRIP= ; shift ;;
88 --sysdeps) PRINT_SYSDEPS=1; shift ;;
89 --nls) WITH_NLS=1 ; shift ;;
90 --chanstrip) HARRISONCHANNELSTRIP=$2 ; shift; shift ;;
94 if test -z "$PRODUCT_PKG_DIR" -o -z "$APPNAME"; then
95 echo "application or product-name was not specified"
99 echo "Version is $release_version"
100 if [ "x$commit" != "x" ] ; then
101 info_string="$release_version ($commit) built on `hostname` by `whoami` on `date`"
103 info_string="$release_version built on `hostname` by `whoami` on `date`"
105 echo "Info string is $info_string"
107 if [ x$DEBUG = xT ]; then
109 echo "Debug build, strip disabled"
111 if test x$STRIP != x ; then
112 echo "No debug build, strip enabled"
114 echo "No debug build, but strip disabled."
118 # setup directory structure
120 APPDIR=${APPNAME}${major_version}.app
121 APPROOT=$APPDIR/Contents
122 Frameworks=$APPROOT/lib
123 Resources=$APPROOT/Resources
125 # Since this is OS X, don't try to distinguish between etc and shared
126 # (machine dependent and independent data) - just put everything
131 Locale=$Resources/locale
133 # Bundled Plugins live in a top level folder
135 Plugins=$APPROOT/Plugins
136 Surfaces=$Frameworks/surfaces
137 Panners=$Frameworks/panners
138 Backends=$Frameworks/backends
139 MidiMaps=$Shared/midi_maps
140 ExportFormats=$Shared/export
141 Templates=$Shared/templates
142 PatchFiles=$Shared/patchfiles
143 LuaScripts=$Shared/scripts
144 MackieControl=$Shared/mcp
146 if [ x$PRINT_SYSDEPS != x ] ; then
148 # print system dependencies
151 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Plugins/*.so ; do
152 if ! file $file | grep -qs Mach-O ; then
155 otool -L $file | awk '{print $1}' | egrep -v "(^@executable_path|^Ardour[0-9][.0-9]*.app)"
160 echo "Removing old $APPDIR tree ..."
164 echo "Building new app directory structure ..."
166 # only bother to make the longest paths
168 mkdir -p $APPROOT/MacOS
169 mkdir -p $APPROOT/Resources
175 mkdir -p $ExportFormats
177 mkdir -p $Frameworks/modules
179 mkdir -p $MackieControl
183 # maybe set variables
185 if test x$SAE != x ; then
186 appname="Ardour${major_version}-SAE"
187 EXECUTABLE=${appname}
188 env="$env<key>ARDOUR_SAE</key><string>true</string>"
190 # current default for SAE version is German keyboard layout without a keypad
192 env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>de-nokeypad</string>"
193 env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui_sae.conf</string>"
194 elif test x$MIXBUS != x ; then
196 EXECUTABLE=${appname}${major_version}
197 env="$env<key>ARDOUR_MIXBUS</key><string>true</string>"
199 # current default for MIXBUS version is US keyboard layout without a keypad
201 env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>us-nokeypad</string>"
202 env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui.conf</string>"
204 appname="Ardour${major_version}"
205 EXECUTABLE=${appname}
209 # if we're not going to bundle JACK, make sure we can find
210 # jack in the places where it might be
213 env="$env<key>PATH</key><string>/usr/local/bin:/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>"
214 env="$env<key>DYLIB_FALLBACK_LIBRARY_PATH</key><string>/usr/local/lib:/opt/lib</string>"
216 env="<key>LSEnvironment</key><dict>$env<key>ARDOUR_BUNDLED</key><string>true</string></dict>"
220 sed -e "s?@ENV@?$env?g" \
221 -e "s?@VERSION@?$release_version?g" \
222 -e "s?@INFOSTRING@?$info_string?g" \
223 -e "s?@IDSUFFIX@?$EXECUTABLE?g" \
224 -e "s?@BUNDLENAME@?${APPNAME}${major_version}?g" \
225 -e "s?@EXECUTABLE@?$EXECUTABLE?g" < Info.plist.in > Info.plist
227 sed -e "s?@APPNAME@?$appname?" \
228 -e "s?@ENV@?$env?g" \
229 -e "s?@VERSION@?$release_version?g" \
230 -e "s?@INFOSTRING@?$info_string?g" < InfoPlist.strings.in > Resources/InfoPlist.strings || exit 1
234 cp Info.plist $APPROOT
235 cp -R Resources $APPROOT
239 rm -f Resources/InfoPlist.strings
242 # if we build a bundle without jack, then
243 # make the Ardour executable a helper
244 # script that checks to see if JACK is
248 cp startup_script $APPROOT/MacOS/$EXECUTABLE
249 chmod 775 $APPROOT/MacOS/$EXECUTABLE
250 MAIN_EXECUTABLE=Ardour.bin ## used in startup_script
252 echo "Copying ardour executable ...."
253 cp $BUILD_ROOT/gtk2_ardour/ardour-$release_version $APPROOT/MacOS/$MAIN_EXECUTABLE
254 if test x$SAE != x ; then
255 # cp $BUILD_ROOT/gtk2_ardour/evtest $APPROOT/MacOS/gtkevents
256 cp Ardour3-SAE.icns $Resources/appIcon.icns
257 elif test x$MIXBUS32C != x ; then
258 cp Mixbus32C.icns $Resources/appIcon.icns
259 elif test x$MIXBUS != x ; then
260 cp Mixbus.icns $Resources/appIcon.icns
262 cp Ardour.icns $Resources/appIcon.icns
264 cp typeArdour.icns $Resources/
266 set +e # things below are not error-free (optional files etc) :(
269 if test x$WITH_NLS != x ; then
270 echo "NLS support ..."
271 echo "I hope you remembered to run waf i18n"
274 for pkg in gtk2_ardour libs/ardour libs/gtkmm2ext ; do
275 files=`find ../../$pkg -name "*.mo"`
278 # the package name is appended with a number so that
279 # it can be parallel installed during a regular install
280 # with older (and newer) versions. it is just the major
281 # number of the release (i.e. leading digits)
284 vsuffix=`echo $release_version | sed 's/^\([0-9][0-9]*\).*/\1/'`
286 if [ -z "$files" ]; then
288 echo "!!!! WARNING !!!! - Did not find any .mo files in ../../$pkg"
295 lang=`basename $file | sed 's/\.mo//'`
296 mkdir -p $Locale/$lang/LC_MESSAGES
297 cp $file $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
298 echo copy $file to $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
299 if echo $LINGUAS | grep $lang >/dev/null 2>&1 ; then
302 LINGUAS="$LINGUAS $lang"
309 if [ -d $GTKSTACK_ROOT/share/locale/$l ] ; then
310 echo "Copying GTK i18n files for $l..."
311 cp -r $GTKSTACK_ROOT/share/locale/$l $Locale
313 # try with just the language spec
314 just_lang=`echo $l | sed 's/_[A-Z][A-Z]$//'`
315 if [ -d $GTKSTACK_ROOT/share/locale/$just_lang ] ; then
316 echo "Copying GTK i18n files for $l..."
317 cp -r $GTKSTACK_ROOT/share/locale/$just_lang $Locale
322 echo "Skipping NLS support"
326 # Copy stuff that may be dynamically loaded
329 cp -R $GTKSTACK_ROOT/etc/* $Etc
330 cp -R $GTKSTACK_ROOT/lib/charset.alias $Resources
332 # We rely on clearlooks, so include a version from our own build tree
333 # this one is special - we will set GTK_PATH to $Frameworks/gtkengines
335 GTK_ENGINE_DIR=$Frameworks/gtkengines/engines
336 mkdir -p $GTK_ENGINE_DIR
338 echo "Copying GTK engines ..."
339 cp $BUILD_ROOT/libs/clearlooks-newer/libclearlooks.dylib $Frameworks
340 (cd $GTK_ENGINE_DIR && ln -s ../../libclearlooks.dylib . && ln -s ../../libclearlooks.dylib libclearlooks.so)
342 cp $GTKSTACK_ROOT/lib/gtk-2.0/2.10.0/engines/libpixmap.so $Frameworks
343 (cd $GTK_ENGINE_DIR && ln -s ../../libpixmap.so)
346 if test x$WITH_LADSPA != x ; then
347 if test x$SAE != x ; then
349 elif test x$MIXBUS != x ; then
350 plugdir=mixbus_ladspa
354 if [ -d $plugdir -a "x$(ls $plugdir)" != x ] ; then
355 echo "Copying `ls $plugdir | wc -l` plugins ..."
356 cp -r $plugdir/* $Plugins
360 # Control Surface shared libraries
361 cp $BUILD_ROOT/libs/surfaces/*/libardour_*.dylib $Surfaces
362 cp $BUILD_ROOT/libs/surfaces/control_protocol/libardourcp*.dylib $Frameworks
365 cp $BUILD_ROOT/libs/panners/*/lib*.dylib $Panners
368 for backend in jack wavesaudio dummy coreaudio; do
369 cp $BUILD_ROOT/libs/backends/$backend/lib*.dylib $Backends
372 # Export Formats/Presets
373 for f in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do
374 cp "$f" $ExportFormats ;
377 # Session and Route templates
378 #for f in $BUILD_ROOT/../templates/* ; do
379 # if [ -d "$f" ] ; then
380 # cp -r "$f" $Templates ;
385 # got to be careful with names here
386 for x in $BUILD_ROOT/../midi_maps/*.map ; do
391 # got to be careful with names here
392 for x in $BUILD_ROOT/../patchfiles/*.midnam ; do
397 # got to be careful with names here
398 for x in $BUILD_ROOT/../scripts/*.lua ; do
403 # got to be careful with names here
404 for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
405 cp "$x" $MackieControl
408 # VAMP plugins that we use
409 cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
411 # Suil modules (new dir 'build-stack')
412 if test -d $GTKSTACK_ROOT/lib/suil-0/ ; then
413 cp $GTKSTACK_ROOT/lib/suil-0/lib* $Frameworks
416 # Suil modules (old dir 'build-ardour-stack')
417 if test -d $ARDOURSTACK_ROOT/lib/suil-0/ ; then
418 cp $ARDOURSTACK_ROOT/lib/suil-0/lib* $Frameworks
421 # VST scanner app and wrapper script, if they exist
422 if test -d $BUILD_ROOT/libs/fst ; then
423 cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $Frameworks/
427 if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
428 mkdir -p $Frameworks/vfork
429 cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $Frameworks/
432 # TODO check if this is still needed, even when building on 10.5
433 if file $BUILD_ROOT/gtk2_ardour/ardour-$release_version | grep -q ppc; then
434 STDCPP='|libstdc\+\+'
441 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Panners/*.dylib $Backends/*.dylib $Surfaces/*.dylib $Plugins/*.so ; do
442 if ! file $file | grep -qs Mach-O ; then
445 # libffi contains "S" (other section symbols) that should not be stripped.
446 if [[ $file == *"libffi"* ]] ; then
450 if test x$STRIP != x ; then
451 strip -u -r -arch all $file &>/dev/null
454 deps=`otool -L $file | awk '{print $1}' | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | grep -v 'libjack\.' | grep -v "$(basename $file)"`
456 for dep in $deps ; do
458 if ! test -f $Frameworks/$base; then
459 if echo $dep | grep -sq '^libs' ; then
460 cp $BUILD_ROOT/$dep $Frameworks
468 if test x$missing = xfalse ; then
469 # everything has been found
475 echo "Copying other stuff to $APPDIR ..."
477 cp $BUILD_ROOT/gtk2_ardour/ardour.keys $Resources
478 cp $BUILD_ROOT/gtk2_ardour/ardour.menus $Resources
479 cp $BUILD_ROOT/gtk2_ardour/default_ui_config $Resources
480 cp $BUILD_ROOT/gtk2_ardour/clearlooks.rc $Resources
482 # Copied directly from source tree
484 cp ../../system_config $Resources/system_config
485 cp ../../instant.xml $Resources/instant.xml
486 cp -r ../../gtk2_ardour/icons $Resources
487 cp -r ../../gtk2_ardour/pixmaps $Resources
488 cp ../../gtk2_ardour/*.colors $Resources
489 cp -R ../../gtk2_ardour/splash.png $Shared
490 cp -R ../../gtk2_ardour/small-splash.png $Shared
491 cp -R ../../gtk2_ardour/ArdourMono.ttf $Shared
493 # go through and recursively remove any .svn dirs in the bundle
494 for svndir in `find $APPDIR -name .svn -type dir`; do
498 # install bundled LV2s to <app>/Contents/lib/LV2/
499 cp -R $BUILD_ROOT/libs/LV2 $Frameworks/
501 # lv2 core, classifications etc - TODO check if we need the complete LV2 ontology
502 if test -d $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
503 cp -R $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
504 elif test -d $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
505 cp -R $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
509 # now fix up the executables
510 echo "Fixing up executable dependency names ..."
511 executables=$MAIN_EXECUTABLE
512 if test x$SAE != x ; then
513 executables="$executables"
516 for exe in $executables; do
517 EXE=$APPROOT/MacOS/$exe
519 for lib in `otool -L $EXE | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
521 changes="$changes -change $lib @executable_path/../lib/$base"
523 if test "x$changes" != "x" ; then
524 install_name_tool $changes $EXE
528 echo "Fixing up library names ..."
529 # now do the same for all the libraries we include
530 for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners $Backends ; do
532 libbase=`basename $libdir`
534 for dylib in $libdir/*.dylib $libdir/*.so ; do
538 if test -L $dylib ; then
542 # change all the dependencies
545 for lib in `otool -L $dylib | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
547 if echo $lib | grep -s libbase; then
548 changes="$changes -change $lib @executable_path/../$libbase/$base"
550 changes="$changes -change $lib @executable_path/../lib/$base"
554 if test "x$changes" != x ; then
555 if install_name_tool $changes $dylib ; then
562 # now the change what the library thinks its own name is
564 base=`basename $dylib`
565 install_name_tool -id @executable_path/../$libbase/$base $dylib
570 # and now ... the DMG
573 rm -rf $PRODUCT_PKG_DIR
574 mkdir $PRODUCT_PKG_DIR
579 if [ x$SAE != x ] ; then
583 echo "Creating SAE packaging directory"
584 mv $APPDIR $PRODUCT_PKG_DIR/Ardour3-SAE.app
585 cp HowToInstallArdourSAE.pdf "$PRODUCT_PKG_DIR/How To Install Ardour SAE.pdf"
586 cp SAE-de-keypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts (keypad).pdf"
587 cp SAE-de-nokeypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts.pdf"
589 elif [ x$MIXBUS != x ] ; then
593 echo "Creating Mixbus packaging directory"
594 mv $APPDIR $PRODUCT_PKG_DIR/
595 DMGBACKGROUND=dmgbgMB
598 echo "Creating $APPNAME packaging directory"
599 mv $APPDIR $PRODUCT_PKG_DIR/
603 if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
606 elif file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q ppc; then
614 if test x$WITH_HARRISON_LV2 != x ; then
615 curl -s -S --fail -# \
616 -z "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
617 -o "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
618 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/harrison_lv2s.${OSX_BENSID}.zip"
620 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
621 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
622 "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip"
625 if test x$WITH_HARVID != x ; then
626 echo "installing video tools.."
627 HARVID_VERSION=$(curl -s -S http://ardour.org/files/video-tools/harvid_version.txt)
628 XJADEO_VERSION=$(curl -s -S http://ardour.org/files/video-tools/xjadeo_version.txt)
630 echo "copying harvid and xjadeo ..."
633 rsync://ardour.org/video-tools/harvid-osx-${HARVID_VERSION}.tgz \
634 "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz"
637 rsync://ardour.org/video-tools/jadeo-${XJADEO_VERSION:1}.dmg \
638 "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg"
641 -C $PRODUCT_PKG_DIR/$APPROOT \
642 -f "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz" || exit 1
644 JADEO=$(hdiutil attach "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg" | grep Apple_HFS | grep dev/ | cut -f 3)
645 cp -r "${JADEO}/Jadeo.app" "$PRODUCT_PKG_DIR/"
646 hdiutil detach "${JADEO}"
648 XJCONTENT=${PRODUCT_PKG_DIR}/Jadeo.app/Contents
649 HVLIBS=${PRODUCT_PKG_DIR}/$APPROOT/lib/harvid
651 for file in ${XJCONTENT}/MacOS/Jadeo-bin ${XJCONTENT}/Frameworks/*.dylib ${HVLIBS}/*.dylib ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/*harvid* ; do
652 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin && \
653 mv ${file}.thin ${file}
657 YPOS=$[ $DMGWINBOTTOM - 300 ]
658 XJADEOPOS="set position of item \"Jadeo.app\" of container window to {310, ${YPOS}}"
660 DMGBACKGROUND=${DMGBACKGROUND}xj
663 ################################################################################
664 ### Mixbus plugins, etc
665 if test x$WITH_X42_LV2 != x ; then
666 echo "bundling x42 plugins"
667 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
669 METERS_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-meters.latest.txt)
670 rsync -a -q --partial \
671 rsync://x42-plugins.com/x42/osx/x42-meters-lv2-osx-${METERS_VERSION}.zip \
672 "$CACHEDIR/x42-meters-lv2-osx-${METERS_VERSION}.zip"
673 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
674 "$CACHEDIR/x42-meters-lv2-osx-${METERS_VERSION}.zip"
676 EQ_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-eq.latest.txt)
677 rsync -a -q --partial \
678 rsync://x42-plugins.com/x42/osx/x42-eq-lv2-osx-${EQ_VERSION}.zip \
679 "$CACHEDIR/x42-eq-lv2-osx-${EQ_VERSION}.zip"
680 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
681 "$CACHEDIR/x42-eq-lv2-osx-${EQ_VERSION}.zip"
683 SETBFREE_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/setBfree.latest.txt)
684 rsync -a -q --partial \
685 rsync://x42-plugins.com/x42/osx/setBfree-lv2-osx-${SETBFREE_VERSION}.zip \
686 "$CACHEDIR/setBfree-lv2-osx-${SETBFREE_VERSION}.zip"
687 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
688 "$CACHEDIR/setBfree-lv2-osx-${SETBFREE_VERSION}.zip"
690 MIDIFILTER_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-midifilter.latest.txt)
691 rsync -a -q --partial \
692 rsync://x42-plugins.com/x42/osx/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip \
693 "$CACHEDIR/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip"
694 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
695 "$CACHEDIR/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip"
697 for file in ${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/*/*.dylib ; do
698 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin
699 mv ${file}.thin ${file}
703 if test -n "$MIXBUS"; then
704 echo "deploying harrison tools for $OSX_BENSID"
706 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip"
708 curl -s -S --fail -# \
709 -z "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
710 -o "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
711 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so"
713 cp "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
714 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip/${HARRISONCHANNELSTRIP}.so"
716 ################################################################################
718 ( cd $PRODUCT_PKG_DIR ; find . ) > file_list.txt
720 echo "Building DMG ..."
722 # UC_DMG=$APPNAME-${release_version}-UC.dmg
723 # FINAL_DMG=$APPNAME-${release_version}.dmg
725 if [ x$DEBUG = xT ]; then
726 UC_DMG=$APPNAME-$release_version-dbg.dmg
728 UC_DMG=$APPNAME-$release_version.dmg
730 VOLNAME=$APPNAME-$release_version
732 MNTPATH=`mktemp -d -t ardourimg`
733 TMPDMG=`mktemp -t ardour`
734 ICNSTMP=`mktemp -t ardouricon`
736 DMGMEGABYTES=$[ `du -sk "$PRODUCT_PKG_DIR" | cut -f 1` * 1024 / 1048576 + $EXTRA_SPACE_MB ]
738 echo "DMG MB = " $DMGMEGABYTES
740 rm -f $UC_DMG "$TMPDMG" "${TMPDMG}.dmg" "$ICNSTMP"
744 TMPDMG="${TMPDMG}.dmg"
746 trap "rm -rf $MNTPATH $TMPDMG ${TMPDMG}.dmg $ICNSTMP" EXIT
748 hdiutil create -megabytes $DMGMEGABYTES -fs HFS+ -volname "${VOLNAME}" "$TMPDMG"
749 DiskDevice=$(hdid -nomount "$TMPDMG" | grep Apple_HFS | cut -f 1 -d ' ')
750 mount -t hfs -o nobrowse "${DiskDevice}" "${MNTPATH}"
752 cp -r ${PRODUCT_PKG_DIR}/* "${MNTPATH}" || exit
753 mkdir "${MNTPATH}/.background"
754 cp -vi ${DMGBACKGROUND}.png "${MNTPATH}/.background/dmgbg.png"
756 echo "setting DMG background ..."
758 if test $(sw_vers -productVersion | cut -d '.' -f 2) -lt 9; then
762 # OSX 10.9.X and later
763 DISKNAME=`basename "${MNTPATH}"`
767 tell application "Finder"
769 tell disk "${DISKNAME}"
772 set current view of container window to icon view
773 set toolbar visible of container window to false
774 set statusbar visible of container window to false
775 set the bounds of container window to {400, 200, 800, ${DMGWINBOTTOM}}
776 set theViewOptions to the icon view options of container window
777 set arrangement of theViewOptions to not arranged
778 set icon size of theViewOptions to 64
779 set background picture of theViewOptions to file ".background:dmgbg.png"
780 make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
781 set position of item "${APPDIR}" of container window to {90, 100}
782 set position of item "Applications" of container window to {310, 100}
788 update without registering applications
795 chmod -Rf go-w "${MNTPATH}"
799 echo "compressing Image ..."
801 # Umount the image ('eject' above may already have done that)
802 umount "${DiskDevice}" || true
803 hdiutil eject "${DiskDevice}" || true
804 # Create a read-only version, use zlib compression
805 hdiutil convert -format UDZO "${TMPDMG}" -imagekey zlib-level=9 -o "${UC_DMG}"
807 if test $(sw_vers -productVersion | cut -d '.' -f 2) -gt 5; then
808 echo "setting file icon ..."
810 cp ${PRODUCT_PKG_DIR}/$Resources/appIcon.icns ${ICNSTMP}.icns
811 sips -i ${ICNSTMP}.icns
812 DeRez -only icns ${ICNSTMP}.icns > ${ICNSTMP}.rsrc
813 Rez -append ${ICNSTMP}.rsrc -o "$UC_DMG"
814 SetFile -a C "$UC_DMG"
816 rm ${ICNSTMP}.icns ${ICNSTMP}.rsrc
819 rm -rf ${PRODUCT_PKG_DIR}
822 echo "packaging suceeded."