Home | History | Annotate | Line # | Download | only in lib
checkvers revision 1.1
      1 #!/bin/ksh
      2 #
      3 # Copyright (c) 1998 The NetBSD Foundation, Inc.
      4 # All rights reserved.
      5 #
      6 # This code is derived from software contributed to The NetBSD Foundation
      7 # by Eric Haszlakiewicz.
      8 #
      9 # Redistribution and use in source and binary forms, with or without
     10 # modification, are permitted provided that the following conditions
     11 # are met:
     12 # 1. Redistributions of source code must retain the above copyright
     13 #    notice, this list of conditions and the following disclaimer.
     14 # 2. Redistributions in binary form must reproduce the above copyright
     15 #    notice, this list of conditions and the following disclaimer in the
     16 #    documentation and/or other materials provided with the distribution.
     17 # 3. All advertising materials mentioning features or use of this software
     18 #    must display the following acknowledgement:
     19 #        This product includes software developed by the NetBSD
     20 #        Foundation, Inc. and its contributors.
     21 # 4. Neither the name of The NetBSD Foundation nor the names of its
     22 #    contributors may be used to endorse or promote products derived
     23 #    from this software without specific prior written permission.
     24 #
     25 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     26 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     27 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     28 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     29 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     30 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     31 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     32 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     33 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     34 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     35 # POSSIBILITY OF SUCH DAMAGE.
     36 #
     37 
     38 #--------------------------------------------------------------------#
     39 # checkvers [-q] [systemlibdir [library name]]
     40 #
     41 # This is a wrapper script around checkver.  It will find
     42 # all directories withing the current directory containing
     43 # a shlib_version file and call checkver for each.
     44 #
     45 # As with checkver, a list of directories of installed libraries
     46 # may be specified.  This will replace the default of "/usr/lib"
     47 # and search there instead.
     48 # 
     49 # A library name may also be specified.  However, this script
     50 # will not work correctly if it finds shlib_version files
     51 # corresponding to a different library.
     52 #
     53 # This script produces no output if all library version are ok.
     54 # If the versions aren't ok the header will be displayed once
     55 # followed by a list of problematic libraries.
     56 #
     57 
     58 TMP=/tmp/check.$$
     59 error=0
     60 
     61 # Cleanup on exit.
     62 trap "exit 1" 1 2 3 4 5 6 7 8 10 11 12 13 14 15
     63 trap "rm -rf $TMP" 0
     64 
     65 Usage ( ) {
     66     echo "$1 [-q] [installedlibdir [library name]]"
     67 }
     68 
     69 if echo "$*" |
     70    egrep -q '([[:space:]]|^)-h([[:space:]]|$)|([[:space:]]|^)--help*' ; then
     71     Usage $0
     72     exit 0
     73 fi
     74 
     75 if [ "X$1" = "X-q" ] ; then
     76     # Supress header.
     77     QUIET="-q"
     78     shift
     79 else
     80     QUIET=
     81 fi
     82 
     83 if [ "X$1" != "X" ] ; then
     84     LIBDIR="$1"
     85 else
     86     LIBDIR="/usr/lib"
     87 fi
     88 if [ "X$2" != "X" ] ; then
     89     LIBNAME="$2"
     90 else
     91     LIBNAME=
     92 fi
     93 
     94 if ! mkdir -m 700 $TMP ; then
     95     echo "Unable to create temp directory."
     96     exit 1
     97 fi
     98 
     99 EXECDIR=`eval "(cd \`dirname $0\` ; pwd)"`
    100 
    101 CWD=`pwd`
    102 VERFILES=`find $CWD -name shlib_version -print`
    103 
    104 for f in $VERFILES ; do
    105 
    106     (cd `dirname $f` ;
    107     "$EXECDIR"/checkver $QUIET "$LIBDIR" "$LIBNAME" ;
    108     exit $?)
    109     if [ $? -ne 0 ] ; then
    110 	QUIET="-q"
    111 	error=1
    112     fi
    113 
    114     if [ "X$LIBNAME" = "X" ] ; then
    115 	# Build the library name from the directory it's in.
    116 	libname=`dirname $f`
    117 	libname=`basename $libname`
    118 	if ! echo $libname | grep -q "^lib" ; then
    119 	    libname="lib$libname"
    120 	fi
    121     else
    122 	libname="$LIBNAME"
    123     fi
    124 
    125     if [ -e $TMP/$libname ] ; then
    126 	echo "Warning: $libname sources encountered multiple times."
    127 	echo "         Previous location: `cat $TMP/$libname`"
    128 	echo "         Current location: `dirname $f`"
    129     fi
    130     echo "`dirname $f`" > $TMP/$libname
    131 
    132 done
    133 
    134 exit 0
    135