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