#!/usr/bin/perl -Tw
#
# abiscan -- Quantify and compare system ABI's and binary compatibility.
# 
# Copyright (C) 2005, 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.2 2006/06/06 01:29:58 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.2 $ created on $Date: 2006/06/06 01:29:58 $ 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();
