Fix test compilation error.
[ardour.git] / tools / osx_packaging / osx_build
1 #!/bin/bash
2
3 set -e
4
5 # script for pulling together a MacOSX app bundle.
6
7 GTKSTACK_ROOT=$HOME/gtk/inst
8 ARDOURSTACK_ROOT=$HOME/a3/inst
9 BUILD_ROOT=../../build
10
11 # where harvid and xjadeo binaries are cached
12 if test -z "$CACHEDIR" -o ! -d "$CACHEDIR"; then
13         CACHEDIR=/var/tmp
14 fi
15 mkdir -p "$CACHEDIR"
16
17 SAE=
18 MIXBUS=
19 MIXBUS32C=
20 WITH_HARVID=1
21 WITH_HARRISON_LV2=
22 WITH_X42_LV2=
23 WITH_LADSPA=1
24 STRIP=1
25 PRINT_SYSDEPS=
26 WITH_NLS=
27
28 : ${HARRISONCHANNELSTRIP=harrison_channelstrip}
29
30 . ../define_versions.sh
31
32 while [ $# -gt 0 ] ; do
33     echo "arg = $1"
34     case $1 in
35
36         #
37         # top level build targets
38         #
39
40         --sae)
41                 SAE=1 ;
42                 WITH_LADSPA=1;
43                 STRIP= ;
44                 PRODUCT_PKG_DIR=ArdourSAE ;
45                 APPNAME=Ardour ;
46                 shift ;;
47         --mixbus) MIXBUS=1;
48                 WITH_HARRISON_LV2=1 ;
49                 WITH_X42_LV2=1 ;
50                 WITH_NLS=1 ;
51                 SAE= ;
52                 WITH_LADSPA=;
53                 STRIP= ;
54                 PRODUCT_PKG_DIR=Mixbus;
55                 APPNAME=Mixbus ;
56                 shift ;;
57         --mixbus32c) MIXBUS=1;
58                 MIXBUS32C=1;
59                 WITH_HARRISON_LV2=1 ;
60                 WITH_X42_LV2=1 ;
61                 WITH_NLS=1 ;
62                 SAE= ;
63                 WITH_LADSPA=;
64                 STRIP= ;
65                 PRODUCT_PKG_DIR=Mixbus32C;
66                 APPNAME=Mixbus32C-${major_version} ;
67                 major_version=""
68                 shift ;;
69         --public)
70                 SAE= ;
71                 WITH_LADSPA=1;
72                 WITH_HARRISON_LV2=1 ;
73                 WITH_X42_LV2=1 ;
74                 PRODUCT_PKG_DIR=Ardour;
75                 APPNAME=Ardour ;
76                 shift ;;
77         --allinone) SAE= ;
78                 WITH_LADSPA=1;
79                 STRIP= ;
80                 PRODUCT_PKG_DIR=Ardour ;
81                 shift ;;
82         --test) SAE= ; WITH_LADSPA=; STRIP= ; shift ;;
83
84         #
85         # specific build flags
86         #
87
88         --noharvid) WITH_HARVID= ; shift ;;
89         --noladspa) WITH_LADSPA= ; shift ;;
90         --nostrip) STRIP= ; shift ;;
91         --sysdeps) PRINT_SYSDEPS=1; shift ;;
92         --nls) WITH_NLS=1 ; shift ;;
93         --chanstrip) HARRISONCHANNELSTRIP=$2 ; shift; shift ;;
94     esac
95 done
96
97 if test -z "$PRODUCT_PKG_DIR" -o -z "$APPNAME"; then
98         echo "application or product-name was not specified"
99         exit 1
100 fi
101
102 echo "Version is $release_version"
103 if [ "x$commit" != "x" ] ; then
104     info_string="$release_version ($commit) built on `hostname` by `whoami` on `date`"
105 else
106     info_string="$release_version built on `hostname` by `whoami` on `date`"
107 fi
108 echo "Info string is $info_string"
109
110 if [ x$DEBUG = xT ]; then
111         STRIP=
112         echo "Debug build, strip disabled"
113 else
114         if test x$STRIP != x ; then
115                 echo "No debug build, strip enabled"
116         else
117                 echo "No debug build, but strip disabled."
118         fi
119 fi
120
121 # setup directory structure
122
123 APPDIR=${APPNAME}${major_version}.app
124 APPROOT=$APPDIR/Contents
125 Frameworks=$APPROOT/lib
126 Resources=$APPROOT/Resources
127 #
128 # Since this is OS X, don't try to distinguish between etc and shared
129 # (machine dependent and independent data) - just put everything
130 # into Resources.
131
132 Shared=$Resources
133 Etc=$Resources
134 Locale=$Resources/locale
135 #
136 # Bundled Plugins live in a top level folder
137
138 Plugins=$APPROOT/Plugins
139 Surfaces=$Frameworks/surfaces
140 Panners=$Frameworks/panners
141 Backends=$Frameworks/backends
142 MidiMaps=$Shared/midi_maps
143 ExportFormats=$Shared/export
144 Templates=$Shared/templates
145 PatchFiles=$Shared/patchfiles
146 LuaScripts=$Shared/scripts
147 MackieControl=$Shared/mcp
148 Themes=$Shared/themes
149
150 if [ x$PRINT_SYSDEPS != x ] ; then
151 #
152 # print system dependencies
153 #
154
155 for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Plugins/*.so ; do
156         if ! file $file | grep -qs Mach-O ; then
157             continue
158         fi
159         otool -L $file | awk '{print $1}' | egrep -v "(^@executable_path|^Ardour[0-9][.0-9]*.app)" 
160     done | sort | uniq
161     exit 0
162 fi
163
164 echo "Removing old $APPDIR tree ..."
165
166 rm -rf $APPDIR
167
168 echo "Building new app directory structure ..."
169
170 # only bother to make the longest paths
171
172 mkdir -p $APPROOT/MacOS
173 mkdir -p $APPROOT/Resources
174 mkdir -p $Plugins
175 mkdir -p $Surfaces
176 mkdir -p $Panners
177 mkdir -p $Backends
178 mkdir -p $MidiMaps
179 mkdir -p $ExportFormats
180 mkdir -p $Templates
181 mkdir -p $Frameworks/modules
182 mkdir -p $Etc
183 mkdir -p $MackieControl
184 mkdir -p $PatchFiles
185 mkdir -p $LuaScripts
186 mkdir -p $Themes
187
188 # maybe set variables
189 env=""
190 if test x$SAE != x ; then
191     appname="Ardour${major_version}-SAE"
192     EXECUTABLE=${appname}
193     env="$env<key>ARDOUR_SAE</key><string>true</string>"
194     #
195     # current default for SAE version is German keyboard layout without a keypad
196     #
197     env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>de-nokeypad</string>"
198     env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui_sae.conf</string>"
199 elif test x$MIXBUS != x ; then
200     appname=$APPNAME
201     EXECUTABLE=${appname}${major_version}
202     env="$env<key>ARDOUR_MIXBUS</key><string>true</string>"
203     #
204     # current default for MIXBUS version is US keyboard layout without a keypad
205     #
206     env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>us-nokeypad</string>"
207     env="$env<key>ARDOUR_UI_CONF</key><string>ardour3_ui.conf</string>"
208 else
209     appname="Ardour${major_version}"
210     EXECUTABLE=${appname}
211 fi
212
213 #
214 # if we're not going to bundle JACK, make sure we can find
215 # jack in the places where it might be
216 #
217
218 env="$env<key>PATH</key><string>/usr/local/bin:/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>"
219 env="$env<key>DYLIB_FALLBACK_LIBRARY_PATH</key><string>/usr/local/lib:/opt/lib</string>"
220
221 env="<key>LSEnvironment</key><dict>$env<key>ARDOUR_BUNDLED</key><string>true</string></dict>"
222
223
224 # edit plist
225 sed -e "s?@ENV@?$env?g" \
226     -e "s?@VERSION@?$release_version?g" \
227     -e "s?@INFOSTRING@?$info_string?g" \
228     -e "s?@IDSUFFIX@?$EXECUTABLE?g" \
229     -e "s?@BUNDLENAME@?${APPNAME}${major_version}?g" \
230     -e "s?@EXECUTABLE@?$EXECUTABLE?g" < Info.plist.in > Info.plist
231 # and plist strings
232 sed -e "s?@APPNAME@?$appname?" \
233     -e "s?@ENV@?$env?g" \
234     -e "s?@VERSION@?$release_version?g" \
235     -e "s?@INFOSTRING@?$info_string?g" < InfoPlist.strings.in > Resources/InfoPlist.strings || exit 1
236
237 # copy static files
238
239 cp Info.plist $APPROOT
240 cp -R Resources $APPROOT
241
242 # ..and clean up
243 rm -f Info.plist
244 rm -f Resources/InfoPlist.strings
245
246 #
247 # if we build a bundle without jack, then
248 # make the Ardour executable a helper
249 # script that checks to see if JACK is
250 # installed.
251 #
252
253 cp startup_script $APPROOT/MacOS/$EXECUTABLE
254 chmod 775 $APPROOT/MacOS/$EXECUTABLE
255 MAIN_EXECUTABLE=Ardour.bin  ## used in startup_script
256
257 echo "Copying ardour executable ...."
258 cp $BUILD_ROOT/gtk2_ardour/ardour-$release_version $APPROOT/MacOS/$MAIN_EXECUTABLE
259 if test x$SAE != x ; then
260     # cp $BUILD_ROOT/gtk2_ardour/evtest $APPROOT/MacOS/gtkevents
261     cp  Ardour3-SAE.icns $Resources/appIcon.icns
262 elif test x$MIXBUS32C != x ; then
263     cp  Mixbus32C.icns $Resources/appIcon.icns
264 elif test x$MIXBUS != x ; then
265     cp  Mixbus.icns $Resources/appIcon.icns
266 else
267     cp  Ardour.icns $Resources/appIcon.icns
268 fi
269 cp  typeArdour.icns $Resources/
270
271 set +e # things below are not error-free (optional files etc) :(
272
273 # copy locale files
274 if test x$WITH_NLS != x ; then
275     echo "NLS support ..."
276     echo "I hope you remembered to run waf i18n"
277     LINGUAS=
278
279     for pkg in gtk2_ardour libs/ardour libs/gtkmm2ext ; do 
280         files=`find ../../$pkg -name "*.mo"`
281         
282             #
283             # the package name is appended with a number so that
284             # it can be parallel installed during a regular install
285             # with older (and newer) versions. it is just the major
286             # number of the release (i.e. leading digits)
287             #
288         
289         vsuffix=`echo $release_version | sed 's/^\([0-9][0-9]*\).*/\1/'`
290         
291         if [ -z "$files" ]; then
292             echo ""
293             echo "!!!! WARNING !!!! - Did not find any .mo files in ../../$pkg"
294             echo ""
295         fi
296         
297         for file in $files 
298         do
299             echo $file
300             lang=`basename $file | sed 's/\.mo//'`
301             mkdir -p $Locale/$lang/LC_MESSAGES
302             cp $file $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
303             echo copy $file to $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
304             if echo $LINGUAS | grep $lang >/dev/null 2>&1 ; then
305                 :
306             else 
307                 LINGUAS="$LINGUAS $lang"
308             fi
309         done
310     done
311
312     for l in $LINGUAS
313     do
314       if [ -d $GTKSTACK_ROOT/share/locale/$l ] ; then
315           echo "Copying GTK i18n files for $l..."
316           cp -r $GTKSTACK_ROOT/share/locale/$l $Locale
317       else
318           # try with just the language spec
319           just_lang=`echo $l | sed 's/_[A-Z][A-Z]$//'`
320           if [ -d $GTKSTACK_ROOT/share/locale/$just_lang ] ; then
321               echo "Copying GTK i18n files for $l..."
322               cp -r $GTKSTACK_ROOT/share/locale/$just_lang $Locale
323           fi
324       fi
325     done
326 else
327     echo "Skipping NLS support"
328 fi
329
330 #
331 # Copy stuff that may be dynamically loaded
332
333
334 cp -R $GTKSTACK_ROOT/etc/* $Etc
335 cp -R $GTKSTACK_ROOT/lib/charset.alias $Resources
336
337 # We rely on clearlooks, so include a version from our own build tree
338 # this one is special - we will set GTK_PATH to $Frameworks/gtkengines
339
340 GTK_ENGINE_DIR=$Frameworks/gtkengines/engines
341 mkdir -p $GTK_ENGINE_DIR
342
343 echo "Copying GTK engines ..."
344 cp $BUILD_ROOT/libs/clearlooks-newer/libclearlooks.dylib $Frameworks
345 (cd $GTK_ENGINE_DIR && ln -s ../../libclearlooks.dylib . && ln -s ../../libclearlooks.dylib libclearlooks.so)
346
347 cp $GTKSTACK_ROOT/lib/gtk-2.0/2.10.0/engines/libpixmap.so $Frameworks
348 (cd $GTK_ENGINE_DIR && ln -s ../../libpixmap.so)
349
350
351 if test x$WITH_LADSPA != x ; then
352     if test x$SAE != x ; then
353         plugdir=sae_ladspa
354     elif test x$MIXBUS != x ; then
355         plugdir=mixbus_ladspa
356     else
357         plugdir=ladspa
358     fi
359     if [ -d $plugdir -a "x$(ls $plugdir)" != x ] ; then 
360         echo "Copying `ls $plugdir | wc -l` plugins ..."
361         cp -r $plugdir/* $Plugins
362     fi
363 fi
364
365 # Control Surface shared libraries
366 cp $BUILD_ROOT/libs/surfaces/*/libardour_*.dylib $Surfaces
367 cp $BUILD_ROOT/libs/surfaces/control_protocol/libardourcp*.dylib $Frameworks
368
369 # Panners
370 cp $BUILD_ROOT/libs/panners/*/lib*.dylib $Panners
371
372 # Backends
373 for backend in jack wavesaudio dummy coreaudio; do
374     cp $BUILD_ROOT/libs/backends/$backend/lib*.dylib $Backends
375 done
376
377 # Export Formats/Presets
378 for f in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do 
379     cp "$f" $ExportFormats ; 
380 done
381
382 # Session and Route templates
383 #for f in $BUILD_ROOT/../templates/* ; do 
384 #    if [ -d "$f" ] ; then
385 #        cp -r "$f" $Templates ; 
386 #    fi
387 #done
388
389 # MidiMaps
390 # got to be careful with names here
391 for x in $BUILD_ROOT/../midi_maps/*.map ; do
392     cp "$x" $MidiMaps
393 done
394
395 # MIDNAM Patch Files
396 # got to be careful with names here
397 for x in $BUILD_ROOT/../patchfiles/*.midnam ; do
398     cp "$x" $PatchFiles
399 done
400
401 # Lua Script Files
402 # got to be careful with names here
403 for x in $BUILD_ROOT/../scripts/*.lua ; do
404     cp "$x" $LuaScripts
405 done
406
407 # MackieControl data
408 # got to be careful with names here
409 for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
410     cp "$x" $MackieControl
411 done
412
413 # VAMP plugins that we use
414 cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
415
416 # Suil modules (new dir 'build-stack')
417 if test -d $GTKSTACK_ROOT/lib/suil-0/ ; then
418     cp $GTKSTACK_ROOT/lib/suil-0/lib* $Frameworks
419 fi
420
421 # Suil modules (old dir 'build-ardour-stack')
422 if test -d $ARDOURSTACK_ROOT/lib/suil-0/ ; then
423     cp $ARDOURSTACK_ROOT/lib/suil-0/lib* $Frameworks
424 fi
425
426 # VST scanner app and wrapper script, if they exist
427 if test -d $BUILD_ROOT/libs/fst ; then
428     cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $Frameworks/
429 fi
430
431 # vfork wrapper
432 if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
433     mkdir -p $Frameworks/vfork
434     cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $Frameworks/
435 fi
436
437 # TODO check if this is still needed, even when building on 10.5
438 if file $BUILD_ROOT/gtk2_ardour/ardour-$release_version | grep -q ppc; then
439 STDCPP='|libstdc\+\+'
440 else
441 STDCPP=
442 fi
443
444 while [ true ] ; do 
445     missing=false
446     for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Panners/*.dylib $Backends/*.dylib $Surfaces/*.dylib $Plugins/*.so ; do 
447         if ! file $file | grep -qs Mach-O ; then
448             continue
449         fi
450         # libffi contains "S" (other section symbols) that should not be stripped.
451         if [[ $file == *"libffi"* ]] ; then
452             continue
453         fi
454
455         if test x$STRIP != x ; then
456                 strip -u -r -arch all $file &>/dev/null
457         fi
458
459         deps=`otool -L $file | awk '{print $1}' | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | grep -v 'libjack\.' | grep -v "$(basename $file)"`
460         # echo -n "."
461         for dep in $deps ; do
462             base=`basename $dep`
463             if ! test -f $Frameworks/$base; then
464                 if echo $dep | grep -sq '^libs' ; then
465                     cp $BUILD_ROOT/$dep $Frameworks
466                 else
467                     cp $dep $Frameworks
468                 fi
469                 missing=true
470             fi
471         done
472     done
473     if test x$missing = xfalse ; then
474         # everything has been found
475         break
476     fi
477 done
478 echo
479
480 echo "Copying other stuff to $APPDIR  ..."
481
482 cp $BUILD_ROOT/gtk2_ardour/ardour.keys  $Resources
483 cp $BUILD_ROOT/gtk2_ardour/ardour.menus $Resources
484 cp $BUILD_ROOT/gtk2_ardour/default_ui_config $Resources
485 cp $BUILD_ROOT/gtk2_ardour/clearlooks.rc $Resources
486
487 # Copied directly from source tree
488
489 mkdir ${Resources}/icons
490 mkdir ${Resources}/resources
491 cp ../../system_config $Resources/system_config
492 cp ../../instant.xml $Resources/instant.xml
493 cp ../../gtk2_ardour/icons/*.png ${Resources}/icons/
494 cp -r ../../gtk2_ardour/icons/cursor_* ${Resources}/icons/
495 cp ../../gtk2_ardour/ArdourMono.ttf $Shared
496 cp ../../gtk2_ardour/resources/${PRODUCT_PKG_DIR}-* ${Resources}/resources/
497
498
499 # Themes: only install those named for this app
500 lower_case_appname=`echo $APPNAME | tr '[:upper:]' '[:lower:]'`
501 cp ../../gtk2_ardour/themes/*-${lower_case_appname}.colors $Themes
502
503 # go through and recursively remove any .svn dirs in the bundle
504 for svndir in `find $APPDIR -name .svn -type dir`; do
505     rm -rf $svndir
506 done
507
508 # install bundled LV2s to <app>/Contents/lib/LV2/
509 cp -R $BUILD_ROOT/libs/LV2 $Frameworks/
510
511 # lv2 core, classifications etc - TODO check if we need the complete LV2 ontology
512 if test -d $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
513         cp -R $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
514 elif test -d $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
515         cp -R $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
516 fi
517
518
519 # now fix up the executables
520 echo "Fixing up executable dependency names ..."
521 executables=$MAIN_EXECUTABLE
522 if test x$SAE != x ; then
523     executables="$executables"
524 fi
525
526 for exe in $executables; do
527     EXE=$APPROOT/MacOS/$exe
528     changes=""
529     for lib in `otool -L $EXE | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
530       base=`basename $lib`
531       changes="$changes -change $lib @executable_path/../lib/$base"
532     done
533     if test "x$changes" != "x" ; then
534         install_name_tool $changes $EXE
535     fi
536 done
537
538 echo "Fixing up library names ..."
539 # now do the same for all the libraries we include
540 for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners $Backends $Frameworks/LV2/* ; do
541
542     libbase=`basename $libdir`
543     
544     for dylib in $libdir/*.dylib $libdir/*.so ; do
545         
546        # skip symlinks
547         
548         if test -L $dylib ; then
549             continue
550         fi
551         
552         # change all the dependencies
553         
554         changes=""
555         for lib in `otool -L $dylib | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
556             base=`basename $lib`
557             if echo $lib | grep -s libbase; then
558                 changes="$changes -change $lib @executable_path/../$libbase/$base"
559             else
560                 changes="$changes -change $lib @executable_path/../lib/$base"
561             fi
562         done
563         
564         if test "x$changes" != x ; then
565             if  install_name_tool $changes $dylib ; then
566                 :
567             else
568                 exit 1
569             fi
570         fi
571         
572         # now the change what the library thinks its own name is
573         
574         base=`basename $dylib`
575         install_name_tool -id @executable_path/../$libbase/$base $dylib
576     done
577 done
578
579 #
580 # and now ... the DMG
581
582
583 rm -rf $PRODUCT_PKG_DIR
584 mkdir $PRODUCT_PKG_DIR
585
586 DMGWINBOTTOM=440
587 DMGBACKGROUND=dmgbg
588
589 if [ x$SAE != x ] ; then
590         
591     # SAE packaging
592     
593     echo "Creating SAE packaging directory"
594     mv $APPDIR $PRODUCT_PKG_DIR/Ardour3-SAE.app
595     cp HowToInstallArdourSAE.pdf "$PRODUCT_PKG_DIR/How To Install Ardour SAE.pdf"
596     cp SAE-de-keypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts (keypad).pdf"
597     cp SAE-de-nokeypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts.pdf"
598     
599 elif [ x$MIXBUS != x ] ; then
600
601      # Mixbus packaging
602
603     echo "Creating Mixbus packaging directory"
604     mv $APPDIR $PRODUCT_PKG_DIR/
605     DMGBACKGROUND=dmgbgMB
606 else 
607
608     echo "Creating $APPNAME packaging directory"
609     mv $APPDIR $PRODUCT_PKG_DIR/
610
611 fi
612
613 if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
614         OSX_ARCH=x86_64
615         OSX_BENSID=osx64
616 elif file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q ppc; then
617         OSX_ARCH=ppc
618         OSX_BENSID=osxppc
619 else
620         OSX_ARCH=i386
621         OSX_BENSID=osx32
622 fi
623
624 if test x$WITH_HARRISON_LV2 != x ; then
625         curl -s -S --fail -#  \
626                 -z "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
627                 -o "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
628                 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/harrison_lv2s.${OSX_BENSID}.zip"
629
630         mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
631         bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
632                 "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip"
633 fi
634
635 if test x$WITH_HARVID != x ; then
636         echo "installing video tools.."
637         HARVID_VERSION=$(curl -s -S http://ardour.org/files/video-tools/harvid_version.txt)
638         XJADEO_VERSION=$(curl -s -S http://ardour.org/files/video-tools/xjadeo_version.txt)
639         MULTIARCH=osx
640         echo "copying harvid and xjadeo ..."
641
642         rsync -Pa \
643                 rsync://ardour.org/video-tools/harvid-osx-${HARVID_VERSION}.tgz \
644                 "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz"
645
646         rsync -Pa \
647                 rsync://ardour.org/video-tools/jadeo-${XJADEO_VERSION:1}.dmg \
648                 "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg"
649
650         tar -x -z \
651                 -C $PRODUCT_PKG_DIR/$APPROOT \
652                 -f "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz" || exit 1
653
654         JADEO=$(hdiutil attach "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg" | grep Apple_HFS | grep dev/ | cut -f 3)
655         cp -r "${JADEO}/Jadeo.app" "$PRODUCT_PKG_DIR/"
656         hdiutil detach "${JADEO}"
657
658         XJCONTENT=${PRODUCT_PKG_DIR}/Jadeo.app/Contents
659         HVLIBS=${PRODUCT_PKG_DIR}/$APPROOT/lib/harvid
660
661         for file in ${XJCONTENT}/MacOS/Jadeo-bin ${XJCONTENT}/Frameworks/*.dylib ${HVLIBS}/*.dylib ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/*harvid* ; do
662                 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin && \
663                 mv ${file}.thin ${file}
664         done
665
666         DMGWINBOTTOM=580
667         YPOS=$[ $DMGWINBOTTOM - 300 ]
668         XJADEOPOS="set position of item \"Jadeo.app\" of container window to {310, ${YPOS}}"
669
670         DMGBACKGROUND=${DMGBACKGROUND}xj
671 fi
672
673 ################################################################################
674 ### Mixbus plugins, etc
675 if test x$WITH_X42_LV2 != x ; then
676         echo "bundling x42 plugins"
677         mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
678
679         for proj in x42-meters x42-midifilter x42-midimap x42-stereoroute x42-eq setBfree; do
680                 X42_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/${proj}.latest.txt)
681                 rsync -a -q --partial \
682                         rsync://x42-plugins.com/x42/osx/${proj}-lv2-osx-${X42_VERSION}.zip \
683                         "$CACHEDIR/${proj}-lv2-osx-${X42_VERSION}.zip"
684                 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
685                         "$CACHEDIR/${proj}-lv2-osx-${X42_VERSION}.zip"
686         done
687
688         for file in ${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/*/*.dylib ; do
689                 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin
690                 mv ${file}.thin ${file}
691         done
692 fi
693
694 if test -n "$MIXBUS"; then
695         echo "deploying harrison channelstrip for $OSX_BENSID"
696
697         mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip"
698
699         curl -s -S --fail -#  \
700                 -z "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
701                 -o "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
702                 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so"
703
704         cp "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
705                 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip/${HARRISONCHANNELSTRIP}.so"
706
707         echo "deploying harrison vamp plugins for $OSX_BENSID"
708
709         curl -s -S --fail -#  \
710                 -z "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
711                 -o "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
712                 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/harrison_vamp.${OSX_BENSID}.dylib"
713
714         cp "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
715                 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/harrison_vamp.dylib"
716 fi
717 ################################################################################
718
719 ( cd $PRODUCT_PKG_DIR ; find . ) > file_list.txt
720
721 echo "Building DMG ..."
722
723 # UC_DMG=$APPNAME-${release_version}-UC.dmg
724 # FINAL_DMG=$APPNAME-${release_version}.dmg
725
726 if [ x$DEBUG = xT ]; then
727         UC_DMG=$APPNAME-$release_version-dbg.dmg
728 else
729         UC_DMG=$APPNAME-$release_version.dmg
730 fi
731 VOLNAME=$APPNAME-$release_version
732
733 MNTPATH=`mktemp -d -t ardourimg`
734 TMPDMG=`mktemp -t ardour`
735 ICNSTMP=`mktemp -t ardouricon`
736 EXTRA_SPACE_MB=30
737 DMGMEGABYTES=$[ `du -sk "$PRODUCT_PKG_DIR" | cut -f 1` * 1024 / 1048576 + $EXTRA_SPACE_MB ]
738
739 echo "DMG MB = " $DMGMEGABYTES
740
741 rm -f $UC_DMG "$TMPDMG" "${TMPDMG}.dmg" "$ICNSTMP"
742 rm -rf "$MNTPATH"
743 mkdir -p "$MNTPATH"
744
745 TMPDMG="${TMPDMG}.dmg"
746
747 trap "rm -rf $MNTPATH $TMPDMG ${TMPDMG}.dmg $ICNSTMP" EXIT
748
749 hdiutil create -megabytes $DMGMEGABYTES -fs HFS+ -volname "${VOLNAME}" "$TMPDMG"
750 DiskDevice=$(hdid -nomount "$TMPDMG" | grep Apple_HFS | cut -f 1 -d ' ')
751 mount -t hfs -o nobrowse "${DiskDevice}" "${MNTPATH}"
752
753 cp -r ${PRODUCT_PKG_DIR}/* "${MNTPATH}" || exit
754 mkdir "${MNTPATH}/.background"
755 cp -vi ${DMGBACKGROUND}.png "${MNTPATH}/.background/dmgbg.png"
756
757 echo "setting DMG background ..."
758
759 if test $(sw_vers -productVersion | cut -d '.' -f 2) -lt 9; then
760         # OSX ..10.8.X
761         DISKNAME=${VOLNAME}
762 else
763         # OSX 10.9.X and later
764         DISKNAME=`basename "${MNTPATH}"`
765 fi
766
767 osascript << EOF
768   tell application "Finder"
769     activate
770     tell disk "${DISKNAME}"
771       open
772       delay 2
773       set current view of container window to icon view
774       set toolbar visible of container window to false
775       set statusbar visible of container window to false
776       set the bounds of container window to {400, 200, 800, ${DMGWINBOTTOM}}
777       set theViewOptions to the icon view options of container window
778       set arrangement of theViewOptions to not arranged
779       set icon size of theViewOptions to 64
780       set background picture of theViewOptions to file ".background:dmgbg.png"
781       make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
782       set position of item "${APPDIR}" of container window to {90, 100}
783       set position of item "Applications" of container window to {310, 100}
784       ${MIXBUSPOS}
785       ${HARVIDPOS}
786       ${XJADEOPOS}
787       close
788       open
789       update without registering applications
790       delay 5
791       eject
792     end tell
793   end tell
794 EOF
795
796 chmod -Rf go-w "${MNTPATH}"
797 sync
798
799 set -e
800 echo "compressing Image ..."
801
802 # Umount the image ('eject' above may already have done that)
803 umount "${DiskDevice}" || true
804 hdiutil eject "${DiskDevice}" || true
805 # Create a read-only version, use zlib compression
806 hdiutil convert -format UDZO "${TMPDMG}" -imagekey zlib-level=9 -o "${UC_DMG}"
807
808 if test $(sw_vers -productVersion | cut -d '.' -f 2) -gt 5; then
809 echo "setting file icon ..."
810
811 cp ${PRODUCT_PKG_DIR}/$Resources/appIcon.icns ${ICNSTMP}.icns
812 sips -i ${ICNSTMP}.icns
813 DeRez -only icns ${ICNSTMP}.icns > ${ICNSTMP}.rsrc
814 Rez -append ${ICNSTMP}.rsrc -o "$UC_DMG"
815 SetFile -a C "$UC_DMG"
816
817 rm ${ICNSTMP}.icns ${ICNSTMP}.rsrc
818 fi
819
820 rm -rf ${PRODUCT_PKG_DIR}
821
822 echo
823 echo "packaging suceeded."
824 ls -l "$UC_DMG"
825
826 echo "Done."
827 exit