1#!/bin/sh 2# $NetBSD: checkoldver,v 1.1 2002/11/15 16:15:20 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# 3. All advertising materials mentioning features or use of this software 19# must display the following acknowledgement: 20# This product includes software developed by the NetBSD 21# Foundation, Inc. and its contributors. 22# 4. Neither the name of The NetBSD Foundation nor the names of its 23# contributors may be used to endorse or promote products derived 24# from this software without specific prior written permission. 25# 26# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 27# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 28# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 30# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36# POSSIBILITY OF SUCH DAMAGE. 37# 38# checkoldver [dir ...] 39# 40# Looks in the given directories for old shared libraries and lists them 41# Useful for: 'checkoldver /usr/lib | xargs rm -f' 42 43delete() { 44 obsol=$1.so 45 if [ ! -z "$2" ] 46 then 47 obsol="$obsol.$2" 48 fi 49 if [ ! -z "$3" ] 50 then 51 obsol="$obsol.$3" 52 fi 53 if [ ! -z "$4" ] 54 then 55 obsol="$obsol.$4" 56 fi 57 echo $PWD/$obsol 58} 59 60comparelib() { 61 OIFS="$IFS" 62 IFS="$IFS." 63 set -- $1 64 IFS="$OIFS" 65 if [ "$3" = "[0-9]*" ] 66 then 67 return 68 fi 69 70 if [ -z "$libmajor" ] 71 then 72 libname="$1" 73 libmajor="$3" 74 libminor="$4" 75 libtiny="$5" 76 return 77 fi 78 if [ "$libmajor" -lt "$3" ] 79 then 80 delete "$libname" "$libmajor" "$libminor" "$libtiny" 81 libmajor="$3" 82 libminor="$4" 83 libtiny="$5" 84 return 85 elif [ "$3" -lt "$libmajor" ] 86 then 87 delete "$libname" "$3" "$4" "$5" 88 return 89 fi 90 91 if [ -z "$libminor" ] 92 then 93 return 94 fi 95 if [ "$libminor" -lt "$4" ] 96 then 97 delete "$libname" "$libmajor" "$libminor" "$libtiny" 98 libmajor="$3" 99 libminor="$4" 100 libtiny="$5" 101 return 102 elif [ "$4" -lt "$libminor" ] 103 then 104 delete "$libname" "$3" "$4" "$5" 105 return 106 fi 107 108 if [ -z "$libtiny" ] 109 then 110 return 111 fi 112 if [ "$libtiny" -lt "$5" ] 113 then 114 delete "$libname" "$libmajor" "$libminor" "$libtiny" 115 libmajor="$3" 116 libminor="$4" 117 libtiny="$5" 118 return 119 elif [ "$5" -lt "$libminor" ] 120 then 121 delete "$libname" "$3" "$4" "$5" 122 return 123 fi 124} 125 126processonedir() { 127 cd "$1" 128 for lib in lib*.so 129 do 130 lib="${lib#lib}" 131 lib="${lib%.so}" 132 133 libmajor= 134 libminor= 135 libtiny= 136 for link in lib$lib.so.[0-9]*.[0-9]*.[0-9]* 137 do 138 comparelib "$link" 139 done 140 141 libmajor= 142 libminor= 143 libtiny= 144 for link in lib$lib.so.[0-9]*.[0-9]* 145 do 146 comparelib "$link" 147 done 148 149 libmajor= 150 libminor= 151 libtiny= 152 for link in lib$lib.so.[0-9]* 153 do 154 comparelib "$link" 155 done 156 done 157} 158 159for i 160do 161 processonedir "$i" 162done 163