[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Problem: OOo 1.0.1 not keeping setting upon restart



Hi all,
I have made some adjustments to /usr/bin/openoffice

#!/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
set -x
OOVERSION="OpenOffice.org 1.0.1"

##
## 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
echo OOHOME= $OOHOME

##
## 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 ! /usr/lib/openoffice/program/setup
-R:/etc/openoffice/autoresponse.conf ; 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;                                 echo LC_ALL      =
$LC_ALL;
if [ -z $LOCALE ] ; then LOCALE="$LC_MESSAGES"; echo LC_MESSAGES =
$LC_MESSAGES; fi
if [ -z $LOCALE ] ; then LOCALE="$LANG";        echo LANG        =
$LANG;        fi
if [ -z $LOCALE ] ; then LOCALE="en-US"; fi
if [ "x$LOCALE" = "xC" ] ; then LOCALE="en-US"; fi
    
#### the problem startst here, the original script does treat de_DE and
de_DE@euro as different locales. The follwong hack cures the "euro"
problem.
#####

if [ $LOCALE != $OLDLOCALE ] && [ $LOCALE != $OLDLOCALE@euro ]; then 

    echo locale eq

else echo locale different
fi

  # 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</" \
#      <
/usr/lib/openoffice/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)
##
exec "$OOHOME/soffice" "$@"

## 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

#### this is the "/usr/bin/openoffice" (modified version) output 


cd /usr/bin/
openoffice
+ OOVERSION=OpenOffice.org 1.0.1
+ '[' -r /etc/openoffice/openoffice.conf ']'
+ OOHOME=
+ '[' -e /home/jlueters/.sversionrc ']'
+ grep -q 'OpenOffice.org 1.0.1' /home/jlueters/.sversionrc
++ sed 's|^OpenOffice.org 1.0.1=file://||'
++ grep '^OpenOffice.org 1.0.1=' /home/jlueters/.sversionrc
++ xargs echo
+ OOHOME=/home/jlueters/.openoffice/1.0.1
+ '[' '!' -e /home/jlueters/.openoffice/1.0.1 ']'
+ echo OOHOME= /home/jlueters/.openoffice/1.0.1
OOHOME= /home/jlueters/.openoffice/1.0.1
++ echo local/nomade:/tmp/.ICE-unix/22513
++ sed --quiet 's,local.*/,,p'
+ SMPID=22513
+ '[' -n 22513 ']'
+ '[' -L /proc/22513/exe ']'
++ readlink -f /proc/22513/exe
+ SESMGR=/os/usr/bin/gnome-session
+ '[' /os/usr/bin/gnome-session = /usr/bin/gnome-session ']'
+ '[' -z /home/jlueters/.openoffice/1.0.1 ']'
+ '[' 0 = 0 ']'
++ basename /usr/bin/openoffice
+
LINGFILE=/home/jlueters/.openoffice/1.0.1/user/config/registry/instance/org/openoffice/Office/Linguistic.xml
+
SETUPFILE=/home/jlueters/.openoffice/1.0.1/user/config/registry/instance/org/openoffice/Setup.xml
+ OLDLOCALE=
+ '[' -e
/home/jlueters/.openoffice/1.0.1/user/config/registry/instance/org/openoffice/Office/Linguistic.xml ']'
++ grep 'DefaultLocale cfg'
/home/jlueters/.openoffice/1.0.1/user/config/registry/instance/org/openoffice/Office/Linguistic.xml
++ sed 's/<[^>]*>//g'
++ sed 's/[[:blank:]]//g'
+ OLDLOCALE=de-DE
+ '[' -z de-DE ']'
+ '[' xde-DE = xC ']'
+ LOCALE=
+ echo LC_ALL =
LC_ALL =
+ '[' -z ']'
+ LOCALE=de_DE@euro
+ echo LC_MESSAGES = de_DE@euro
LC_MESSAGES = de_DE@euro
+ '[' -z de_DE@euro ']'
+ '[' -z de_DE@euro ']'
+ '[' xde_DE@euro = xC ']'
+ '[' de_DE@euro '!=' de-DE ']'
+ '[' de_DE@euro '!=' de-DE@euro ']'
+ echo locale eq
locale eq
+ '[' -d /home/jlueters/.openoffice/user ']'
+ exec /home/jlueters/.openoffice/1.0.1/soffice

-- 
Juergen Lueters

Vom Senator für Wirtschaft, Mittelstand, Technologie 
und Europaangelegenheiten der Freien Hansestadt Bremen 
öffentlich bestellter und vereidigter Sachverständiger 
für Systeme und Anwendungen der Informationsverarbeitung

Intranet Engineering GmbH
Inselstr. 18
D-28207 Bremen
Tel.: +49-(0)421-493990
E-Mail jlueters@intranet-engineering.de
http://www.intranet-engineering.de
http://www.sv.lueters.de



Reply to: