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