summaryrefslogtreecommitdiff
blob: 0fb6909c8e6b1735179d94b111b4573e5f2dd9b1 (plain)
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