-
Notifications
You must be signed in to change notification settings - Fork 0
/
abiscan
executable file
·112 lines (100 loc) · 3.48 KB
/
abiscan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/perl -Tw
#
# abiscan -- Quantify and compare system ABI's and binary compatibility.
#
# Copyright (C) 2005-2007, Michael Jennings
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies of the Software, its documentation and marketing & publicity
# materials, and acknowledgment shall be given in the documentation, materials
# and software packages that this Software was used.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# $Id: abiscan,v 1.3 2007/02/27 21:29:36 mej Exp $
#
use strict;
use POSIX;
use Mezzanine::Util;
use Mezzanine::PkgVars;
use Mezzanine::RPM;
my %RPMINFO;
# Print usage information
sub
print_usage_info
{
my ($leader, $underbar);
print "\n";
$leader = "$PROGNAME $VERSION Usage Information";
$underbar = $leader;
$underbar =~ s/./-/g;
print "$leader\n$underbar\n";
print "\n";
print " Syntax: $0 [ options ] package [...]\n";
print "\n";
print " -h --help Show this usage information\n";
print " -d --debug Turn on debugging\n";
print " -v --version Show version and copyright\n";
#print " \n";
print "\n";
exit(MEZZANINE_SUCCESS);
}
# Scan all RPM's for provides/requires/conflicts/obsoletes.
sub
scan_all_rpms()
{
my ($err, @output);
&pkgvar_name("");
($err, @output) = &rpm_query("reqprovall");
if ($err) {
eprint "Unable to gather dependencies: $! $output[0] (error $err)\n";
} else {
foreach my $line (@output) {
chomp($line);
dprint " -> $line\n";
}
}
}
# main() here is basically the same as main() in C
sub
main
{
my $ret = 0;
# For taint checks
delete @ENV{("IFS", "CDPATH", "ENV", "BASH_ENV")};
$ENV{"PATH"} = "/bin:/usr/bin:/sbin:/usr/sbin";
foreach my $shell ("/bin/bash", "/usr/bin/ksh", "/bin/ksh", "/bin/sh", "/sbin/sh") {
if (-f $shell) {
$ENV{"SHELL"} = $shell;
last;
}
}
&mezz_init("abiscan", "0.1", "help|h", "version|v", "debug|d!");
if ($OPTION{"version"}) {
# Do not edit this. It is updated automatically by CVS when you commit.
&print_version($PROGNAME, $VERSION, "Michael Jennings",
'CVS Revision $Revision: 1.3 $ created on $Date: 2007/02/27 21:29:36 $ by $Author: mej $ ');
} elsif ($OPTION{"help"}) {
&print_usage_info();
}
if (defined($OPTION{"debug"}) && !($OPTION{"debug"})) {
&debug_set(0);
} else {
&debug_set($OPTION{"debug"} || 0);
}
&scan_all_rpms();
return $ret;
}
exit &main();