Home | History | Annotate | Line # | Download | only in lib
checkoldver revision 1.2.30.1
      1 #!/bin/sh
      2 #	$NetBSD: checkoldver,v 1.2.30.1 2008/05/18 12:30:09 yamt Exp $
      3 #
      4 # Copyright (c) 2002 The NetBSD Foundation, Inc.
      5 # All rights reserved.
      6 #
      7 # This code is derived from software contributed to The NetBSD Foundation
      8 # by Christos Zoulas.
      9 #
     10 # Redistribution and use in source and binary forms, with or without
     11 # modification, are permitted provided that the following conditions
     12 # are met:
     13 # 1. Redistributions of source code must retain the above copyright
     14 #    notice, this list of conditions and the following disclaimer.
     15 # 2. Redistributions in binary form must reproduce the above copyright
     16 #    notice, this list of conditions and the following disclaimer in the
     17 #    documentation and/or other materials provided with the distribution.
     18 #
     19 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29 # POSSIBILITY OF SUCH DAMAGE.
     30 #
     31 # checkoldver [dir ...]
     32 #
     33 # Looks in the given directories for old shared libraries and lists them
     34 # Useful for: 'checkoldver /usr/lib | xargs rm -f'
     35 
     36 delete() {
     37 	obsol="$1.so"
     38 	if [ ! -z "$2" ]
     39 	then
     40 		obsol="$obsol.$2"
     41 	fi
     42 	if [ ! -z "$3" ]
     43 	then
     44 		obsol="$obsol.$3"
     45 	fi
     46 	if [ ! -z "$4" ]
     47 	then
     48 		obsol="$obsol.$4"
     49 	fi
     50 	echo $PWD/$obsol
     51 }
     52 
     53 comparelib() {
     54 	OIFS="$IFS"
     55 	IFS="$IFS."
     56 	set -- $1
     57 	IFS="$OIFS"
     58 	if [ "$3" = "[0-9]*" ]
     59 	then
     60 		return
     61 	fi
     62 
     63 	if [ -z "$libmajor" ]
     64 	then
     65 		libname="$1"
     66 		libmajor="$3"
     67 		libminor="$4"
     68 		libtiny="$5"
     69 		return
     70 	fi
     71 	if [ "$libmajor" -lt "$3" ]
     72 	then
     73 		delete "$libname" "$libmajor" "$libminor" "$libtiny"
     74 		libmajor="$3"
     75 		libminor="$4"
     76 		libtiny="$5"
     77 		return
     78 	elif [ "$3" -lt "$libmajor" ]
     79 	then
     80 		delete "$libname" "$3" "$4" "$5"
     81 		return
     82 	fi
     83 
     84 	if [ -z "$libminor" ]
     85 	then
     86 		return
     87 	fi
     88 	if [ "$libminor" -lt "$4" ]
     89 	then
     90 		delete "$libname" "$libmajor" "$libminor" "$libtiny"
     91 		libmajor="$3"
     92 		libminor="$4"
     93 		libtiny="$5"
     94 		return
     95 	elif [ "$4" -lt "$libminor" ]
     96 	then
     97 		delete "$libname" "$3" "$4" "$5"
     98 		return
     99 	fi
    100 
    101 	if [ -z "$libtiny" ]
    102 	then
    103 		return
    104 	fi
    105 	if [ "$libtiny" -lt "$5" ]
    106 	then
    107 		delete "$libname" "$libmajor" "$libminor" "$libtiny"
    108 		libmajor="$3"
    109 		libminor="$4"
    110 		libtiny="$5"
    111 		return
    112 	elif [ "$5" -lt "$libminor" ]
    113 	then
    114 		delete "$libname" "$3" "$4" "$5"
    115 		return
    116 	fi
    117 }
    118 
    119 processonedir() {
    120 	cd "$1"
    121 	for lib in lib*.so
    122 	do
    123 		lib="${lib#lib}"
    124 		lib="${lib%.so}"
    125 
    126 		libmajor=
    127 		libminor=
    128 		libtiny=
    129 		for link in lib$lib.so.[0-9]*.[0-9]*.[0-9]*
    130 		do
    131 			comparelib "$link"
    132 		done
    133 
    134 		libmajor=
    135 		libminor=
    136 		libtiny=
    137 		for link in lib$lib.so.[0-9]*.[0-9]*
    138 		do
    139 			comparelib "$link"
    140 		done
    141 
    142 		libmajor=
    143 		libminor=
    144 		libtiny=
    145 		for link in lib$lib.so.[0-9]*
    146 		do
    147 			comparelib "$link"
    148 		done
    149 	done
    150 }
    151 
    152 for i
    153 do
    154 	processonedir "$i"
    155 done
    156