1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
#!/bin/sh
#
# Wrapper script for openoffice
#
# (C) Peter 'Nidd' Novodvorsky, 2001,2002
# (C) Martin 'empty' Quinson, 2002.
# Modifications by Chris Halls
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# this string should be exactly as in ~/.sversionrc
OOVERSION="OpenOffice.org <pv>"
##
## Source system configuration file
##
[ -r /etc/openoffice/openoffice.conf ] && . /etc/openoffice/openoffice.conf
##
## where does OO live for this user ?
##
OOHOME=""
if [ -e ~/.sversionrc ] && grep -q "$OOVERSION" ~/.sversionrc ; then
# already installed for this user (warning, .sversionrc is DOS encoded)
OOHOME=`grep "^$OOVERSION=" ~/.sversionrc| \
sed "s|^$OOVERSION=file://||" | \
xargs echo`
if [ ! -e $OOHOME ] ; then
echo "I'm confused because I can't find OpenOffice's user files."
echo "Your ~/.sversionrc file tells they should be under $OOHOME,"
echo "but they are not. Please fix the situation manually."
echo "You may want to edit ~/.sversionrc to indicate where is OO"
echo "installed, or remove it if you did remove your installation"
echo "directory manually (you bad one)."
exit 1
fi
fi
##
## Unset SESSION_MANAGER if gnome-session is the session manager
## See http://www.openoffice.org/issues/show_bug.cgi?id=4494
##
SMPID=`echo $SESSION_MANAGER | sed --quiet "s,local.*/,,p"`
if [ -n "$SMPID" ] && [ -L /proc/"$SMPID"/exe ]; then
SESMGR="`readlink -f /proc/$SMPID/exe`"
if [ "$SESMGR" = "/usr/bin/gnome-session" ]; then
echo "Gnome session manager detected - session management disabled"
unset SESSION_MANAGER
fi
fi
##
## install OO for this user if needed
##
if [ -z "$OOHOME" ] ; then
if [ -e /etc/openoffice/autoresponse.conf ] && \
grep -q DESTINATIONPATH /etc/openoffice/autoresponse.conf ; then
# first install
OOHOME=`grep DESTINATIONPATH /etc/openoffice/autoresponse.conf | \
sed -e 's/DESTINATIONPATH=//' -e "s|<home>|$HOME|"`
if [ -d "$OOHOME" ]; then
echo "openoffice.org: You have no entry for $OOVERSION in ~/.sversionrc, "
echo "yet the directory $OOHOME exists."
echo "Please remove $OOHOME and try again."
exit 1
fi
echo "running openoffice.org setup..."
if ! /opt/OpenOffice.org<pv>/program/setup -R:/etc/openoffice/autoresponse.conf >& /dev/null; then
echo "setup failed.. abort"
exit 1
fi
echo "Setup complete. Running openoffice.org..."
else
echo "openoffice.org: Damnit! I can't find OpenOffice's user files. Did you break"
echo "the /etc/openoffice/autoresponse.conf file manually ?"
echo "This file should contain DESTINATIONPATH"
exit 1
fi
fi
##
## If no file is specified on the command line, which application to start?
## The wrapper can be called from several links in /usr/bin
##
if [ $# = 0 ]; then
case `basename $0` in
oocalc) set -- private:factory/scalc;;
oodraw) set -- private:factory/sdraw;;
ooimpress) set -- private:factory/simpress;;
oomath) set -- private:factory/smath;;
oowriter) set -- private:factory/swriter;;
esac
fi
##
##
## Change the config files to conform to current locale used
##
# Fix some variable to make the paths shorter in the rest
LINGFILE="$OOHOME/user/config/registry/instance/org/openoffice/Office/Linguistic.xml"
SETUPFILE="$OOHOME/user/config/registry/instance/org/openoffice/Setup.xml"
# Search the right locale
OLDLOCALE=""
if [ -e $LINGFILE ] ; then
OLDLOCALE=`grep 'DefaultLocale cfg' $LINGFILE|sed 's/<[^>]*>//g'|sed 's/[[:blank:]]//g'`
fi
if [ -z $OLDLOCALE ]; then OLDLOCALE="en-US"; fi
if [ "x$OLDLOCALE" = "xC" ]; then OLDLOCALE="en-US"; fi
LOCALE=$LC_ALL
if [ -z $LOCALE ] ; then LOCALE="$LC_MESSAGES"; fi
if [ -z $LOCALE ] ; then LOCALE="$LANG"; fi
if [ -z $LOCALE ] ; then LOCALE="en-US"; fi
if [ "x$LOCALE" = "xC" ] ; then LOCALE="en-US"; fi
if [ $LOCALE != $OLDLOCALE ] ; then
# Change instdb.ins
cp $OOHOME/instdb.ins $OOHOME/instdb.ins.$OLDLOCALE
sed "s/>$OLDLOCALE</>$LOCALE</" $OOHOME/instdb.ins.$OLDLOCALE > $OOHOME/instdb.ins
# Create Linguistic.xml if don't exists
if [ ! -e $LINGFILE.$OLDLOCALE ] ; then
# get a default one, and change en-US to OLDLOCALE inside. I guess this is a noop, but I'm not sure
sed "s/>en-US</>$OLDLOCALE</" \
< /opt/OpenOffice.org<pv>/share/config/registry/instance/org/openoffice/Office/Linguistic.xml \
> $LINGFILE.$OLDLOCALE
fi
# change Linguistic.xml
sed "s/>$OLDLOCALE</>$LOCALE</" $LINGFILE.$OLDLOCALE > $LINGFILE
# Change Setup.xml
if grep -q '<ooLocale cfg:type' $SETUPFILE ; then
cp $SETUPFILE $SETUPFILE.$OLDLOCALE
sed "s/>$OLDLOCALE</>$LOCALE</" $SETUPFILE.$OLDLOCALE > $SETUPFILE
else # ooLocale entry does not exists in Setup.xml
cp $SETUPFILE $SETUPFILE.tmp
cat $SETUPFILE.tmp | \
perl -e "while (<>) { /<Office>/ && print \"<L10N>\n<ooLocale cfg:type=\\\"string\\\">$LOCALE</ooLocale>\n</L10N>\n\";print \$_;}" > \
$SETUPFILE
# this perl command is to add a <L10N> section if it does not exists.
# On my machine, it produce the following patch:
# <Setup state="modified" cfg:package="org.openoffice" xmlns="http://openoffice.org/2000/registry/components/Setup" xmlns:cfg="http://openoffice.org/2000/registry/instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
#+ <L10N>
#+ <ooLocale cfg:type="string">fr_FR@euro</ooLocale>
#+ </L10N>
# <Office>
rm $SETUPFILE.tmp
fi # change Setup.xml
fi # LOCALE != OLDLOCALE
## Previous dead installation?
[ -d $HOME/.openoffice/user ] && echo "Warning: you have a user settings directory from 1.0.0 in ~/.openoffice/user - this is no longer used"
##
## That's it. Launch the beast (with the given args)
##
export LD_PRELOAD=/usr/lib/libfreetype.so
case `basename $0` in
oosetup) exec "$OOHOME/setup" ;;
oopadmin) exec "$OOHOME/spadmin" ;;
*) exec "$OOHOME/soffice" "$@" ;;
esac
## Changelog
# 07/10 challs
# * use 1.0.1 directory and improve error checking
# 07/02 challs
# * use readlink in /proc/PID/exe to get
# real session manager name
# 06/12 challs
# * merge into main package
# * change $@ to "$@"
# * source configuration file:
# /etc/openoffice/openoffice.conf
# 06/12 mquinson
# * strace only when DEBUG is set to yes
# * readd the $@ to pass the args to soffice
# 06/06 mquinson
# * Make sure the OLDLOCALE is never empty
# * handle the case where the locale is C
|