Try to fix missing icons in OS X .dmg.
[dcpomatic.git] / platform / osx / make_dmg.sh
index c52d1e9ebc7aa8030135d1a45271997ff874fa8b..bf7512b9317b77f27bf472b0a1841b020289db04 100644 (file)
@@ -1,14 +1,20 @@
 #!/bin/bash
 #!/bin/bash
+#
+# Syntax: make_dmg.sh <builddir>
+#
+# e.g. make_dmg.sh /Users/carl/cdist
+
+set -e
 
 version=`cat wscript | egrep ^VERSION | awk '{print $3}' | sed -e "s/'//g"`
 
 # DMG size in megabytes
 DMG_SIZE=256
 WORK=build/platform/osx
 
 version=`cat wscript | egrep ^VERSION | awk '{print $3}' | sed -e "s/'//g"`
 
 # DMG size in megabytes
 DMG_SIZE=256
 WORK=build/platform/osx
-ENV=/Users/carl/Environments/osx/10.8
-DEPS=/Users/carl/cdist
+ENV=/Users/carl/Environments/osx
+ROOT=$1
 
 
-appdir="DVD-o-matic.app"
+appdir="DCP-o-matic.app"
 approot=$appdir/Contents
 libs=$approot/lib
 macos=$approot/MacOS
 approot=$appdir/Contents
 libs=$approot/lib
 macos=$approot/MacOS
@@ -19,74 +25,110 @@ mkdir -p $WORK/$macos
 mkdir -p $WORK/$libs
 mkdir -p $WORK/$resources
 
 mkdir -p $WORK/$libs
 mkdir -p $WORK/$resources
 
-cp build/src/tools/dvdomatic $WORK/$macos/
-cp build/src/lib/libdvdomatic.dylib $WORK/$libs/
-cp build/src/wx/libdvdomatic-wx.dylib $WORK/$libs/
-cp $DEPS/lib/libdcp.dylib $WORK/$libs/
-cp $DEPS/lib/libasdcp-libdcp.dylib $WORK/$libs/
-cp $DEPS/lib/libkumu-libdcp.dylib $WORK/$libs/
-cp $DEPS/lib/libopenjpeg*.dylib $WORK/$libs/
-cp $DEPS/lib/libavformat*.dylib $WORK/$libs/
-cp $DEPS/lib/libavfilter*.dylib $WORK/$libs/
-cp $DEPS/lib/libavutil*.dylib $WORK/$libs/
-cp $DEPS/lib/libavcodec*.dylib $WORK/$libs/
-cp $DEPS/lib/libswscale*.dylib $WORK/$libs/
-cp $DEPS/lib/libpostproc*.dylib $WORK/$libs/
-cp $DEPS/lib/libswresample*.dylib $WORK/$libs/
-cp $ENV/lib/libboost_system.dylib $WORK/$libs/
-cp $ENV/lib/libboost_filesystem.dylib $WORK/$libs/
-cp $ENV/lib/libboost_thread.dylib $WORK/$libs/
-cp $ENV/lib/libboost_date_time.dylib $WORK/$libs/
-cp $ENV/lib/libssl*.dylib $WORK/$libs/
-cp $ENV/lib/libcrypto*.dylib $WORK/$libs/
-cp $ENV/lib/libxml++-2.6*.dylib $WORK/$libs/
-cp $ENV/lib/libxml2*.dylib $WORK/$libs/
-cp $ENV/lib/libglibmm-2.4*.dylib $WORK/$libs/
-cp $ENV/lib/libgobject*.dylib $WORK/$libs/
-cp $ENV/lib/libgthread*.dylib $WORK/$libs/
-cp $ENV/lib/libgmodule*.dylib $WORK/$libs/
-cp $ENV/lib/libsigc*.dylib $WORK/$libs/
-cp $ENV/lib/libglib-2*.dylib $WORK/$libs/
-cp $ENV/lib/libintl*.dylib $WORK/$libs/
-cp $ENV/lib/libsndfile*.dylib $WORK/$libs/
-cp $ENV/lib/libMagick++*.dylib $WORK/$libs/
-cp $ENV/lib/libMagickCore*.dylib $WORK/$libs/
-cp $ENV/lib/libMagickWand*.dylib $WORK/$libs/
-cp $ENV/lib/libssh*.dylib $WORK/$libs/
-cp $ENV/lib/libwx*.dylib $WORK/$libs/
-cp $ENV/lib/libfontconfig*.dylib $WORK/$libs/
-cp $ENV/lib/libfreetype*.dylib $WORK/$libs/
-cp $ENV/lib/libexpat*.dylib $WORK/$libs/
-
-for obj in $WORK/$macos/dvdomatic $WORK/$libs/*.dylib; do
-  deps=`otool -L $obj | awk '{print $1}' | egrep "(/Users/carl|libboost|libssh)"`
+function universal_copy {
+    echo $2
+    for f in $1/32/$2; do
+        if [ -h $f ]; then
+           ln -s $(readlink $f) $3/`basename $f`
+        else
+          g=`echo $f | sed -e "s/\/32\//\/64\//g"`
+         mkdir -p $3
+          lipo -create $f $g -output $3/`basename $f`
+        fi
+    done
+}
+
+universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic $WORK/$macos
+universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic_cli $WORK/$macos
+universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic_server_cli $WORK/$macos
+universal_copy $ROOT src/dcpomatic/build/src/tools/dcpomatic_batch $WORK/$macos
+universal_copy $ROOT src/dcpomatic/build/src/lib/libdcpomatic.dylib $WORK/$libs
+universal_copy $ROOT src/dcpomatic/build/src/wx/libdcpomatic-wx.dylib $WORK/$libs
+universal_copy $ROOT lib/libcxml.dylib $WORK/$libs
+universal_copy $ROOT lib/libdcp.dylib $WORK/$libs
+universal_copy $ROOT lib/libasdcp-libdcp.dylib $WORK/$libs
+universal_copy $ROOT lib/libkumu-libdcp.dylib $WORK/$libs
+universal_copy $ROOT lib/libopenjpeg*.dylib $WORK/$libs
+universal_copy $ROOT lib/libavdevice*.dylib $WORK/$libs
+universal_copy $ROOT lib/libavformat*.dylib $WORK/$libs
+universal_copy $ROOT lib/libavfilter*.dylib $WORK/$libs
+universal_copy $ROOT lib/libavutil*.dylib $WORK/$libs
+universal_copy $ROOT lib/libavcodec*.dylib $WORK/$libs
+universal_copy $ROOT lib/libswscale*.dylib $WORK/$libs
+universal_copy $ROOT lib/libswresample*.dylib $WORK/$libs
+universal_copy $ROOT bin/ffprobe $WORK/$macos
+universal_copy $ENV lib/libboost_system.dylib $WORK/$libs
+universal_copy $ENV lib/libboost_filesystem.dylib $WORK/$libs
+universal_copy $ENV lib/libboost_thread.dylib $WORK/$libs
+universal_copy $ENV lib/libboost_date_time.dylib $WORK/$libs
+universal_copy $ENV lib/libxml++-2.6*.dylib $WORK/$libs
+universal_copy $ENV lib/libxml2*.dylib $WORK/$libs
+universal_copy $ENV lib/libglibmm-2.4*.dylib $WORK/$libs
+universal_copy $ENV lib/libgobject*.dylib $WORK/$libs
+universal_copy $ENV lib/libgthread*.dylib $WORK/$libs
+universal_copy $ENV lib/libgmodule*.dylib $WORK/$libs
+universal_copy $ENV lib/libsigc*.dylib $WORK/$libs
+universal_copy $ENV lib/libglib-2*.dylib $WORK/$libs
+universal_copy $ENV lib/libintl*.dylib $WORK/$libs
+universal_copy $ENV lib/libsndfile*.dylib $WORK/$libs
+universal_copy $ENV lib/libMagick++*.dylib $WORK/$libs
+universal_copy $ENV lib/libMagickCore*.dylib $WORK/$libs
+universal_copy $ENV lib/libMagickWand*.dylib $WORK/$libs
+universal_copy $ENV lib/libssh*.dylib $WORK/$libs
+universal_copy $ENV lib/libwx*.dylib $WORK/$libs
+universal_copy $ENV lib/libfontconfig*.dylib $WORK/$libs
+universal_copy $ENV lib/libfreetype*.dylib $WORK/$libs
+universal_copy $ENV lib/libexpat*.dylib $WORK/$libs
+universal_copy $ENV lib/libltdl*.dylib $WORK/$libs
+universal_copy $ENV lib/libxmlsec1*.dylib $WORK/$libs
+universal_copy $ENV lib/libzip*.dylib $WORK/$libs
+universal_copy $ENV lib/libquickmail*.dylib $WORK/$libs
+universal_copy $ENV lib/libcurl*.dylib $WORK/$libs
+universal_copy $ENV lib/libffi*.dylib $WORK/$libs
+
+for obj in $WORK/$macos/dcpomatic $WORK/$macos/ffprobe $WORK/$libs/*.dylib; do
+  deps=`otool -L $obj | awk '{print $1}' | egrep "(/Users/carl|libboost|libssh|libltdl)"`
   changes=""
   for dep in $deps; do
     base=`basename $dep`
   changes=""
   for dep in $deps; do
     base=`basename $dep`
-    changes="$changes -change $dep @executable_path/../lib/$base"
+    # $dep will be a path within 64/; make a 32/ path too
+    dep32=`echo $dep | sed -e "s/\/64\//\/32\//g"`
+    changes="$changes -change $dep @executable_path/../lib/$base -change $dep32 @executable_path/../lib/$base"
   done
   if test "x$changes" != "x"; then
     install_name_tool $changes $obj
   done
   if test "x$changes" != "x"; then
     install_name_tool $changes $obj
-  fi  
+  fi
 done
 
 done
 
-
 cp build/platform/osx/Info.plist $WORK/$approot
 cp build/platform/osx/Info.plist $WORK/$approot
-cp icons/dvdomatic.icns $WORK/$resources/DVD-o-matic.icns
+cp icons/dcpomatic.icns $WORK/$resources/DCP-o-matic.icns
+cp icons/colour_conversions.png $WORK/$resources
+cp icons/defaults.png $WORK/$resources
+cp icons/kdm_email.png $WORK/$resources
+cp icons/servers.png $WORK/$resources
+cp icons/tms.png $WORK/$resources
+
+# i18n: .mo files
+for lang in de_DE es_ES fr_FR it_IT sv_SE; do
+  mkdir $WORK/$resources/$lang
+  cp build/src/lib/mo/$lang/*.mo $WORK/$resources/$lang
+  cp build/src/wx/mo/$lang/*.mo $WORK/$resources/$lang
+  cp build/src/tools/mo/$lang/*.mo $WORK/$resources/$lang
+done
 
 
-tmp_dmg=$WORK/dvdomatic_tmp.dmg
-dmg="$WORK/DVD-o-matic $version.dmg"
-vol_name=DVD-o-matic-$version
+tmp_dmg=$WORK/dcpomatic_tmp.dmg
+dmg="$WORK/DCP-o-matic $version.dmg"
+vol_name=DCP-o-matic-$version
 
 mkdir -p $WORK/$vol_name
 
 mkdir -p $WORK/$vol_name
+cp -r $WORK/$appdir $WORK/$vol_name
+ln -s /Applications $WORK/$vol_name/Applications
 
 rm -f $tmp_dmg "$dmg"
 
 rm -f $tmp_dmg "$dmg"
-hdiutil create -megabytes $DMG_SIZE $tmp_dmg
-device=$(hdid -nomount $tmp_dmg | grep Apple_HFS | cut -f 1 -d ' ')
-newfs_hfs -v ${vol_name} $device
-mount -t hfs "$device" $WORK/$vol_name
-
-cp -r $WORK/$appdir $WORK/$vol_name
+hdiutil create -srcfolder $WORK/$vol_name -volname $vol_name -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size $DMG_SIZE $tmp_dmg
+attach=$(hdiutil attach -readwrite -noverify -noautoopen $tmp_dmg)
+device=`echo $attach | egrep '^/dev/' | sed 1q | awk '{print $5}'`
+sleep 5
 
 echo '
   tell application "Finder"
 
 echo '
   tell application "Finder"
@@ -99,26 +141,23 @@ echo '
            set theViewOptions to the icon view options of container window
            set arrangement of theViewOptions to not arranged
            set icon size of theViewOptions to 64
            set theViewOptions to the icon view options of container window
            set arrangement of theViewOptions to not arranged
            set icon size of theViewOptions to 64
-           make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
-           set position of item "DVD-o-matic.app" of container window to {90, 80}
+           set position of item "DCP-o-matic.app" of container window to {90, 80}
            set position of item "Applications" of container window to {310, 80}
            close
            open
            update without registering applications
            delay 5
            set position of item "Applications" of container window to {310, 80}
            close
            open
            update without registering applications
            delay 5
-           eject
      end tell
    end tell
 ' | osascript
 
      end tell
    end tell
 ' | osascript
 
-chmod -Rf go-w $WORK/mnt
+chmod -Rf go-w /Volumes/"$vol_name"/$appdir
 sync
 
 sync
 
-umount $device
 hdiutil eject $device
 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
 hdiutil eject $device
 hdiutil convert -format UDZO $tmp_dmg -imagekey zlib-level=9 -o "$dmg"
-sips -i $WORK/$resources/DVD-o-matic.icns
-DeRez -only icns $WORK/$resources/DVD-o-matic.icns > $WORK/$resources/DVD-o-matic.rsrc
-Rez -append $WORK/$resources/DVD-o-matic.rsrc -o "$dmg"
+sips -i $WORK/$resources/DCP-o-matic.icns
+DeRez -only icns $WORK/$resources/DCP-o-matic.icns > $WORK/$resources/DCP-o-matic.rsrc
+Rez -append $WORK/$resources/DCP-o-matic.rsrc -o "$dmg"
 SetFile -a C "$dmg"
 
 SetFile -a C "$dmg"