#!/usr/bin/perl -w
#------------------------------------------------------------------------
#
# $Sendmail: parse_mc,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $
#
# Parse Sendmail config for databases
#
# Copyright 2000-@SM_CPYRT@ Richard Nelson.  All Rights Reserved.
#
# Notes (to all):
#	* for "define(xxx,...)"; "define(xxx," must be on same line, but the
#	  rest may be split across multiple lines
#	* assumes makemap dbtype /etc/mail/database < /etc/mail/database
#
# Notes (to self):
#	*
#
#------------------------------------------------------------------------
# My first perl program (from my first awk program ;-})
#
# Initialization of the perl environment
use strict;			# be kosher
use Env;			# A few environmental references
use integer;		# Peformance
use Getopt::Long;	# parameter handling

# Local libraries - for Debian Sendmail Perl helper functions
# BEGIN { $main::my_path = substr($0,$[,rindex($0,'/')) };
use lib ('.', substr($0,$[,rindex($0,'/')), "@datadir@/sendmail");
require Parse_mc;
require Parse_conf;

# Version of this program
#($main::MYNAME			= $main::0) =~ s|.*/||;
#$main::Author			= "Richard Nelson";
#$main::AuthorMail		= "cowboy\@debian.org";
#$main::Version			= '$Revision: 2.00 $ ';
$main::program_name    = $0;
$main::program_version = '@sm_version@';
$main::program_date    = '@sm_date@ @sm_time@ cowboy';
$main::debug			= 0;

#
#------------------------------------------------------------------------------
# Finally, some code (almost)
#------------------------------------------------------------------------------
#
# Argument handling...
$main::opt_help='';
$main::opt_output_file='';
$main::opt_input_file='';
$main::opt_debug='';
my @options = qw(
	help|h
	output-file|output_file|o:s
	input-file|input_file|i:s@
	debug!
	);
my $result = GetOptions(@options);
if ( ! $result ) {
	die "Terminating due to parameter error";
	};
if ( $main::opt_help ) {
	warn "$main::program_name $main::program_version $main::program_date\n";
	warn "$0 \n";
	warn "	 -help\n" if $main::opt_help;
	warn "	 -debug\n" if $main::opt_debug;
	warn "	 -o $main::opt_output_file\n" if $main::opt_output_file;
	warn "	 -i $main::opt_input_file\n"  if $main::opt_input_file;
	exit 0;
	};

${Parse_mc::database_file} = $main::opt_output_file
	if $main::opt_output_file;
my $input_files = join(' ', @main::opt_input_file);
# $main::debug is used in parse_mc !
$main::debug = $main::opt_debug || $main::debug;

# Pull in some configuration data
&Parse_conf::read_conf();
my ($ok, $value) = &Parse_conf::get_value('HANDS_OFF');
if ($value ne '0') {
	unlink "${Parse_mc::database_file}";
	exit;
	};

# Let them know wtf is going on...
print STDOUT "Creating ${Parse_mc::database_file}...\n";

# Read the mc/m4 files
&Parse_mc::read_mc($input_files);

# Write out the textual representation
&Parse_mc::write_dbs('', $input_files);

