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 36delete() { 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 53comparelib() { 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 117processonedir() { 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 150for i 151do 152 processonedir "$i" 153done 154