#! /usr/bin/perl --

$version= '1.0.5'; # This line modified by Makefile

# Options
$logger = '/usr/bin/logger';
$sendtoscreen = '';
$log_priority = 'local6';

sub usageversion {
    print(STDERR <<END)
Debian GNU/Linux dpkg-logger $version.  Copyright (C) 1999
Ben Collins.  This is free software; see the GNU General Public
Licence version 2 or later for copying conditions.  There is NO
warranty.

Usage:
 dpkg-logger [ --stdout | --stderr ] <pkgname> <level> message|<message

 --stdout	Also echo message to stdout as well as log
 --stderr	Also echo message to stderr as well as log
		(Only one of the above may be used)

 <pkgname>	The package that is sending this message

 <level>	One of: info, warning, error, debug
		 Please read the policy manual for usage of levels.
		 Debug is not for production, but is for testing only.

 message	The message you wish to have logged. This is either on
		 the command line or from stdin (command line takes
		 precedence)
END
        || &quit("failed to write usage: $!");
}


while (@ARGV) {
    $_= shift(@ARGV);
    last if m/^--$/;
    if (!m/^-/) {
        unshift(@ARGV,$_); last;
    } elsif (m/^--(help|version)$/) {
        &usageversion; exit(0);
    } elsif (m/^--stdout$/) {
	$sendtoscreen eq '' || &badusage("Only one of --stderr or --stdout may be specified");
        $sendtoscreen = 'STDOUT';
    } elsif (m/^--stderr$/) {
	$sendtoscreen eq '' || &badusage("Only one of --stderr or --stdout may be specified");
        $sendtoscreen = 'STDERR';
    } else {
        &badusage("Unknown option \`$_'");
    }
}

@ARGV > 1 || &badusage("Missing argument(s)");

$package_name = shift(@ARGV);

$_ = shift(@ARGV);
m/^(debug|info|warning|error)$/ || &badusage("Unknown log level \`$_'");

# Translate input loglevel to native level for logger.
#  All of these translate to native logger form. However
#  'error' is deprecated in favor of 'err', so we will
#  convert that to avoid breaking when logger removes 'error'
$_ = 'err' if m/^error$/;

$log_level = $_;

$message = "@ARGV";


$message=join('', <>) if ($message eq "");
chomp $message;

if (-x "$logger") {
    print ($sendtoscreen "$message\n") if ($sendtoscreen ne '');
    open(LOGGER, "|$logger -p ${log_priority}.${log_level} -t pkg:$package_name");
    foreach $line (split(/\n/, $message)) {
	 print LOGGER "$line\n";
    }
    close (LOGGER);
} else {
    print "$message\n";
}

exit(0);

sub badusage { print STDERR "dpkg-logger: @_\n\n"; &usageversion; exit(2); }
