#!/usr/bin/perl

eval 'exec /usr/bin/perl  -S $0 ${1+"$@"}'
    if 0; # not running under some shell
## ----------------------------------------------------------------------
## Debian update-perl-sax-parsers version 0.2
## ----------------------------------------------------------------------
## Copyright (C) 2001-2003 Ardo van Rangelrooij
##
## This is free software; see the GNU General Public Licence version 2
## or later for copying conditions.  There is NO warranty.
## ----------------------------------------------------------------------

## ----------------------------------------------------------------------
use strict;

## ----------------------------------------------------------------------
use File::Spec;
use Getopt::Long;
use XML::SAX;

## ----------------------------------------------------------------------
$0  =~ m|[^/]+$|;

## ----------------------------------------------------------------------
my $name = $&;

## ----------------------------------------------------------------------
my $add       = '';
my @directory = ();
my $file      = '';
my $help      = '';
my $quiet     = '';
my $remove    = '';
my $test      = '';
my $update    = '';
my $version   = '';

## ----------------------------------------------------------------------
if ( ! GetOptions(
		  'add=s'       => \$add,
		  'directory=s' => \@directory,
		  'file=s'      => \$file,
		  'help'        => \$help,
		  'quiet'       => \$quiet,
		  'remove=s'    => \$remove,
		  'test'        => \$test,
		  'update'      => \$update,
		  'version'     => \$version,
		  )
     )
{
    &usage;
    exit 1;
}


## ----------------------------------------------------------------------
if ( $version )
{
    &version;
    exit 0;
}

## ----------------------------------------------------------------------
if ( $help )
{
    &usage;
    exit 0;
}

## ----------------------------------------------------------------------
print STDERR "$name: test mode - Perl SAX parsers file will not be updated\n"
    if $test && ! $quiet;

## ----------------------------------------------------------------------
my $PARSER_DETAILS_DIR  = "/etc/perl/XML/SAX/ParserDetails.d";
push( @directory, $PARSER_DETAILS_DIR) if ! @directory;

## ----------------------------------------------------------------------
my $PARSER_DETAILS_FILE = "/etc/perl/XML/SAX/ParserDetails.ini";
$file = $PARSER_DETAILS_FILE if ! $file;

## ----------------------------------------------------------------------
if ( $add )
{
    print "$name: Adding Perl SAX parser module info file of $add...\n"
        unless $quiet;
    
    XML::SAX->save_parsers_debian( $add, $directory[0] );
}
elsif ( $remove )
{
    print "$name: Removing Perl SAX parser module info file of $remove...\n"
        unless $quiet;
    
    my $parser_file = File::Spec->catfile( $directory[0], $remove);
    unlink( $parser_file );
}
elsif ( $update )
{
    print "$name: Updating overall Perl SAX parser modules info file...\n"
        unless $quiet;

    open( PARSER_DETAILS_FILE, ">$file" )
	|| die "Cannot write to $file: $!";
    foreach my $directory ( @directory)
    {
	opendir( PARSER_DETAILS_DIR, $directory )
	    || die "Cannot access $directory: $!";
	while ( defined( my $parser_details = readdir( PARSER_DETAILS_DIR ) ) )
	{
	    next if $parser_details =~ /^\.\.?$/; # skip . and ..
	    open( PARSER_DETAILS, "$directory/$parser_details" )
		|| die "Cannot read from $parser_details: $!";
	    while ( <PARSER_DETAILS> ) { print PARSER_DETAILS_FILE; }
	    close( PARSER_DETAILS );
	}
	closedir( PARSER_DETAILS_DIR );
    }
    close( PARSER_DETAILS_FILE );
}

## ----------------------------------------------------------------------
exit 0;

## ----------------------------------------------------------------------
sub usage
{
    print STDERR <<END;
Usage:
    $name <options> --add <parser_module>
    $name <options> --remove <parser_module>
    $name <options> --update

Options:
    --directory     Perl SAX parser module info file directory to be used
                    as target for 'add'/'remove' or as sources for 'update'
                    (default = '/etc/perl/XML/SAX/ParserDetails.d')
    --file          Perl SAX parser module info file to be updated
                    (default = '/etc/perl/XML/SAX/ParserDetails.ini')
    --help          display this help text (usage)
    --quiet         be quiet
    --test          do not modify any files, enable debugging mode
    --version       display version number
END
}

## ----------------------------------------------------------------------
sub version
{
    print "Debian $name version 0.2\n";
}

## ----------------------------------------------------------------------
