Home | History | Annotate | Line # | Download | only in lib
checkoldver revision 1.4
      1 #!/bin/sh
      2 #	$NetBSD: checkoldver,v 1.4 2024/05/28 16:20:34 christos 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 	local name="${1%.so.*}"
     55 	local version=${1#*.so.}
     56 	OIFS="$IFS"
     57 	IFS="$IFS."
     58 	set -- $version
     59 	IFS="$OIFS"
     60 
     61 	if [ -z "$libmajor" ]
     62 	then
     63 		libname="$name"
     64 		libmajor="$1"
     65 		libminor="$2"
     66 		libtiny="$3"
     67 		return
     68 	fi
     69 	if [ "$libmajor" -lt "$1" ]
     70 	then
     71 		delete "$libname" "$libmajor" "$libminor" "$libtiny"
     72 		libmajor="$1"
     73 		libminor="$2"
     74 		libtiny="$3"
     75 		return
     76 	elif [ "$1" -lt "$libmajor" ]
     77 	then
     78 		delete "$libname" "$1" "$2" "$3"
     79 		return
     80 	fi
     81 
     82 	if [ -z "$libminor" ]
     83 	then
     84 		return
     85 	fi
     86 	if [ "$libminor" -lt "$2" ]
     87 	then
     88 		delete "$libname" "$libmajor" "$libminor" "$libtiny"
     89 		libmajor="$1"
     90 		libminor="$2"
     91 		libtiny="$3"
     92 		return
     93 	elif [ "$2" -lt "$libminor" ]
     94 	then
     95 		delete "$libname" "$1" "$2" "$3"
     96 		return
     97 	fi
     98 
     99 	if [ -z "$libtiny" ]
    100 	then
    101 		return
    102 	fi
    103 	if [ "$libtiny" -lt "$3" ]
    104 	then
    105 		delete "$libname" "$libmajor" "$libminor" "$libtiny"
    106 		libmajor="$1"
    107 		libminor="$2"
    108 		libtiny="$3"
    109 		return
    110 	elif [ "$5" -lt "$libminor" ]
    111 	then
    112 		delete "$libname" "$1" "$2" "$3"
    113 		return
    114 	fi
    115 }
    116 
    117 processonedir() {
    118 	cd "$1"
    119 	for lib in lib*.so
    120 	do
    121 		lib="${lib#lib}"
    122 		lib="${lib%.so}"
    123 
    124 		libmajor=
    125 		libminor=
    126 		libtiny=
    127 		for link in lib$lib.so.[0-9]*.[0-9]*.[0-9]*
    128 		do
    129 			comparelib "$link"
    130 		done
    131 
    132 		libmajor=
    133 		libminor=
    134 		libtiny=
    135 		for link in lib$lib.so.[0-9]*.[0-9]*
    136 		do
    137 			comparelib "$link"
    138 		done
    139 
    140 		libmajor=
    141 		libminor=
    142 		libtiny=
    143 		for link in lib$lib.so.[0-9]*
    144 		do
    145 			comparelib "$link"
    146 		done
    147 	done
    148 }
    149 
    150 for i
    151 do
    152 	processonedir "$i"
    153 done
    154