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