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