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