3
# Copyright (C) 2008, 2009 Rob Caelers <robc@krandor.nl>
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with this program. If not, see <http://www.gnu.org/licenses/>.
19
# Based on code from inkscape, growl, adium, mozilla and probably others.
22
# ------------------------------------------------------------
24
# ------------------------------------------------------------
26
LIBPREFIX=$HOME/gtk/inst
29
PACKAGE_VERSION=`grep PACKAGE_VERSION ../../../config.h | cut -d' ' -f 3 | sed "s/\\"//g"`
31
# ------------------------------------------------------------
33
# ------------------------------------------------------------
37
Create Workrave application bundle for OS X
41
--help, -h Display this help message
42
--keep-symbols Keep debugging symbols
43
--link Create symlinks
44
--import-frameworks Import frameworks in Workrave.app
45
--gtk-dylib Copy Gtk dynalic libraries
49
# ------------------------------------------------------------
50
# Parse command line arguments
51
# ------------------------------------------------------------
55
conf_copy_gtk_dylib=false
56
conf_import_frameworks=false
62
conf_copy_gtk_dylib=true ;;
71
conf_import_frameworks=true ;;
84
# ------------------------------------------------------------
86
# ------------------------------------------------------------
88
osx_minor_version=`/usr/bin/sw_vers | grep ProductVersion | cut -f2 -d'.'`
90
pkgrootdir=`pwd`/$PACKAGE
91
pkgcontentsdir=$pkgrootdir/Contents
92
pkgexecdir=$pkgcontentsdir/MacOS
93
pkgresourcesdir=$pkgcontentsdir/Resources
94
pkgframeworksdir=$pkgcontentsdir/Frameworks
95
pkgdatadir=$pkgresourcesdir/share
96
pkgetcdir=$pkgresourcesdir/etc
97
pkglibdir=$pkgresourcesdir/lib
98
pkgthemedir=$pkgresourcesdir/themes
100
sed -e "s?@ENV@?$env?g" -e "s?@VERSION@?$PACKAGE_VERSION?g" < Info.plist.in > Info.plist
102
# ------------------------------------------------------------
103
# Create directory layout
104
# ------------------------------------------------------------
107
echo -e "Creating Workrave application bundle"
108
echo -e "Workrave version is $PACKAGE_VERSION"
112
echo "Removing old $PACKAGE tree"
116
echo "Building new app directory structure"
118
mkdir -p $pkgresourcesdir
119
mkdir -p $pkgframeworksdir
123
# ------------------------------------------------------------
125
# ------------------------------------------------------------
127
echo "Installing Workrave"
129
if [ $conf_symlink = false ]; then
135
make install -C ../../../ \
136
prefix=$pkgrootdir bindir=$pkgexecdir pkgdatadir=$pkgresourcesdir \
137
datadir=$pkgresourcesdir soundsbasedir=$pkgresourcesdir/sounds \
138
DATADIRNAME=Contents/Resources > install.log 2>&1
140
if [ $conf_symlink = true ]; then
141
rm -rf $pkgexecdir/workrave
142
ln -s ../../../frontend/gtkmm/src/workrave $pkgexecdir
145
rm -rf $pkgrootdir/lib
146
rm -rf $pkgrootdir/libexec
148
if [ $conf_copy_gtk_dylib = true ]; then
149
mv $pkgexecdir/$BINARY $pkgexecdir/${BINARY}-bin
150
$INSTALL workrave $pkgexecdir
153
cp Info.plist $pkgcontentsdir
154
$INSTALL ../../../frontend/common/share/images/osx/workrave.icns $pkgresourcesdir
156
echo -n "APPL????" > $pkgcontentsdir/PkgInfo
158
# ------------------------------------------------------------
160
# ------------------------------------------------------------
162
if [ $conf_copy_gtk_dylib = true ]; then
164
echo "Installing Pango modules"
166
pango_version=`pkg-config --variable=pango_module_version pango`
168
mkdir -p $pkglibdir/pango/$pango_version/modules
169
cp $LIBPREFIX/lib/pango/$pango_version/modules/*.so $pkglibdir/pango/$pango_version/modules/
171
mkdir -p $pkgetcdir/pango
173
$LIBPREFIX/bin/pango-querymodules \
174
| sed "s?$LIBPREFIX/lib/pango/$pango_version/modules/?@executable_path/../Resources/lib/pango/$pango_version/modules/?" \
175
> $pkgetcdir/pango/pango.modules
177
mkdir -p $pkgetcdir/fonts
178
cp $LIBPREFIX/etc/fonts/fonts.dtd $pkgetcdir/fonts/
179
cp -r $LIBPREFIX/etc/fonts/conf.avail $pkgetcdir/fonts/
180
cp -r $LIBPREFIX/etc/fonts/conf.d $pkgetcdir/fonts/
181
cp fonts.conf $pkgetcdir/fonts
183
cat > $pkgetcdir/pango/pangorc << END
185
ModuleFiles=./pango.modules
190
# ------------------------------------------------------------
192
# ------------------------------------------------------------
194
if [ $conf_copy_gtk_dylib = true ]; then
196
gtk_version=`pkg-config --variable=gtk_binary_version gtk+-2.0`
198
mkdir -p $pkglibdir/gtk-2.0/$gtk_version/{engines,immodules,loaders}
199
mkdir -p $pkgetcdir/gtk-2.0
201
cp -r $LIBPREFIX/lib/gtk-2.0/$gtk_version/engines/* $pkglibdir/gtk-2.0/$gtk_version/engines/
202
cp $LIBPREFIX/lib/gtk-2.0/$gtk_version/immodules/*.so $pkglibdir/gtk-2.0/$gtk_version/immodules/
203
cp $LIBPREFIX/lib/gtk-2.0/$gtk_version/loaders/*.so $pkglibdir/gtk-2.0/$gtk_version/loaders/
205
sed "s?$LIBPREFIX/lib/gtk-2.0/$gtk_version/loaders/?@executable_path/../Resources/lib/gtk-2.0/$gtk_version/loaders/?" \
206
< $LIBPREFIX/etc/gtk-2.0/gdk-pixbuf.loaders \
207
> $pkgetcdir/gtk-2.0/gdk-pixbuf.loaders
209
sed "s?$LIBPREFIX/lib/gtk-2.0/$gtk_version/immodules/?@executable_path/../Resources/lib/gtk-2.0/$gtk_version/immodules/?" \
210
< $LIBPREFIX/etc/gtk-2.0/gtk.immodules \
211
> $pkgetcdir/gtk-2.0/gtk.immodules
214
mkdir -p $pkgthemedir/Leopardish-normal
215
cp -r ~/.themes/Leopardish-normal/* $pkgthemedir/Leopardish-normal
217
mkdir -p $pkgthemedir/Quartz
218
cp -r $LIBPREFIX/share/themes/Quartz/gtk-2.0 $pkgthemedir/Quartz
221
# ------------------------------------------------------------
222
# Install dependencies
223
# ------------------------------------------------------------
225
if [ $conf_copy_gtk_dylib = true ]; then
227
echo "Installing dependencies"
232
LIBS=`find $pkgrootdir \( -name "*.so*" -or -name "*.dylib" \) -print`
233
EXECS=`find $pkgexecdir -type f -print`
234
libs="`otool -L $LIBS $EXECS 2>/dev/null | fgrep compatibility | cut -d\( -f1 | grep $LIBPREFIX | sort | uniq`"
235
if [ x$libs != x ] ; then
236
cp -f $libs $pkglibdir
238
num_files=`ls $pkglibdir | wc -l`
239
if [ $num_files = $total ];
247
# ------------------------------------------------------------
249
# ------------------------------------------------------------
251
echo "Fixing up library names"
253
LIBS=`find $pkgrootdir \( -name "*.so*" -or -name "*.dylib" \) -print`
254
EXECS=`find $pkgexecdir -type f -print`
256
for f in $EXECS $LIBS; do
260
for lib in `otool -L $f | egrep "($LIBPREFIX|/local/|libs/)" | awk '{print $1}'` ; do
262
changes="$changes -change $lib @executable_path/../Resources/lib/$base"
265
if [ "x$changes" != x ];
267
if install_name_tool $changes $f ;
276
ext=`echo $base | sed -e 's/.*\.\([^.]*\)/\1/'`
278
if [ "x$ext" = "xso" -o "x$ext" = "xdylib" ];
280
install_name_tool -id @executable_path/../Resources/lib/$base $f
285
# ------------------------------------------------------------
286
# Importing Frameworks
287
# ------------------------------------------------------------
289
if [ "$conf_import_frameworks" = "true" ];
291
echo "Importing Frameworks"
293
./import-frameworks.sh
295
rm -rf $pkgframeworksdir/Gtk.framework/Versions/2/Resources/share/icons/gnome
296
rm -rf $pkgframeworksdir/Gtk.framework/Versions/2/Resources/share/icons/hicolor
299
# ------------------------------------------------------------
301
# ------------------------------------------------------------
303
if [ "$conf_strip" = "true" ];
305
echo "Stripping debugging symbols"
306
if [ $conf_copy_gtk_dylib = true ]; then
307
chmod +w $pkglibdir/*.dylib
308
strip -x $pkglibdir/*.dylib
310
strip -ur `find $pkgexecdir -type f -print`
311
strip -xS `find $pkgframeworksdir -name "*.dylib" -print`
313
for framework in $pkgframeworksdir/* ; do
314
base=`basename $framework .framework`
315
strip -xS $framework/$base
323
#------------------------------------------------------------
325
packagemaker=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
326
pkgName="Workrave-${version}.pkg"
330
echo "Prepare for PackageManager"
333
sudo mkdir -p pkgroot
335
basedir="/Applications/Workrave"
336
sudo mkdir -p "pkgroot/$basedir"
337
sudo cp -R Workrave.app "pkgroot/$basedir"
339
sudo find pkgroot -type d -print0 | xargs -0 sudo chmod 755
340
sudo find pkgroot -type f -print0 | xargs -0 sudo chmod 644
341
sudo find pkgroot -name '*.sh' -print0 | xargs -0 sudo chmod 755
342
sudo chown -R root:wheel pkgroot
344
sudo chmod 775 pkgroot/Applications
345
sudo chown root:admin pkgroot/Applications
346
sudo chmod 1775 pkgroot/Library
347
sudo chown root:admin pkgroot/Library
349
echo "Exec PackageMaker"
352
sudo $packagemaker -build \
356
-r pkginfo/Resources \
357
-i pkginfo/Info.plist \
358
-d pkginfo/Description.plist