#!/bin/sh # # Verifies that Evolution and all its supporting components # are installed correctly. A tool to weed out common # build problems. # # (C)2000 Helix Code, Inc. # Author: Peter Williams # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library 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 Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # problem() { echo "I detected the following problem: $problem" if test x"$rpmsystem" = xyes ; then echo "Suggested solution via RPM: $rpmsolution" fi if test x"$debsystem" = xyes ; then echo "Suggested solution via DEB: $debsolution" fi echo "Suggested solution via sources: $srcsolution" if test x"$comment" != x ; then echo "" echo "$comment" fi exit 1 } check_config() { #bigname=$1 #cfgname=$2 #pkgname=$3 eval $1=\${$1-$2} eval val=\$$1 if type $val /dev/null 2>&1 ; then : else problem="Cannot find $2 or it ($val) is not executable" rpmsolution="Install or reinstall the '$3-devel' package" debsolution="Install or reinstall the $3 development libraries." #FIXME srcsolution="Get the latest release of $3 and install it." comment="If you know that $3 is installed, try setting the environment variable $1 to its location" problem fi } check_prefix() { #othercfg=$1 #othername=$2 #strict=$3 eval otherpfx=\`\$$1 --prefix\` if test x"$3" = xstrict ; then if test x"$otherpfx" != x"$gl_prefix" ; then problem="gnome-libs and $2 do not share the same prefix" rpmsolution="This problem shouldn't happen with RPM installations. Verify your installation of Helix Gnome." debsolution="This problem shouldn't happen with DEB installations. Verify your installation of Helix Gnome." srcsolution="Re-run 'configure' in $2's source directory with the flag '--prefix=$gl_prefix'." problem fi else IFSbak="$IFS" ok="$GNOME_PATH:$gl_prefix" IFS=":" passed=no for e in $ok; do if test x"$e" != x ; then if test $otherpfx = $e ; then passed=yes; fi fi done IFS="$IFSbak" if test x"$passed" = xno ; then problem="$2 is not in GNOME_PATH or the same prefix as gnome-libs" rpmsolution="This problem shouldn't happen with RPM installations. Verify your installation of Helix Gnome." debsolution="This problem shouldn't happen with DEB installations. Verify your installation of Helix Gnome." srcsolution="Re-run 'configure' in $2's source directory with the flag '--prefix=$gl_prefix'." comment="Try exporting an environment variable 'GNOME_PATH' with the prefix of $2." problem fi fi } check_sysconf() { #othercfg=$1 #othername=$2 eval othersysc=\`\$$1 --sysconfdir\` if test x"$othersysc" != x"$gl_sysconf" ; then problem="gnome-libs and $2 do not share the same sysconfdir" rpmsolution="This problem shouldn't happen with RPM installations. Verify your installation of Helix Gnome." debsolution="This problem shouldn't happen with DEB installations. Verify your installation of Helix Gnome." srcsolution="Re-run 'configure' in $2's source directory with the flag '--sysconfdir=$gl_sysconf'." problem fi } check_oafinfo() { #basename=$1 #othername=$2 base=$1.oafinfo search="${oaf_prefix}/share/oaf:$OAF_INFO_PATH" IFSback="$IFS" IFS=":" ok=no for ping in $search ; do if test x"$ping" != x ; then if test -f $ping/$base ; then file=$ping/$base ok=yes fi fi done IFS="$IFSback" if test x$ok = xno ; then problem="$1.oafinfo isn't installed into Gnome's prefix or in OAF_INFO_PATH" rpmsolution="This problem shouldn't happen with RPM installations. Verify your installation of Helix Gnome." debsolution="This problem shouldn't happen with DEB installations. Verify your installation of Helix Gnome." srcsolution="Re-run 'configure' in $2's source directory with the flag '--datadir=$gl_datadir'." comment="Another likely cause of this problem would be a failed installation of $2. You should check to see that the install succeeded. You may also add the location of $1.oafinfo to the environment variable OAF_INFO_PATH" problem fi iids=`cat $file |grep iid= |sed -e 's,.*iid="\([^"]*\)".*,\1,'` IFS=" " tempfile="temp-$$-verifier" for iid in $iids ; do #echo "Attempting to activate IID \"$iid\"..." $OAF_CLIENT -qs "iid == '$iid'" >$tempfile result=`cat $tempfile |grep exception` if test x"$result" != x ; then problem="The component $2 (in $file) couldn't be activated by OAF" rpmsolution="Verify that $file is valid and that oaf and $2 are correctly installed." debsolution="Verify that $file is valid and that oaf and $2 are correctly installed." srcsolution="Verify that $file is valid and that oaf and $2 are correctly installed." comment="$OAF_CLIENT reported this: `cat $tempfile`" rm -f $tempfile problem fi done rm -f $tempfile IFS="$IFSback" } check_bin() { #name=$1 #othername=$2 IFSbak="$IFS" IFS=":" passed=no exepath= for ping in $PATH; do if test x"$ping" != x -a -x $ping/$1 ; then if test x"$passed" = xyes ; then problem="The binary $1 is installed in more than one location" rpmsolution="Make sure that you only have one copy of the package installed" debsolution="Make sure that you only have one copy of the package installed" srcsolution="Make sure that you only have one copy of the package installed" comment="You probably have a package that was installed in two different prefixes, either from source twice or from source and from RPM/deb. Remove the older copy. (Note: \"make uninstall\" works on tarballs but may damage your gettext installation)" problem fi passed=yes; exepath="$ping/$1" fi done IFS="$IFSbak" if test x"$passed" = xno ; then problem="The binary $1 isn't in your PATH" rpmsolution="This problem shouldn't happen with RPM installations. Verify your installation of Helix Gnome." debsolution="This problem shouldn't happen with DEB installations. Verify your installation of Helix Gnome." srcsolution="Re-run 'configure' in $2's source directory with the flag '--bindir=$gl_bindir'." comment="Another likely cause of this problem would be a failed installation of $2. You should check to see that the install succeeded." problem fi lddfile=temp-$$-verify-ldd $LDD $exepath $lddfile 2>/dev/null if test x$? != x0 ; then problem="The binary $1 isn't linked correctly" rpmsolution="Make sure that all its dependencies are installed correctly" debsolution="Make sure that all its dependencies are installed correctly" srcsolution="Recompile $2 and make sure that it links correctly." comment="LDD reported the following: `cat $lddfile` " problem fi IFS=" " use_bonobox=no use_bonobo=no for ping in `cat $libfile` ; do libname=`echo "$ping" |sed -e 's,^@@\([^@][^@]*\)@@[^@][^@]*@@,\1,'` libpfx=`echo "$ping" |sed -e 's,^@@[^@][^@]*@@\([^@][^@]*\)@@,\1,'` match="`cat $lddfile |grep \"${libname}\.\"`" if test x"$match" != x ; then theirlib="`echo $match |sed -e 's,.*=> \([^ ]*\).*$,\1,'`" theirdir="`dirname $theirlib`" if test x"$theirdir" != x"$libpfx" ; then problem="The binary $1 is linked against the wrong copy of $libname" rpmsolution="The package owning $libname is probably installed twice. Make sure that it's installed correctly." debsolution="The package owning $libname is probably installed twice. Make sure that it's installed correctly." srcsolution="The package owning $libname is probably installed twice. Make sure that it's installed correctly." comment="The version of $libname in $libpfx was expected" problem elif test x"$libname" = xlibbonobox ; then use_bonobox=yes elif test x"$libname" = xlibbonobo ; then use_bonobo=yes fi fi done rm -f $lddfile IFS="$IFSback" if test x"$need_bonobox" = xyes -a x"$use_bonobo" = xyes -a x"$use_bonobox" != xyes ; then problem="The binary $1 is linked against Bonobo but not Bonobo-X" rpmsolution="Get the newest possible version of $2, or install it from source if that fails" debsolution="Get the newest possible version of $2, or install it from source if that fails" srcsolution="Run './config.status --recheck' in $2's source directory and reinstall it" problem fi } check_no_gnorba() { #libs=$1 #othername=$2 ping=`echo $1 |grep 'gnorba'` if test x"$ping" != x ; then problem="$2 was built using Gnorba, not OAF" rpmsolution="This problem shouldn't happen with RPM installations. Verify your installation of Helix Gnome." debsolution="This problem shouldn't happen with DEB installations. Verify your installation of Helix Gnome." srcsolution="Update $2 and re-run 'configure' in its source directory with the flag '--enable-oaf=yes'." problem fi } add_lib_to_check() { #lib = $1 #path = $2 echo "@@${1}@@${2}@@" >>$libfile } ######################################## versionparse3() { #inst_version=$1 #reqd_version=$2 #package=$3 inst_version=`versiongrab3 "$1"` inst_major=`echo $inst_version |sed -e 's,\([0-9][0-9]*\)\..*\..*,\1,'` inst_minor=`echo $inst_version |sed -e 's,.*\.\([0-9][0-9]*\)\..*,\1,'` inst_micro=`echo $inst_version |sed -e 's,.*\..*\.\([0-9][0-9]*\),\1,'` reqd_version=`versiongrab3 "$2"` reqd_major=`echo $reqd_version |sed -e 's,\([0-9][0-9]*\)\..*\..*,\1,'` reqd_minor=`echo $reqd_version |sed -e 's,.*\.\([0-9][0-9]*\)\..*,\1,'` reqd_micro=`echo $reqd_version |sed -e 's,.*\..*\.\([0-9][0-9]*\),\1,'` ok=yes if test $inst_major -lt $reqd_major ; then ok=no elif test $inst_major -gt $reqd_major ; then ok=yes elif test $inst_minor -lt $reqd_minor; then ok=no elif test $inst_minor -gt $reqd_minor; then ok=yes elif test $inst_micro -lt $reqd_micro; then ok=no fi if test x$ok = xno ; then problem="Package $3 is not new enough ($1 detected, $2 required)" rpmsolution="Obtain a newer version and install it" depsolution="Obtain a newer version and install it" srcsolution="Obtain a newer version and install it" comment="If you think you have a newer installation, make sure that the package is not installed twice." problem fi } versiongrab3() { echo $1 |sed -e 's,.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*,\1,' } check_module3() { #$1=gnome-libs name #$2=package #$3=version $GNOME_CONFIG --modversion $1 1>/dev/null 2>/dev/null /dev/null 2>/dev/null /dev/null 2>/dev/null /dev/null 2>&1 ; then LDD="ldd -r" elif type ldd /dev/null 2>&1; then LDD="ldd" else problem="Cannot find ldd" rpmsolution="Make sure that glibc is correctly installed!?!?!?" debsolution="Make sure that glibc is correctly installed!?!?!?" srcsolution="See above" comment="If you think that you have ldd, export an environment vairable LDD that points to it." problem fi fi #gnome-libs check_config GNOME_CONFIG gnome-config gnome-libs gl_version=`$GNOME_CONFIG --version` # |sed -e 's,.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*,\1,'` gl_sysconf=`$GNOME_CONFIG --sysconfdir` gl_prefix=`$GNOME_CONFIG --prefix` gl_datadir=`$GNOME_CONFIG --datadir` gl_bindir=`$GNOME_CONFIG --bindir` versionparse3 "$gl_version" "1.0.59" "gnome-libs" add_lib_to_check libgnome `$GNOME_CONFIG --libdir` add_lib_to_check libgnomeui `$GNOME_CONFIG --libdir` #libunicode check_config UNICODE_CONFIG unicode-config libunicode check_prefix UNICODE_CONFIG libunicode versionparse2 "`$UNICODE_CONFIG --version`" "0.4" libunicode add_lib_to_check libunicode "`$UNICODE_CONFIG --prefix`/lib" #ORBit check_config ORBIT_CONFIG orbit-config ORBit check_prefix ORBIT_CONFIG ORBit add_lib_to_check libORBit "`$ORBIT_CONFIG --prefix`/lib" #oaf check_config OAF_CONFIG oaf-config oaf check_prefix OAF_CONFIG oaf versionparse3 "`$OAF_CONFIG --version`" "0.4.0" "oaf" add_lib_to_check liboaf "`$OAF_CONFIG --prefix`/lib" check_bin oafd OAF_CLIENT=${OAF_CLIENT-oaf-client} if type $OAF_CLIENT /dev/null 2>&1 ; then : else problem="oaf-client couldn't be found" rpmsolution="Install the 'oaf-devel' package" debsolution="Install the oaf development libraries" srcsolution="Make sure that oaf is installed correctly" comment="If you think you have oaf-client installed, try exporting an environment variable OAF_CLIENT pointing to it" problem fi oaf_prefix=`$OAF_CONFIG --prefix` check_oafinfo oafd oaf #gconf #check_config GCONF_CONFIG gconf-config GConf #check_prefix GCONF_CONFIG GConf #versionparse2 "`$GCONF_CONFIG --version`" "0.5" GConf #if type gconfd-1 /dev/null 2>/dev/null; then # check_oafinfo gconfd-1 GConf # check_bin gconfd-1 #else # check_oafinfo gconfd GConf # check_bin gconfd #fi #check_no_gnorba "`$GCONF_CONFIG --libs`" GConf #gnome vfs check_module3 vfs gnome-vfs "0.2.0" check_no_gnorba "`$GNOME_CONFIG --libs vfs`" gnome-vfs add_lib_to_check libgnomevfs "`$GNOME_CONFIG --libdir vfs`" #gnome print check_module2 print gnome-print "0.20" check_no_gnorba "`$GNOME_CONFIG --libs print`" gnome-print add_lib_to_check libgnomeprint "`$GNOME_CONFIG --libdir print`" #bonobo check_module2 bonobo bonobo "0.15" check_prefix "GNOME_CONFIG bonobo" bonobo strict add_lib_to_check libbonobo "`$GNOME_CONFIG --libdir bonobo`" if gnome-config --modversion bonobox /dev/null 2>&1 ; then need_bonobox=yes check_module2 bonobox bonobo "0.16" check_prefix "GNOME_CONFIG bonobox" bonobo strict add_lib_to_check libbonobox "`$GNOME_CONFIG --libdir bonobox`" fi check_oafinfo audio-ulaw bonobo check_bin bonobo-audio-ulaw bonobo check_no_gnorba "`$GNOME_CONFIG --libs bonobo`" bonobo #gtkhtml check_module2 gtkhtml GtkHTML "0.5" add_lib_to_check libgtkhtml "`$GNOME_CONFIG --libdir html`" check_oafinfo html-editor-control GtkHTML check_bin html-editor-control GtkHTML check_no_gnorba "`$GNOME_CONFIG --libs gtkhtml`" GtkHTML #evolution if test x"$EVOLUTION_PREFIX" = x ; then IFSback="$IFS" IFS=":" passed=no for ping in $PATH ; do if test x"$ping" != x -a -x $ping/evolution ; then if test x"$passed" = xyes ; then problem="Evolution is installed in more than one prefix" rpmsolution="Make sure that you only have one copy of Evolution installed" debsolution="Make sure that you only have one copy of Evolution installed" srcsolution="Make sure that you only have one copy of Evolution installed" comment="Evolution was probably installed in two different prefixes, either from source twice or from source and from RPM/deb. Remove the older copy. (Note: \"make uninstall\" works on tarballs but may damage your gettext installation)" problem else passed=yes e_prefix=$ping fi fi done IFS="$IFSbak" if test x"$passed" != xyes ; then problem="Evolution does not appear to have been installed" rpmsolution="Make sure that Evolution was installed properly (rpm -V evolution)" debsolution="Make sure that Evolution was installed properly" srcsolution="Run 'make install' in the evolution source directory" comment="I couldn't find evolution in this path: $PATH" problem fi e_prefix="`echo $e_prefix |sed -e 's,\(.*\)/[^/][^/]*,\1,'`" echo "Guessed that evolution is installed in prefix $e_prefix" else e_prefix="$EVOLUTION_PREFIX" fi add_lib_to_check libcal-client "$e_prefix/lib" add_lib_to_check libcamel "$e_prefix/lib" add_lib_to_check libcamelvee "$e_prefix/lib/evolution/camel-providers/0.5" check_oafinfo addressbook evolution check_oafinfo calendar-control evolution check_oafinfo evolution-mail evolution check_oafinfo evolution-calendar evolution check_oafinfo evolution-addressbook-select-names evolution check_oafinfo wombat evolution check_bin evolution-mail evolution check_bin evolution-calendar evolution check_bin evolution-addressbook evolution check_bin wombat evolution check_bin evolution evolution #done rm -f $libfile echo "Your Gnome system appears to be properly set up. Enjoy Evolution!" exit 0