Use set_sizing_text in generic plugin ui
[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           if test "${x:0:1}" = "_"; then
405                         continue;
406                 fi
407     cp "$x" $LuaScripts
408 done
409
410 # MackieControl data
411 # got to be careful with names here
412 for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
413     cp "$x" $MackieControl
414 done
415
416 # VAMP plugins that we use
417 cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
418
419 # Suil modules (new dir 'build-stack')
420 if test -d $GTKSTACK_ROOT/lib/suil-0/ ; then
421     cp $GTKSTACK_ROOT/lib/suil-0/lib* $Frameworks
422 fi
423
424 # Suil modules (old dir 'build-ardour-stack')
425 if test -d $ARDOURSTACK_ROOT/lib/suil-0/ ; then
426     cp $ARDOURSTACK_ROOT/lib/suil-0/lib* $Frameworks
427 fi
428
429 # VST scanner app and wrapper script, if they exist
430 if test -d $BUILD_ROOT/libs/fst ; then
431     cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $Frameworks/
432 fi
433
434 # vfork wrapper
435 if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
436     mkdir -p $Frameworks/vfork
437     cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $Frameworks/
438 fi
439
440 # TODO check if this is still needed, even when building on 10.5
441 if file $BUILD_ROOT/gtk2_ardour/ardour-$release_version | grep -q ppc; then
442 STDCPP='|libstdc\+\+'
443 else
444 STDCPP=
445 fi
446
447 while [ true ] ; do 
448     missing=false
449     for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Panners/*.dylib $Backends/*.dylib $Surfaces/*.dylib $Plugins/*.so ; do 
450         if ! file $file | grep -qs Mach-O ; then
451             continue
452         fi
453         # libffi contains "S" (other section symbols) that should not be stripped.
454         if [[ $file == *"libffi"* ]] ; then
455             continue
456         fi
457
458         if test x$STRIP != x ; then
459                 strip -u -r -arch all $file &>/dev/null
460         fi
461
462         deps=`otool -L $file | awk '{print $1}' | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | grep -v 'libjack\.' | grep -v "$(basename $file)"`
463         # echo -n "."
464         for dep in $deps ; do
465             base=`basename $dep`
466             if ! test -f $Frameworks/$base; then
467                 if echo $dep | grep -sq '^libs' ; then
468                     cp $BUILD_ROOT/$dep $Frameworks
469                 else
470                     cp $dep $Frameworks
471                 fi
472                 missing=true
473             fi
474         done
475     done
476     if test x$missing = xfalse ; then
477         # everything has been found
478         break
479     fi
480 done
481 echo
482
483 echo "Copying other stuff to $APPDIR  ..."
484
485 cp $BUILD_ROOT/gtk2_ardour/ardour.keys  $Resources
486 cp $BUILD_ROOT/gtk2_ardour/ardour.menus $Resources
487 cp $BUILD_ROOT/gtk2_ardour/default_ui_config $Resources
488 cp $BUILD_ROOT/gtk2_ardour/clearlooks.rc $Resources
489
490 # Copied directly from source tree
491
492 mkdir ${Resources}/icons
493 mkdir ${Resources}/resources
494 cp ../../system_config $Resources/system_config
495 cp ../../instant.xml $Resources/instant.xml
496 cp ../../gtk2_ardour/icons/*.png ${Resources}/icons/
497 cp -r ../../gtk2_ardour/icons/cursor_* ${Resources}/icons/
498 cp ../../gtk2_ardour/ArdourMono.ttf $Shared
499 cp ../../gtk2_ardour/resources/${PRODUCT_PKG_DIR}-* ${Resources}/resources/
500
501
502 # Themes: only install those named for this app
503 lower_case_appname=`echo $APPNAME | tr '[:upper:]' '[:lower:]'`
504 cp ../../gtk2_ardour/themes/*-${lower_case_appname}.colors $Themes
505
506 # go through and recursively remove any .svn dirs in the bundle
507 for svndir in `find $APPDIR -name .svn -type dir`; do
508     rm -rf $svndir
509 done
510
511 # install bundled LV2s to <app>/Contents/lib/LV2/
512 cp -R $BUILD_ROOT/libs/LV2 $Frameworks/
513
514 # lv2 core, classifications etc - TODO check if we need the complete LV2 ontology
515 if test -d $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
516         cp -R $ARDOURSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
517 elif test -d $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 ; then
518         cp -R $GTKSTACK_ROOT/lib/lv2/lv2core.lv2 $Frameworks/LV2/
519 fi
520
521
522 # now fix up the executables
523 echo "Fixing up executable dependency names ..."
524 executables=$MAIN_EXECUTABLE
525 if test x$SAE != x ; then
526     executables="$executables"
527 fi
528
529 for exe in $executables; do
530     EXE=$APPROOT/MacOS/$exe
531     changes=""
532     for lib in `otool -L $EXE | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
533       base=`basename $lib`
534       changes="$changes -change $lib @executable_path/../lib/$base"
535     done
536     if test "x$changes" != "x" ; then
537         install_name_tool $changes $EXE
538     fi
539 done
540
541 echo "Fixing up library names ..."
542 # now do the same for all the libraries we include
543 for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners $Backends $Frameworks/LV2/* ; do
544
545     libbase=`basename $libdir`
546     
547     for dylib in $libdir/*.dylib $libdir/*.so ; do
548         
549        # skip symlinks
550         
551         if test -L $dylib ; then
552             continue
553         fi
554         
555         # change all the dependencies
556         
557         changes=""
558         for lib in `otool -L $dylib | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
559             base=`basename $lib`
560             if echo $lib | grep -s libbase; then
561                 changes="$changes -change $lib @executable_path/../$libbase/$base"
562             else
563                 changes="$changes -change $lib @executable_path/../lib/$base"
564             fi
565         done
566         
567         if test "x$changes" != x ; then
568             if  install_name_tool $changes $dylib ; then
569                 :
570             else
571                 exit 1
572             fi
573         fi
574         
575         # now the change what the library thinks its own name is
576         
577         base=`basename $dylib`
578         install_name_tool -id @executable_path/../$libbase/$base $dylib
579     done
580 done
581
582 #
583 # and now ... the DMG
584
585
586 rm -rf $PRODUCT_PKG_DIR
587 mkdir $PRODUCT_PKG_DIR
588
589 DMGWINBOTTOM=440
590 DMGBACKGROUND=dmgbg
591
592 if [ x$SAE != x ] ; then
593         
594     # SAE packaging
595     
596     echo "Creating SAE packaging directory"
597     mv $APPDIR $PRODUCT_PKG_DIR/Ardour3-SAE.app
598     cp HowToInstallArdourSAE.pdf "$PRODUCT_PKG_DIR/How To Install Ardour SAE.pdf"
599     cp SAE-de-keypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts (keypad).pdf"
600     cp SAE-de-nokeypad.pdf "$PRODUCT_PKG_DIR/Ardour SAE Shortcuts.pdf"
601     
602 elif [ x$MIXBUS != x ] ; then
603
604      # Mixbus packaging
605
606     echo "Creating Mixbus packaging directory"
607     mv $APPDIR $PRODUCT_PKG_DIR/
608     DMGBACKGROUND=dmgbgMB
609 else 
610
611     echo "Creating $APPNAME packaging directory"
612     mv $APPDIR $PRODUCT_PKG_DIR/
613
614 fi
615
616 if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
617         OSX_ARCH=x86_64
618         OSX_BENSID=osx64
619 elif file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q ppc; then
620         OSX_ARCH=ppc
621         OSX_BENSID=osxppc
622 else
623         OSX_ARCH=i386
624         OSX_BENSID=osx32
625 fi
626
627 if test x$WITH_HARRISON_LV2 != x ; then
628         curl -s -S --fail -#  \
629                 -z "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
630                 -o "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
631                 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/harrison_lv2s.${OSX_BENSID}.zip"
632
633         mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
634         bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
635                 "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip"
636 fi
637
638 if test x$WITH_HARVID != x ; then
639         echo "installing video tools.."
640         HARVID_VERSION=$(curl -s -S http://ardour.org/files/video-tools/harvid_version.txt)
641         XJADEO_VERSION=$(curl -s -S http://ardour.org/files/video-tools/xjadeo_version.txt)
642         MULTIARCH=osx
643         echo "copying harvid and xjadeo ..."
644
645         rsync -Pa \
646                 rsync://ardour.org/video-tools/harvid-osx-${HARVID_VERSION}.tgz \
647                 "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz"
648
649         rsync -Pa \
650                 rsync://ardour.org/video-tools/jadeo-${XJADEO_VERSION:1}.dmg \
651                 "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg"
652
653         tar -x -z \
654                 -C $PRODUCT_PKG_DIR/$APPROOT \
655                 -f "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz" || exit 1
656
657         JADEO=$(hdiutil attach "$CACHEDIR/jadeo-${XJADEO_VERSION:1}.dmg" | grep Apple_HFS | grep dev/ | cut -f 3)
658         cp -r "${JADEO}/Jadeo.app" "$PRODUCT_PKG_DIR/"
659         hdiutil detach "${JADEO}"
660
661         XJCONTENT=${PRODUCT_PKG_DIR}/Jadeo.app/Contents
662         HVLIBS=${PRODUCT_PKG_DIR}/$APPROOT/lib/harvid
663
664         for file in ${XJCONTENT}/MacOS/Jadeo-bin ${XJCONTENT}/Frameworks/*.dylib ${HVLIBS}/*.dylib ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/*harvid* ; do
665                 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin && \
666                 mv ${file}.thin ${file}
667         done
668
669         DMGWINBOTTOM=580
670         YPOS=$[ $DMGWINBOTTOM - 300 ]
671         XJADEOPOS="set position of item \"Jadeo.app\" of container window to {310, ${YPOS}}"
672
673         DMGBACKGROUND=${DMGBACKGROUND}xj
674 fi
675
676 ################################################################################
677 ### Mixbus plugins, etc
678 if test x$WITH_X42_LV2 != x ; then
679         echo "bundling x42 plugins"
680         mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
681
682         for proj in x42-meters x42-midifilter x42-midimap x42-stereoroute x42-eq setBfree; do
683                 X42_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/${proj}.latest.txt)
684                 rsync -a -q --partial \
685                         rsync://x42-plugins.com/x42/osx/${proj}-lv2-osx-${X42_VERSION}.zip \
686                         "$CACHEDIR/${proj}-lv2-osx-${X42_VERSION}.zip"
687                 bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
688                         "$CACHEDIR/${proj}-lv2-osx-${X42_VERSION}.zip"
689         done
690
691         for file in ${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/*/*.dylib ; do
692                 lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin
693                 mv ${file}.thin ${file}
694         done
695 fi
696
697 if test -n "$MIXBUS"; then
698         echo "deploying harrison channelstrip for $OSX_BENSID"
699
700         mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip"
701
702         curl -s -S --fail -#  \
703                 -z "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
704                 -o "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
705                 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so"
706
707         cp "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${OSX_BENSID}.so" \
708                 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip/${HARRISONCHANNELSTRIP}.so"
709
710         echo "deploying harrison vamp plugins for $OSX_BENSID"
711
712         curl -s -S --fail -#  \
713                 -z "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
714                 -o "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
715                 "http://www.harrisonconsoles.com/mixbus/mb3/beta/harrison-dsp/harrison_vamp.${OSX_BENSID}.dylib"
716
717         cp "${CACHEDIR}/harrison_vamp.${OSX_BENSID}.dylib" \
718                 "${PRODUCT_PKG_DIR}/${APPROOT}/lib/harrison_vamp.dylib"
719 fi
720 ################################################################################
721
722 ( cd $PRODUCT_PKG_DIR ; find . ) > file_list.txt
723
724 echo "Building DMG ..."
725
726 # UC_DMG=$APPNAME-${release_version}-UC.dmg
727 # FINAL_DMG=$APPNAME-${release_version}.dmg
728
729 if [ x$DEBUG = xT ]; then
730         UC_DMG=$APPNAME-$release_version-dbg.dmg
731 else
732         UC_DMG=$APPNAME-$release_version.dmg
733 fi
734 VOLNAME=$APPNAME-$release_version
735
736 MNTPATH=`mktemp -d -t ardourimg`
737 TMPDMG=`mktemp -t ardour`
738 ICNSTMP=`mktemp -t ardouricon`
739 EXTRA_SPACE_MB=30
740 DMGMEGABYTES=$[ `du -sk "$PRODUCT_PKG_DIR" | cut -f 1` * 1024 / 1048576 + $EXTRA_SPACE_MB ]
741
742 echo "DMG MB = " $DMGMEGABYTES
743
744 rm -f $UC_DMG "$TMPDMG" "${TMPDMG}.dmg" "$ICNSTMP"
745 rm -rf "$MNTPATH"
746 mkdir -p "$MNTPATH"
747
748 TMPDMG="${TMPDMG}.dmg"
749
750 trap "rm -rf $MNTPATH $TMPDMG ${TMPDMG}.dmg $ICNSTMP" EXIT
751
752 hdiutil create -megabytes $DMGMEGABYTES -fs HFS+ -volname "${VOLNAME}" "$TMPDMG"
753 DiskDevice=$(hdid -nomount "$TMPDMG" | grep Apple_HFS | cut -f 1 -d ' ')
754 mount -t hfs -o nobrowse "${DiskDevice}" "${MNTPATH}"
755
756 cp -r ${PRODUCT_PKG_DIR}/* "${MNTPATH}" || exit
757 mkdir "${MNTPATH}/.background"
758 cp -vi ${DMGBACKGROUND}.png "${MNTPATH}/.background/dmgbg.png"
759
760 echo "setting DMG background ..."
761
762 if test $(sw_vers -productVersion | cut -d '.' -f 2) -lt 9; then
763         # OSX ..10.8.X
764         DISKNAME=${VOLNAME}
765 else
766         # OSX 10.9.X and later
767         DISKNAME=`basename "${MNTPATH}"`
768 fi
769
770 osascript << EOF
771   tell application "Finder"
772     activate
773     tell disk "${DISKNAME}"
774       open
775       delay 2
776       set current view of container window to icon view
777       set toolbar visible of container window to false
778       set statusbar visible of container window to false
779       set the bounds of container window to {400, 200, 800, ${DMGWINBOTTOM}}
780       set theViewOptions to the icon view options of container window
781       set arrangement of theViewOptions to not arranged
782       set icon size of theViewOptions to 64
783       set background picture of theViewOptions to file ".background:dmgbg.png"
784       make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
785       set position of item "${APPDIR}" of container window to {90, 100}
786       set position of item "Applications" of container window to {310, 100}
787       ${MIXBUSPOS}
788       ${HARVIDPOS}
789       ${XJADEOPOS}
790       close
791       open
792       update without registering applications
793       delay 5
794       eject
795     end tell
796   end tell
797 EOF
798
799 chmod -Rf go-w "${MNTPATH}"
800 sync
801
802 set -e
803 echo "compressing Image ..."
804
805 # Umount the image ('eject' above may already have done that)
806 umount "${DiskDevice}" || true
807 hdiutil eject "${DiskDevice}" || true
808 # Create a read-only version, use zlib compression
809 hdiutil convert -format UDZO "${TMPDMG}" -imagekey zlib-level=9 -o "${UC_DMG}"
810
811 if test $(sw_vers -productVersion | cut -d '.' -f 2) -gt 5; then
812 echo "setting file icon ..."
813
814 cp ${PRODUCT_PKG_DIR}/$Resources/appIcon.icns ${ICNSTMP}.icns
815 sips -i ${ICNSTMP}.icns
816 DeRez -only icns ${ICNSTMP}.icns > ${ICNSTMP}.rsrc
817 Rez -append ${ICNSTMP}.rsrc -o "$UC_DMG"
818 SetFile -a C "$UC_DMG"
819
820 rm ${ICNSTMP}.icns ${ICNSTMP}.rsrc
821 fi
822
823 rm -rf ${PRODUCT_PKG_DIR}
824
825 echo
826 echo "packaging suceeded."
827 ls -l "$UC_DMG"
828
829 echo "Done."
830 exit