#! perl

# $Id: compile 7389 2013-03-08 11:00:09Z joostvb $
# $URL: https://pong.uvt.nl/its-nettel/Netwerken/Procedures/noc-cacti-plugins/compile $

# author: Wessel Dankers <wsl@fruit.je>

use strict;
use warnings FATAL => 'all';
use autodie;

open my $fh, '<', 'config.perl'
	or die "Can't open 'config.perl': $!\n";

my %invars = map { chomp; split /=/, $_, 2 } <$fh>;
my %outvars;

close($fh);

for(;;) {
	my $changed;
	while(my ($key, $val) = each %invars) {
		next unless $val =~ /^(?:[^\\\$\`]|\$(?:\{\w+}|\w+)|\\.)+$/;
		$val =~ s{\\(.)|\$(?:\{(\w+)\}|(\w+))}{$1 // $outvars{$2 // $3} // ''}eg;
		next if exists $outvars{$key} && $val eq $outvars{$key};
		$outvars{$key} = $val;
		$changed = 1;
	}
	last unless $changed;
}

print "#! $outvars{PERL}\n\nBEGIN {\n";

while(my ($key, $val) = each %outvars) {
	$val =~ s/[\\"\$\@]/\\$&/g;
	print "\tour \$$key = \"$val\";\n";
}

print "}\n\n";

while(<ARGV>) { print }
