mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 17:33:24 +00:00
Add packaging files for MacOS
I couldn't figure out how the current packaging infrastructure was supposed to work, but with not too much work I could get the more standard gtk-mac-bundler to do what I wanted, so I added the support files needed for that and a little README on how to use them. The subsurface.sh and subsurface.bundle files are based on the launcher.sh and gtk-demo.bundle files from the gtk-mac-bundler release which is under GPLv2. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
0559a6a783
commit
73f290be8f
4 changed files with 327 additions and 2 deletions
|
@ -3,18 +3,24 @@
|
|||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>Subsurface</string>
|
||||
<string>Subsurface.icns</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Subsurface</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>Rough divelog in C and Gtk</string>
|
||||
<string>Multi Platform Divelog in C and Gtk</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>subsurface</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.hohndel.subsurface</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersionString</key>
|
||||
<string>2.0-rc1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
16
packaging/macosx/README
Normal file
16
packaging/macosx/README
Normal file
|
@ -0,0 +1,16 @@
|
|||
Creating a Subsurface bundle
|
||||
|
||||
install gtk-mac-bundler (this has been tested with version 0.7.0) and run
|
||||
|
||||
gtk-mac-bundler subsurface.bundle
|
||||
|
||||
This should install a self-contained Subsurface application under /Applications/Subsurface.app
|
||||
You still need to manually build a DMG if you want to easily distribute this.
|
||||
|
||||
One important caveat is that (at least with MacPorts) you need to build pango like this:
|
||||
|
||||
sudo port install pango +builtin_modules +no_x11 +quart
|
||||
|
||||
Without the builtin modules the installed application fails to find the modules and doesn't render any text.
|
||||
|
||||
|
135
packaging/macosx/subsurface.bundle
Normal file
135
packaging/macosx/subsurface.bundle
Normal file
|
@ -0,0 +1,135 @@
|
|||
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
||||
<app-bundle>
|
||||
|
||||
<meta>
|
||||
<!-- Where to pick up the GTK+ installation, icon themes,
|
||||
etc. Note that "${env:JHBUILD_PREFIX}" is evaluated to the
|
||||
value of the environment variable JHBUILD_PREFIX. You can
|
||||
define additional prefixes and refer to them in paths
|
||||
throughout this file on the form "${prefix:name}". This is
|
||||
useful for installing certain libraries or even the
|
||||
application itself separately. Note that JHBUILD_PREFIX is
|
||||
defined by jhbuild, so it you are not using jhbuild you can
|
||||
either define your own or just hardcode the path here.
|
||||
-->
|
||||
<prefix name="default">/opt/local</prefix>
|
||||
|
||||
<!-- The project directory is the default location of the created
|
||||
app. If you leave out the path, the current directory is
|
||||
used. Note the usage of an environment variable here again.
|
||||
-->
|
||||
<destination overwrite="yes">/Applications</destination>
|
||||
|
||||
<image>
|
||||
<!-- Not implemented yet (DMG image). -->
|
||||
</image>
|
||||
|
||||
<!-- Comment this out to keep the install names in binaries -->
|
||||
<run-install-name-tool/>
|
||||
|
||||
<!-- Optionally specify a launcher script to use. If the
|
||||
application sets up everything needed itself, like
|
||||
environment variable, linker paths, etc, a launcher script is
|
||||
not needed. If the source path is left out, the default
|
||||
script will be used.
|
||||
-->
|
||||
<launcher-script>${project}/subsurface.sh</launcher-script >
|
||||
|
||||
<!-- Not implemented: Optional runtime, could be python or mono
|
||||
for example.
|
||||
-->
|
||||
<!-- runtime copy="yes">/usr/bin/python</runtime -->
|
||||
<!-- Indicate the active gtk version to use. This is needed only
|
||||
for gtk+-3.0 projects. -->
|
||||
<gtk>gtk+-2.0</gtk>
|
||||
</meta>
|
||||
|
||||
<!-- The special macro "${project}" refers to the directory where
|
||||
this bundle file is located. The application name and bundle
|
||||
identifier are taken from the plist file.
|
||||
-->
|
||||
<plist>${project}/Info.plist</plist>
|
||||
|
||||
<main-binary dest="${bundle}/Contents/MacOS">${project}/../../subsurface</main-binary>
|
||||
|
||||
<!-- Copy in GTK+ modules. Note the ${gtkdir} macro, which expands
|
||||
to the correct library subdirectory for the specified gtk
|
||||
version.
|
||||
-->
|
||||
<binary>
|
||||
${prefix}/lib/${gtkdir}/modules/*.so
|
||||
</binary>
|
||||
|
||||
<!-- Copy in GTK+ theme engines and print backends. Note the use of the
|
||||
"${pkg:module:variable}" macro, which evaluates to a pkg-config
|
||||
variable in the specified module. Note that any libraries that
|
||||
binaries link to are also copied in automatically. Note also
|
||||
the included ${gtk} macro, which gets the correct package name
|
||||
to get. -->
|
||||
<binary>
|
||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/engines/*.so
|
||||
</binary>
|
||||
<binary>
|
||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/printbackends/*.so
|
||||
</binary>
|
||||
|
||||
<!-- Starting with 2.24, gdk-pixbuf installs into its own directory. -->
|
||||
<binary>
|
||||
${prefix}/lib/gdk-pixbuf-2.0/${pkg:${gtk}:gtk_binary_version}/*.so
|
||||
</binary>
|
||||
|
||||
<!-- Translation filenames, one for each program or library that you
|
||||
want to copy in to the bundle. The "dest" attribute is
|
||||
optional, as usual. Bundler will find all translations of that
|
||||
library/program under the indicated directory and copy them.-->
|
||||
<translations name="gtk20">
|
||||
${prefix}/share/locale
|
||||
</translations>
|
||||
|
||||
|
||||
<!-- Data to copy in, usually Glade/UI files, images, sounds files
|
||||
etc. The destination inside the bundle can be specified if the
|
||||
files should end up at a different location, by using the
|
||||
"dest" property. The destination must then start with the macro
|
||||
"${bundle}", which refers to the bundle root directory.
|
||||
-->
|
||||
<!-- data
|
||||
${prefix}/share/gtk-demo
|
||||
</data -->
|
||||
|
||||
<!-- Copy in the themes data. You may want to trim this to save space
|
||||
in your bundle. -->
|
||||
<data>
|
||||
${prefix}/share/themes
|
||||
</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
|
||||
artwork and create the file. -->
|
||||
<data dest="${bundle}/Contents/Resources">
|
||||
${project}/Subsurface.icns
|
||||
</data>
|
||||
|
||||
<!-- This is where theme commands go. You can copy them in from your
|
||||
theme of choice if they provide and example, or you can just
|
||||
change the source path. -->
|
||||
|
||||
<data dest="${bundle}/Contents/Resources/etc/${gtkdir}/gtkrc">
|
||||
${project}/gtkrc
|
||||
</data>
|
||||
|
||||
<!-- Icon themes to copy. The "icons" property can be either of
|
||||
"auto", "all", or "none". All or none should be
|
||||
self-explanatory, while auto means that the script will try to
|
||||
figure out which icons are needed. This is done by getting all
|
||||
the strings from all copied binaries, and matching them against
|
||||
icon names. To be safe, you should use "all". "none" is useful
|
||||
if you want just the index.theme file but no icons, mostly
|
||||
needed for the "hicolor" base theme.
|
||||
>
|
||||
<icon-theme icons="auto">
|
||||
Tango
|
||||
</icon-theme -->
|
||||
|
||||
</app-bundle>
|
168
packaging/macosx/subsurface.sh
Executable file
168
packaging/macosx/subsurface.sh
Executable file
|
@ -0,0 +1,168 @@
|
|||
#!/bin/sh
|
||||
|
||||
if test "x$GTK_DEBUG_LAUNCHER" != x; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
if test "x$GTK_DEBUG_GDB" != x; then
|
||||
EXEC="gdb --args"
|
||||
else
|
||||
EXEC=exec
|
||||
fi
|
||||
|
||||
name=`basename "$0"`
|
||||
tmp="$0"
|
||||
tmp=`dirname "$tmp"`
|
||||
tmp=`dirname "$tmp"`
|
||||
bundle=`dirname "$tmp"`
|
||||
bundle_contents="$bundle"/Contents
|
||||
bundle_res="$bundle_contents"/Resources
|
||||
bundle_lib="$bundle_res"/lib
|
||||
bundle_bin="$bundle_res"/bin
|
||||
bundle_data="$bundle_res"/share
|
||||
bundle_etc="$bundle_res"/etc
|
||||
|
||||
#export DYLD_LIBRARY_PATH="$bundle_lib"
|
||||
export XDG_CONFIG_DIRS="$bundle_etc"/xdg
|
||||
export XDG_DATA_DIRS="$bundle_data"
|
||||
export GTK_DATA_PREFIX="$bundle_res"
|
||||
export GTK_EXE_PREFIX="$bundle_res"
|
||||
export GTK_PATH="$bundle_res"
|
||||
|
||||
export GTK2_RC_FILES="$bundle_etc/gtk-2.0/gtkrc"
|
||||
export GTK_IM_MODULE_FILE="$bundle_etc/gtk-2.0/gtk.immodules"
|
||||
export GDK_PIXBUF_MODULE_FILE="$bundle_etc/gtk-2.0/gdk-pixbuf.loaders"
|
||||
export PANGO_RC_FILE="$bundle_etc/pango/pangorc"
|
||||
|
||||
APP=name
|
||||
I18NDIR="$bundle_data/locale"
|
||||
# Set the locale-related variables appropriately:
|
||||
unset LANG LC_MESSAGES LC_MONETARY LC_COLLATE
|
||||
|
||||
# Has a language ordering been set?
|
||||
# If so, set LC_MESSAGES and LANG accordingly; otherwise skip it.
|
||||
# First step uses sed to clean off the quotes and commas, to change - to _, and change the names for the chinese scripts from "Hans" to CN and "Hant" to TW.
|
||||
APPLELANGUAGES=`defaults read .GlobalPreferences AppleLanguages | sed -En -e 's/\-/_/' -e 's/Hant/TW/' -e 's/Hans/CN/' -e 's/[[:space:]]*\"?([[:alnum:]_]+)\"?,?/\1/p' `
|
||||
if test "$APPLELANGUAGES"; then
|
||||
# A language ordering exists.
|
||||
# Test, item per item, to see whether there is an corresponding locale.
|
||||
for L in $APPLELANGUAGES; do
|
||||
#test for exact matches:
|
||||
if test -f "$I18NDIR/${L}/LC_MESSAGES/$APP.mo"; then
|
||||
export LANG=$L
|
||||
break
|
||||
fi
|
||||
#This is a special case, because often the original strings are in US
|
||||
#English and there is no translation file.
|
||||
if test "x$L" == "xen_US"; then
|
||||
export LANG=$L
|
||||
break
|
||||
fi
|
||||
#OK, now test for just the first two letters:
|
||||
if test -f "$I18NDIR/${L:0:2}/LC_MESSAGES/$APP.mo"; then
|
||||
export LANG=${L:0:2}
|
||||
break
|
||||
fi
|
||||
#Same thing, but checking for any english variant.
|
||||
if test "x${L:0:2}" == "xen"; then
|
||||
export LANG=$L
|
||||
break
|
||||
fi;
|
||||
done
|
||||
fi
|
||||
unset APPLELANGUAGES L
|
||||
|
||||
# If we didn't get a language from the language list, try the Collation preference, in case it's the only setting that exists.
|
||||
APPLECOLLATION=`defaults read .GlobalPreferences AppleCollationOrder`
|
||||
if test -z ${LANG} -a -n $APPLECOLLATION; then
|
||||
if test -f "$I18NDIR/${APPLECOLLATION:0:2}/LC_MESSAGES/$APP.mo"; then
|
||||
export LANG=${APPLECOLLATION:0:2}
|
||||
fi
|
||||
fi
|
||||
if test ! -z $APPLECOLLATION; then
|
||||
export LC_COLLATE=$APPLECOLLATION
|
||||
fi
|
||||
unset APPLECOLLATION
|
||||
|
||||
# Continue by attempting to find the Locale preference.
|
||||
APPLELOCALE=`defaults read .GlobalPreferences AppleLocale`
|
||||
|
||||
if test -f "$I18NDIR/${APPLELOCALE:0:5}/LC_MESSAGES/$APP.mo"; then
|
||||
if test -z $LANG; then
|
||||
export LANG="${APPLELOCALE:0:5}"
|
||||
fi
|
||||
|
||||
elif test -z $LANG -a -f "$I18NDIR/${APPLELOCALE:0:2}/LC_MESSAGES/$APP.mo"; then
|
||||
export LANG="${APPLELOCALE:0:2}"
|
||||
fi
|
||||
|
||||
#Next we need to set LC_MESSAGES. If at all possilbe, we want a full
|
||||
#5-character locale to avoid the "Locale not supported by C library"
|
||||
#warning from Gtk -- even though Gtk will translate with a
|
||||
#two-character code.
|
||||
if test -n $LANG; then
|
||||
#If the language code matches the applelocale, then that's the message
|
||||
#locale; otherwise, if it's longer than two characters, then it's
|
||||
#probably a good message locale and we'll go with it.
|
||||
if test $LANG == ${APPLELOCALE:0:5} -o $LANG != ${LANG:0:2}; then
|
||||
export LC_MESSAGES=$LANG
|
||||
#Next try if the Applelocale is longer than 2 chars and the language
|
||||
#bit matches $LANG
|
||||
elif test $LANG == ${APPLELOCALE:0:2} -a $APPLELOCALE > ${APPLELOCALE:0:2}; then
|
||||
export LC_MESSAGES=${APPLELOCALE:0:5}
|
||||
#Fail. Get a list of the locales in $PREFIX/share/locale that match
|
||||
#our two letter language code and pick the first one, special casing
|
||||
#english to set en_US
|
||||
elif test $LANG == "en"; then
|
||||
export LC_MESSAGES="en_US"
|
||||
else
|
||||
LOC=`find $PREFIX/share/locale -name $LANG???`
|
||||
for L in $LOC; do
|
||||
export LC_MESSAGES=$L
|
||||
done
|
||||
fi
|
||||
else
|
||||
#All efforts have failed, so default to US english
|
||||
export LANG="en_US"
|
||||
export LC_MESSAGES="en_US"
|
||||
fi
|
||||
CURRENCY=`echo $APPLELOCALE | sed -En 's/.*currency=([[:alpha:]]+).*/\1/p'`
|
||||
if test "x$CURRENCY" != "x"; then
|
||||
#The user has set a special currency. Gtk doesn't install LC_MONETARY files, but Apple does in /usr/share/locale, so we're going to look there for a locale to set LC_CURRENCY to.
|
||||
if test -f /usr/local/share/$LC_MESSAGES/LC_MONETARY; then
|
||||
if test -a `cat /usr/local/share/$LC_MESSAGES/LC_MONETARY` == $CURRENCY; then
|
||||
export LC_MONETARY=$LC_MESSAGES
|
||||
fi
|
||||
fi
|
||||
if test -z "$LC_MONETARY"; then
|
||||
FILES=`find /usr/share/locale -name LC_MONETARY -exec grep -H $CURRENCY {} \;`
|
||||
if test -n "$FILES"; then
|
||||
export LC_MONETARY=`echo $FILES | sed -En 's%/usr/share/locale/([[:alpha:]_]+)/LC_MONETARY.*%\1%p'`
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
#No currency value means that the AppleLocale governs:
|
||||
if test -z "$LC_MONETARY"; then
|
||||
LC_MONETARY=${APPLELOCALE:0:5}
|
||||
fi
|
||||
#For Gtk, which only looks at LC_ALL:
|
||||
export LC_ALL=$LC_MESSAGES
|
||||
|
||||
unset APPLELOCALE FILES LOC
|
||||
|
||||
if test -f "$bundle_lib/charset.alias"; then
|
||||
export CHARSETALIASDIR="$bundle_lib"
|
||||
fi
|
||||
|
||||
# Extra arguments can be added in environment.sh.
|
||||
EXTRA_ARGS=
|
||||
if test -f "$bundle_res/environment.sh"; then
|
||||
source "$bundle_res/environment.sh"
|
||||
fi
|
||||
|
||||
# Strip out the argument added by the OS.
|
||||
if /bin/expr "x$1" : '^x-psn_' > /dev/null; then
|
||||
shift 1
|
||||
fi
|
||||
|
||||
$EXEC "$bundle_contents/MacOS/$name-bin" "$@" $EXTRA_ARGS
|
Loading…
Add table
Reference in a new issue