diff options
Diffstat (limited to 'packaging/macosx')
-rw-r--r-- | packaging/macosx/README | 45 | ||||
-rwxr-xr-x | packaging/macosx/make-package.sh | 51 | ||||
-rw-r--r-- | packaging/macosx/subsurface.bundle | 11 |
3 files changed, 86 insertions, 21 deletions
diff --git a/packaging/macosx/README b/packaging/macosx/README index 47d49661c..b996413c5 100644 --- a/packaging/macosx/README +++ b/packaging/macosx/README @@ -4,23 +4,27 @@ Creating a Subsurface bundle (we now have a small shell script that should automate this process; look for make-package.sh) -install gtk-mac-bundler (this has been tested with version 0.7.0) and run +After you build Subsurface and install it on your Mac + +make install-macosx + +you need gtk-mac-bundler (this has been tested with version 0.7.3); run $ gtk-mac-bundler subsurface.bundle -This should install a self-contained Subsurface application under +This should install an almost self-contained Subsurface application under ./staging/Subsurface.app Sadly because of the way gettext accesses the gtk20.mo file, this fails -for localized use - in that case you need to rebuild MacPorts with +for localized use - so I ended up building MacPorts with -prefix /Applications/Subsurface.app/Contents/Resources And then things work correctly IFF the app gets installed with that path. What a pain. -Worse, gtk-mac-bundler misses fails to catch the .so files that -are part of the gdk-pixbuf loader infrastructure. So we need to -manually adjust the load paths in them: +Worse, gtk-mac-bundler fails to catch the .so files that are part of the +gdk-pixbuf loader infrastructure. So we need to manually adjust the load +paths in them: cd packaging/macosx/staging/Subsurface.app/Contents for i in Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/* ; do \ @@ -32,10 +36,23 @@ Finally, you need to change the IDs of the libraries: for i in Resources/lib/*.dylib; do install_name_tool -id "@executable_path/../$i" $i; done -You still need to manually build a DMG if you want to easily distribute this. +Next you should sign your binaries if you plan to use them 10.8 (or later). + +Then you can use git://github.com/dirkhh/yoursway-create-dmg.git to create +a DMG (use the readlink-fix branch - unless this has been pulled into the +main project by the time you read this). + +Here is roughly how I run this to create the official DMG -cd ../../.. -hdiutil create -volname Subsurface -srcfolder staging Subsurface-<version>.dmg +~/yoursway-create-dmg/create-dmg --background ./Subsurface-Background.png \ + --window-size 500 300 --icon-size 96 \ + --volname "Subsurface-${VERSION}" --app-drop-link 380 205 \ + --volicon ~/subsurface/packaging/macosx/Subsurface.icns \ + --icon "Subsurface" 110 205 ./Subsurface-${VERSION}.dmg ./staging + +The --volicon doesn't appear to work for me even though it does create the +correct file in the DMG. I'm leaving it in here to remind me to +investigate this issue. Caveats ------- @@ -44,7 +61,9 @@ Caveats $ sudo port install pango +builtin_modules +no_x11 +quartz -Without the builtin modules the installed application fails to find the modules and doesn't render any text. +Without the builtin modules the installed application fails to find the +modules and doesn't render any text. + Also note the comment above about the -prefix * It seems that gtk-mac-bundler expects the charset.alias file to be @@ -53,6 +72,6 @@ Also note the comment above about the -prefix $ sudo cp /usr/lib/charset.alias /opt/local/lib -* libdivecomputer needs to be configured with --with-prefix=/opt/local - (or /Applications/Subsurface.app/Contents/Resources for localized builds) - +* libdivecomputer needs to be configured with + --with-prefix=/Applications/Subsurface.app/Contents/Resources + as well. diff --git a/packaging/macosx/make-package.sh b/packaging/macosx/make-package.sh index 328e73454..81e0f80f8 100755 --- a/packaging/macosx/make-package.sh +++ b/packaging/macosx/make-package.sh @@ -1,20 +1,45 @@ #!/bin/bash # # this simply automates the steps to create a DMG we can ship +# # for this to work you need to have a custom build of MacPorts / gtk / etc # with prefix=/Applications/Subsurface.app/Contents/Resources # yes, that's a major hack, but otherwise gettext cannot seem to find # the gtk related .mo files and localization is only partial # -# run this from the packaging/macosx directory +# run this from the top subsurface directory + +# adjust to your install location of gtk-mac-bundler. I appear to need at +# least 0.7.2 +BUNDLER="../.local/bin/gtk-mac-bundler" +BUNDLER_SRC="${HOME}/gtk-mac-bundler" + +# install location of yourway-create-dmg +DMGCREATE="../yoursway-create-dmg/create-dmg" + +# This is the directory into which MacPorts, libdivecomputer and all the +# other components have been installed +PREFIX="/Applications/Subsurface.app/Contents/Resources" + +# maybe we want to update this to use the git tag magic instead. That +# would be more consistent +VERSION=`grep -1 CFBundleVersionString packaging/macosx/Info.plist | tail -1 | cut -d\> -f 2 | cut -d\< -f 1` -VERSION=`grep -1 CFBundleVersionString Info.plist | tail -1 | cut -d\> -f 2 | cut -d\< -f 1` -BUNDLER="../../../.local/bin/gtk-mac-bundler" +# gtk-mac-bundler allegedly supports signing by setting this environment +# variable, but this fails as we change the shared objects below and all +# the signatures become invalid. +# export APPLICATION_CERT="Dirk" -${BUNDLER} subsurface.bundle +# first clean up the staging area +rm -rf ./staging + +# now populate it with the bundle +${BUNDLER} packaging/macosx/subsurface.bundle + +# correct the paths and names cd staging/Subsurface.app/Contents for i in Resources/lib/gdk-pixbuf-2.0/2.10.0/loaders/* ; do - ~/gtk-mac-bundler/bundler/run-install-name-tool-change.sh $i /Applications/Subsurface.app/Contents/Resources Resources change ; + ${BUNDLER_SRC}/bundler/run-install-name-tool-change.sh $i ${PREFIX} Resources change ; done for i in Resources/lib/*.dylib; do @@ -22,8 +47,18 @@ do done cd ../../.. -if [ -f Subsurface-${VERSION}.dmg ]; then - mv Subsurface-${VERSION}.dmg Subsurface-${VERSION}.dmg.bak + +codesign -s Dirk ./staging/Subsurface.app/Contents/MacOS/subsurface \ + ./staging/Subsurface.app/Contents/MacOS/subsurface-bin + +if [ -f ./Subsurface-${VERSION}.dmg ]; then + rm ./Subsurface-${VERSION}.dmg.bak + mv ./Subsurface-${VERSION}.dmg ./Subsurface-${VERSION}.dmg.bak fi -hdiutil create -volname Subsurface -srcfolder staging Subsurface-${VERSION}.dmg + +${DMGCREATE} --background ./packaging/macosx/DMG-Background.png \ + --window-size 500 300 --icon-size 96 --volname Subsurface-${VERSION} \ + --app-drop-link 380 205 \ + --volicon ~/subsurface/packaging/macosx/Subsurface.icns \ + --icon "Subsurface" 110 205 ./Subsurface-${VERSION}.dmg ./staging diff --git a/packaging/macosx/subsurface.bundle b/packaging/macosx/subsurface.bundle index 7cbeb9ee0..6f767b508 100644 --- a/packaging/macosx/subsurface.bundle +++ b/packaging/macosx/subsurface.bundle @@ -110,6 +110,17 @@ ${prefix}/share/themes </data> + <!-- Copy the mime.cache --> + <data> + ${prefix}/share/mime/mime.cache + </data> + + <!-- Copy the jpeg library that is missed by the dependency generation + --> + <data> + ${prefix}/lib/libjpeg.9.dylib + </data> + <!-- Copy icons. Note that the .icns file is an Apple format which contains up to 4 sizes of icon. You can use /Developer/Applications/Utilities/Icon Composer.app to import |