#!/usr/bin/perl -w # $OpenBSD: check-libs,v 1.2 2001/12/31 01:59:39 naddy Exp $ # Copyright (c) 2001 Marc Espie # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Check that all libraries are mentioned in lib depends. # For now, we do a summary check, without taking version numbers into # account. use strict; sub find_library { my $libname = shift; my $LIBDIR=$ENV{'PKG_DBDIR'}; my @list = `fgrep -l lib$libname.so $LIBDIR/*/+CONTENTS`; local $_; if (@list != 1) { return '???'; } my $pkgname = $list[0]; chomp $pkgname; open(FILE, $pkgname); while () { chomp; if (m/^\@comment subdir\=(\S+)/) { close FILE; return $1; } } $pkgname =~ s|$LIBDIR/(.*?)/\+CONTENTS|$1|; return $pkgname; } my $error = 0; my %registered = map { s/.*\///; s/(?:\.\d+)+//; s/\.$//; ($_, 1); } split(/[ ,\n]/, $ENV{'LIB_DEPENDS'}); open(LIBS, '<', shift); open(BUILDS, '<', shift); while () { chomp; s/^.*\/lib(.*?)\.so(?:\.\d+)+$/$1/; $registered{$_} = 1; } close(BUILDS); while () { chomp; if (m/^\tlibrary: (\S+)\s(\d+)\s(\-?\d+)$/) { my ($name, $major, $minor) = ($1, $2, $3); $_ = $name; } else { s/^\t\-l(.*?)(\.\d+){0,2}(?: \=\> .*)?$/$1/; } unless (defined $registered{$_}) { print "lib-depends-check: no mention of $_ (".find_library($_).")\n"; $error = 1; } } close(LIBS); exit($error);