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}
29 : ${HARRISONDSPURL=http://www.harrisonconsoles.com/plugins/releases/public}
31 . ../define_versions.sh
33 while [ $# -gt 0 ] ; do
38 # top level build targets
44 PRODUCT_PKG_DIR=ArdourSAE ;
53 PRODUCT_PKG_DIR=Mixbus;
56 --mixbus32c) MIXBUS=1;
63 PRODUCT_PKG_DIR=Mixbus32C;
64 APPNAME=Mixbus32C-${major_version} ;
71 PRODUCT_PKG_DIR=Ardour;
76 PRODUCT_PKG_DIR=Ardour ;
78 --test) SAE= ; STRIP= ; shift ;;
81 # specific build flags
84 --noharvid) WITH_HARVID= ; shift ;;
85 --nostrip) STRIP= ; shift ;;
86 --sysdeps) PRINT_SYSDEPS=1; shift ;;
87 --nls) WITH_NLS=1 ; shift ;;
88 --chanstrip) HARRISONCHANNELSTRIP=$2 ; shift; shift ;;
92 if test -z "$PRODUCT_PKG_DIR" -o -z "$APPNAME"; then
93 echo "application or product-name was not specified"
97 echo "Version is $release_version"
98 if [ "x$commit" != "x" ] ; then
99 info_string="$release_version ($commit) built on `hostname` by `whoami` on `date`"
101 info_string="$release_version built on `hostname` by `whoami` on `date`"
103 echo "Info string is $info_string"
105 if [ x$DEBUG = xT ]; then
107 echo "Debug build, strip disabled"
109 if test x$STRIP != x ; then
110 echo "No debug build, strip enabled"
112 echo "No debug build, but strip disabled."
116 lower_case_appname=`echo $APPNAME | tr '[:upper:]' '[:lower:]'`
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
145 Themes=$Shared/themes
147 if [ x$PRINT_SYSDEPS != x ] ; then
149 # print system dependencies
152 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Plugins/*.so ; do
153 if ! file $file | grep -qs Mach-O ; then
156 otool -L $file | awk '{print $1}' | egrep -v "(^@executable_path|^Ardour[0-9][.0-9]*.app)"
161 echo "Removing old $APPDIR tree ..."
165 echo "Building new app directory structure ..."
167 # only bother to make the longest paths
169 mkdir -p $APPROOT/MacOS
170 mkdir -p $APPROOT/Resources
176 mkdir -p $ExportFormats
178 mkdir -p $Frameworks/modules
180 mkdir -p $MackieControl
185 # maybe set variables
187 if test x$SAE != x ; then
188 appname="Ardour${major_version}-SAE"
189 EXECUTABLE=${appname}
190 env="$env<key>ARDOUR_SAE</key><string>true</string>"
192 # current default for SAE version is German keyboard layout without a keypad
194 env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>de-nokeypad</string>"
195 env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui_sae.conf</string>"
196 elif test x$MIXBUS != x ; then
198 EXECUTABLE=${appname}${major_version}
199 env="$env<key>ARDOUR_MIXBUS</key><string>true</string>"
201 # current default for MIXBUS version is US keyboard layout without a keypad
203 env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>us-nokeypad</string>"
204 env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui.conf</string>"
206 appname="Ardour${major_version}"
207 EXECUTABLE=${appname}
211 # if we're not going to bundle JACK, make sure we can find
212 # jack in the places where it might be
215 env="$env<key>PATH</key><string>/usr/local/bin:/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>"
216 env="$env<key>DYLIB_FALLBACK_LIBRARY_PATH</key><string>/usr/local/lib:/opt/lib</string>"
218 env="<key>LSEnvironment</key><dict>$env<key>ARDOUR_BUNDLED</key><string>true</string></dict>"
222 sed -e "s?@ENV@?$env?g" \
223 -e "s?@VERSION@?$release_version?g" \
224 -e "s?@INFOSTRING@?$info_string?g" \
225 -e "s?@IDSUFFIX@?$EXECUTABLE?g" \
226 -e "s?@BUNDLENAME@?${APPNAME}${major_version}?g" \
227 -e "s?@EXECUTABLE@?$EXECUTABLE?g" < Info.plist.in > Info.plist
229 sed -e "s?@APPNAME@?$appname?" \
230 -e "s?@ENV@?$env?g" \
231 -e "s?@VERSION@?$release_version?g" \
232 -e "s?@INFOSTRING@?$info_string?g" < InfoPlist.strings.in > Resources/InfoPlist.strings || exit 1
236 cp Info.plist $APPROOT
237 cp -R Resources $APPROOT
241 rm -f Resources/InfoPlist.strings
244 # if we build a bundle without jack, then
245 # make the Ardour executable a helper
246 # script that checks to see if JACK is
250 cp startup_script $APPROOT/MacOS/$EXECUTABLE
251 chmod 775 $APPROOT/MacOS/$EXECUTABLE
252 MAIN_EXECUTABLE=Ardour.bin ## used in startup_script
254 echo "Copying ardour executable ...."
255 cp $BUILD_ROOT/gtk2_ardour/ardour-$release_version $APPROOT/MacOS/$MAIN_EXECUTABLE
256 if test x$SAE != x ; then
257 # cp $BUILD_ROOT/gtk2_ardour/evtest $APPROOT/MacOS/gtkevents
258 cp Ardour3-SAE.icns $Resources/appIcon.icns
259 elif test x$MIXBUS32C != x ; then
260 cp Mixbus32C.icns $Resources/appIcon.icns
261 elif test x$MIXBUS != x ; then
262 cp Mixbus.icns $Resources/appIcon.icns
264 cp Ardour.icns $Resources/appIcon.icns
266 cp typeArdour.icns $Resources/
268 set +e # things below are not error-free (optional files etc) :(
271 if test x$WITH_NLS != x ; then
272 echo "NLS support ..."
273 echo "I hope you remembered to run waf i18n"
276 for pkg in gtk2_ardour libs/ardour libs/gtkmm2ext ; do
277 files=`find ../../$pkg -name "*.mo"`
280 # the package name is appended with a number so that
281 # it can be parallel installed during a regular install
282 # with older (and newer) versions. it is just the major
283 # number of the release (i.e. leading digits)
286 vsuffix=`echo $release_version | sed 's/^\([0-9][0-9]*\).*/\1/'`
288 if [ -z "$files" ]; then
290 echo "!!!! WARNING !!!! - Did not find any .mo files in ../../$pkg"
297 lang=`basename $file | sed 's/\.mo//'`
298 mkdir -p $Locale/$lang/LC_MESSAGES
299 cp $file $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
300 echo copy $file to $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
301 if echo $LINGUAS | grep $lang >/dev/null 2>&1 ; then
304 LINGUAS="$LINGUAS $lang"
311 if [ -d $GTKSTACK_ROOT/share/locale/$l ] ; then
312 echo "Copying GTK i18n files for $l..."
313 cp -r $GTKSTACK_ROOT/share/locale/$l $Locale
315 # try with just the language spec
316 just_lang=`echo $l | sed 's/_[A-Z][A-Z]$//'`
317 if [ -d $GTKSTACK_ROOT/share/locale/$just_lang ] ; then
318 echo "Copying GTK i18n files for $l..."
319 cp -r $GTKSTACK_ROOT/share/locale/$just_lang $Locale
324 echo "Skipping NLS support"
328 # Copy stuff that may be dynamically loaded
331 cp -R $GTKSTACK_ROOT/etc/* $Etc
332 cp -R $GTKSTACK_ROOT/lib/charset.alias $Resources
334 # We rely on clearlooks, so include a version from our own build tree
335 # this one is special - we will set GTK_PATH to $Frameworks/gtkengines
337 GTK_ENGINE_DIR=$Frameworks/gtkengines/engines
338 mkdir -p $GTK_ENGINE_DIR
340 echo "Copying GTK engines ..."
341 cp $BUILD_ROOT/libs/clearlooks-newer/libclearlooks.dylib $Frameworks
342 (cd $GTK_ENGINE_DIR && ln -s ../../libclearlooks.dylib . && ln -s ../../libclearlooks.dylib libclearlooks.so)
344 cp $GTKSTACK_ROOT/lib/gtk-2.0/2.10.0/engines/libpixmap.so $Frameworks
345 (cd $GTK_ENGINE_DIR && ln -s ../../libpixmap.so)
348 # Control Surface shared libraries
349 cp $BUILD_ROOT/libs/surfaces/*/libardour_*.dylib $Surfaces
350 cp $BUILD_ROOT/libs/surfaces/control_protocol/libardourcp*.dylib $Frameworks
353 cp $BUILD_ROOT/libs/panners/*/lib*.dylib $Panners
356 for backend in jack wavesaudio dummy coreaudio; do
357 cp $BUILD_ROOT/libs/backends/$backend/lib*.dylib $Backends
360 # Export Formats/Presets
361 for f in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do
362 cp "$f" $ExportFormats ;
365 # Session and Route templates
366 #for f in $BUILD_ROOT/../templates/* ; do
367 # if [ -d "$f" ] ; then
368 # cp -r "$f" $Templates ;
373 # got to be careful with names here
374 for x in $BUILD_ROOT/../midi_maps/*.map ; do
379 # got to be careful with names here
380 for x in $BUILD_ROOT/../patchfiles/*.midnam ; do
385 # got to be careful with names here
386 for x in $BUILD_ROOT/../scripts/*.lua ; do
388 if test "${BN:0:1}" = "_"; then
395 # got to be careful with names here
396 for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
397 cp "$x" $MackieControl
400 # VAMP plugins that we use
401 cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
403 # Suil modules (new dir 'build-stack')
404 if test -d $GTKSTACK_ROOT/lib/suil-0/ ; then
405 cp $GTKSTACK_ROOT/lib/suil-0/lib* $Frameworks
408 # Suil modules (old dir 'build-ardour-stack')
409 if test -d $ARDOURSTACK_ROOT/lib/suil-0/ ; then
410 cp $ARDOURSTACK_ROOT/lib/suil-0/lib* $Frameworks
413 # VST scanner app and wrapper script, if they exist
414 if test -d $BUILD_ROOT/libs/fst ; then
415 cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $Frameworks/
419 if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
420 mkdir -p $Frameworks/vfork
421 cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $Frameworks/
425 HAVE_SESSION_UTILS=false
426 for file in $BUILD_ROOT/session_utils/${lower_case_appname}${major_version}-*; do
428 cp -v $file $Frameworks/
429 if test x$STRIP = xall ; then
430 strip -s $Frameworks/${BN}
432 ln -s ../lib/ardour-util.sh ${APPROOT}/MacOS/${BN}
433 HAVE_SESSION_UTILS=true
436 # TODO check if this is still needed, even when building on 10.5
437 if file $BUILD_ROOT/gtk2_ardour/ardour-$release_version | grep -q ppc; then
438 STDCPP='|libstdc\+\+'
445 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Panners/*.dylib $Backends/*.dylib $Surfaces/*.dylib $Plugins/*.so ; do
446 if ! file $file | grep -qs Mach-O ; then
449 # libffi contains "S" (other section symbols) that should not be stripped.
450 if [[ $file == *"libffi"* ]] ; then
454 if test x$STRIP != x ; then
455 strip -u -r -arch all $file &>/dev/null
458 deps=`otool -L $file | awk '{print $1}' | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | grep -v 'libjack\.' | grep -v "$(basename $file)"`
460 for dep in $deps ; do
462 if ! test -f $Frameworks/$base; then
463 if echo $dep | grep -sq '^libs' ; then
464 cp $BUILD_ROOT/$dep $Frameworks
472 if test x$missing = xfalse ; then
473 # everything has been found
479 echo "Copying other stuff to $APPDIR ..."
481 cp $BUILD_ROOT/gtk2_ardour/ardour.keys $Resources
482 cp $BUILD_ROOT/gtk2_ardour/ardour.menus $Resources
483 cp $BUILD_ROOT/gtk2_ardour/default_ui_config $Resources
484 cp $BUILD_ROOT/gtk2_ardour/clearlooks.rc $Resources
486 # Copied directly from source tree
488 mkdir ${Resources}/icons
489 mkdir ${Resources}/resources
490 cp ../../system_config $Resources/system_config
491 cp ../../instant.xml $Resources/instant.xml
492 cp ../../gtk2_ardour/icons/*.png ${Resources}/icons/
493 cp -r ../../gtk2_ardour/icons/cursor_* ${Resources}/icons/
494 cp ../../gtk2_ardour/ArdourMono.ttf $Shared
495 cp ../../gtk2_ardour/resources/${PRODUCT_PKG_DIR}-* ${Resources}/resources/
498 # Themes: only install those named for this app
499 cp ../../gtk2_ardour/themes/*-${lower_case_appname}.colors $Themes
501 # go through and recursively remove any .svn dirs in the bundle
502 for svndir in `find $APPDIR -name .svn -type dir`; do
506 # session utils start script
507 if test "$HAVE_SESSION_UTILS" = true ; then
508 cat >> $Frameworks/ardour-util.sh << EOF
511 BIN_DIR=\$(dirname "\$0")
512 BUNDLE_DIR=\$(dirname "\$BIN_DIR")
514 export ARDOUR_DATA_PATH="\$BUNDLE_DIR/share"
515 export ARDOUR_CONFIG_PATH="\$BUNDLE_DIR/etc"
516 export ARDOUR_DLL_PATH="\$BUNDLE_DIR/lib"
517 export VAMP_PATH="\$BUNDLE_DIR/lib"\${VAMP_PATH:+:\$VAMP_PATH}
519 SELF=\$(basename "\$0")
520 exec "\$BUNDLE_DIR/lib/\$SELF" "\$@"
522 chmod +x $Frameworks/ardour-util.sh
526 # install bundled LV2s to <app>/Contents/lib/LV2/
527 cp -R $BUILD_ROOT/libs/LV2 $Frameworks/
529 # lv2 core, classifications etc - TODO check if we need the complete LV2 ontology
530 if test -d $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
531 cp -R $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
532 elif test -d $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
533 cp -R $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
537 # now fix up the executables
538 echo "Fixing up executable dependency names ..."
539 executables=$MAIN_EXECUTABLE
540 if test x$SAE != x ; then
541 executables="$executables"
543 if test "$HAVE_SESSION_UTILS" = true ; then
544 for file in $Frameworks/${lower_case_appname}${major_version}-*; do
546 executables="$executables ../lib/${BN}"
550 if test -f "$Frameworks/ardour-vst-scanner"; then
551 executables="$executables ../lib/ardour-vst-scanner"
554 for exe in $executables; do
555 echo "Processing Executable: $exe"
556 EXE=$APPROOT/MacOS/$exe
558 for lib in `otool -L $EXE | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
560 changes="$changes -change $lib @executable_path/../lib/$base"
562 if test "x$changes" != "x" ; then
563 install_name_tool $changes $EXE
567 echo "Fixing up library names ..."
568 # now do the same for all the libraries we include
569 for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners $Backends $Frameworks/LV2/* ; do
571 libbase=`basename $libdir`
573 for dylib in $libdir/*.dylib $libdir/*.so ; do
577 if test -L $dylib ; then
581 # change all the dependencies
584 for lib in `otool -L $dylib | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
586 if echo $lib | grep -s libbase; then
587 changes="$changes -change $lib @executable_path/../$libbase/$base"
589 changes="$changes -change $lib @executable_path/../lib/$base"
593 if test "x$changes" != x ; then
594 if install_name_tool $changes $dylib ; then
601 # now the change what the library thinks its own name is
603 base=`basename $dylib`
604 install_name_tool -id @executable_path/../$libbase/$base $dylib
609 # and now ... the DMG
612 rm -rf $PRODUCT_PKG_DIR
613 mkdir $PRODUCT_PKG_DIR
618 if [ x$SAE != x ] ; then
622 echo "Creating SAE packaging directory"
623 mv $APPDIR $PRODUCT_PKG_DIR/Ardour3-SAE.app
624 cp HowToInstallArdourSAE.pdf "$PRODUCT_PKG_DIR/How To Install Ardour SAE.pdf"
625 cp SAE-de-keypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts (keypad).pdf"
626 cp SAE-de-nokeypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts.pdf"
628 elif [ x$MIXBUS != x ] ; then
632 echo "Creating Mixbus packaging directory"
633 mv $APPDIR $PRODUCT_PKG_DIR/
634 DMGBACKGROUND=dmgbgMB
637 echo "Creating $APPNAME packaging directory"
638 mv $APPDIR $PRODUCT_PKG_DIR/
642 if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
645 elif file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q ppc; then
653 if test x$WITH_HARRISON_LV2 != x ; then
654 curl -s -S --fail -# \
655 -z "${CACHEDIR}/${HARRISONLV2}.${OSX_BENSID}.zip" \
656 -o "${CACHEDIR}/${HARRISONLV2}.${OSX_BENSID}.zip" \
657 "${HARRISONDSPURL}/${HARRISONLV2}.${OSX_BENSID}.zip"
659 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
660 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
661 "${CACHEDIR}/${HARRISONLV2}.${OSX_BENSID}.zip"
664 if test x$WITH_HARVID != x ; then
665 echo "installing video tools.."
666 HARVID_VERSION=$(curl -s -S http://ardour.org/files/video-tools/harvid_version.txt)
667 XJADEO_VERSION=$(curl -s -S http://ardour.org/files/video-tools/xjadeo_version.txt)
669 echo "copying harvid and xjadeo ..."
672 rsync://ardour.org/video-tools/harvid-osx-${HARVID_VERSION}.tgz \
673 "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz"
676 rsync://ardour.org/video-tools/jadeo-${XJADEO_VERSION:1}.dmg \
677 "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg"
680 -C $PRODUCT_PKG_DIR/$APPROOT \
681 -f "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz" || exit 1
683 JADEO=$(hdiutil attach "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg" | grep Apple_HFS | grep dev/ | cut -f 3)
684 cp -r "${JADEO}/Jadeo.app" "$PRODUCT_PKG_DIR/"
685 hdiutil detach "${JADEO}"
687 XJCONTENT=${PRODUCT_PKG_DIR}/Jadeo.app/Contents
688 HVLIBS=${PRODUCT_PKG_DIR}/$APPROOT/lib/harvid
690 for file in ${XJCONTENT}/MacOS/Jadeo-bin ${XJCONTENT}/Frameworks/*.dylib ${HVLIBS}/*.dylib ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/*harvid* ; do
691 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin && \
692 mv ${file}.thin ${file}
696 YPOS=$[ $DMGWINBOTTOM - 300 ]
697 XJADEOPOS="set position of item \"Jadeo.app\" of container window to {310, ${YPOS}}"
699 DMGBACKGROUND=${DMGBACKGROUND}xj
702 ################################################################################
703 ### Mixbus plugins, etc
704 if test x$WITH_X42_LV2 != x ; then
705 echo "bundling x42 plugins"
706 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
708 for proj in x42-meters x42-midifilter x42-midimap x42-stereoroute x42-eq setBfree; do
709 X42_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/${proj}.latest.txt)
710 rsync -a -q --partial \
711 rsync://x42-plugins.com/x42/osx/${proj}-lv2-osx-${X42_VERSION}.zip \
712 "$CACHEDIR/${proj}-lv2-osx-${X42_VERSION}.zip"
713 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
714 "$CACHEDIR/${proj}-lv2-osx-${X42_VERSION}.zip"
717 for file in ${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/*/*.dylib ; do
718 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin
719 mv ${file}.thin ${file}
723 if test -n "$MIXBUS"; then
724 echo "deploying harrison channelstrip for $OSX_BENSID"
726 mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip"
728 curl -s -S --fail -# \
729 -z "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
730 -o "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
731 "${HARRISONDSPURL}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so"
733 cp "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
734 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip/${HARRISONCHANNELSTRIP}.so"
736 echo "deploying harrison vamp plugins for $OSX_BENSID"
738 curl -s -S --fail -# \
739 -z "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
740 -o "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
741 "${HARRISONDSPURL}/harrison_vamp.${OSX_BENSID}.dylib"
743 cp "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
744 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/harrison_vamp.dylib"
747 ################################################################################
749 if test x$DEMO_SESSION_URL != x ; then
750 mkdir -p $Shared/sessions
751 DEMO_SESSIONS=$(curl -s -S --fail $DEMO_SESSION_URL/index.txt)
752 for demo in $DEMO_SESSIONS; do
753 curl -s -S --fail -# -o $Shared/sessions/$demo $DEMO_SESSION_URL/$demo
757 ################################################################################
759 ( cd $PRODUCT_PKG_DIR ; find . ) > file_list.txt
761 echo "Building DMG ..."
763 # UC_DMG=$APPNAME-${release_version}-UC.dmg
764 # FINAL_DMG=$APPNAME-${release_version}.dmg
766 if [ x$DEBUG = xT ]; then
767 UC_DMG=$APPNAME-$release_version-dbg.dmg
769 UC_DMG=$APPNAME-$release_version.dmg
771 VOLNAME=$APPNAME-$release_version
773 MNTPATH=`mktemp -d -t ardourimg`
774 TMPDMG=`mktemp -t ardour`
775 ICNSTMP=`mktemp -t ardouricon`
777 DMGMEGABYTES=$[ `du -sk "$PRODUCT_PKG_DIR" | cut -f 1` * 1024 / 1048576 + $EXTRA_SPACE_MB ]
779 echo "DMG MB = " $DMGMEGABYTES
781 rm -f $UC_DMG "$TMPDMG" "${TMPDMG}.dmg" "$ICNSTMP"
785 TMPDMG="${TMPDMG}.dmg"
787 trap "rm -rf $MNTPATH $TMPDMG ${TMPDMG}.dmg $ICNSTMP" EXIT
789 hdiutil create -megabytes $DMGMEGABYTES -fs HFS+ -volname "${VOLNAME}" "$TMPDMG"
790 DiskDevice=$(hdid -nomount "$TMPDMG" | grep Apple_HFS | cut -f 1 -d ' ')
791 mount -t hfs -o nobrowse "${DiskDevice}" "${MNTPATH}"
793 cp -r ${PRODUCT_PKG_DIR}/* "${MNTPATH}" || exit
794 mkdir "${MNTPATH}/.background"
795 cp -vi ${DMGBACKGROUND}.png "${MNTPATH}/.background/dmgbg.png"
797 echo "setting DMG background ..."
799 if test $(sw_vers -productVersion | cut -d '.' -f 2) -lt 9; then
803 # OSX 10.9.X and later
804 DISKNAME=`basename "${MNTPATH}"`
808 tell application "Finder"
810 tell disk "${DISKNAME}"
813 set current view of container window to icon view
814 set toolbar visible of container window to false
815 set statusbar visible of container window to false
816 set the bounds of container window to {400, 200, 800, ${DMGWINBOTTOM}}
817 set theViewOptions to the icon view options of container window
818 set arrangement of theViewOptions to not arranged
819 set icon size of theViewOptions to 64
820 set background picture of theViewOptions to file ".background:dmgbg.png"
821 make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
822 set position of item "${APPDIR}" of container window to {90, 100}
823 set position of item "Applications" of container window to {310, 100}
829 update without registering applications
836 chmod -Rf go-w "${MNTPATH}"
840 echo "compressing Image ..."
842 # Umount the image ('eject' above may already have done that)
843 umount "${DiskDevice}" || true
844 hdiutil eject "${DiskDevice}" || true
845 # Create a read-only version, use zlib compression
846 hdiutil convert -format UDZO "${TMPDMG}" -imagekey zlib-level=9 -o "${UC_DMG}"
848 if test $(sw_vers -productVersion | cut -d '.' -f 2) -gt 5; then
849 echo "setting file icon ..."
851 cp ${PRODUCT_PKG_DIR}/$Resources/appIcon.icns ${ICNSTMP}.icns
852 sips -i ${ICNSTMP}.icns
853 DeRez -only icns ${ICNSTMP}.icns > ${ICNSTMP}.rsrc
854 Rez -append ${ICNSTMP}.rsrc -o "$UC_DMG"
855 SetFile -a C "$UC_DMG"
857 rm ${ICNSTMP}.icns ${ICNSTMP}.rsrc
860 rm -rf ${PRODUCT_PKG_DIR}
863 echo "packaging suceeded."