sub main
{
my %opts;
+ my $ssi;
my $input;
my $output;
if ($#ARGV lt 0) {
error(4, "No input files\n");
}
+
+ $ssi = init_compiler($opts{'D'}, $opts{'I'});
+
if (exists($opts{'o'})) {
if ($#ARGV gt 0) {
error(4, "Cannot specify -o with multiple files\n");
}
- compile($ARGV[0], $opts{'o'}, $opts{'D'}, $opts{'I'});
+ compile($ssi, $ARGV[0], $opts{'o'});
} else {
for $input (@ARGV) {
$output = $input;
$output =~ s/\.[^.]+$/.html/;
- compile($input, $output, $opts{'D'}, $opts{'I'});
+ compile($ssi, $input, $output);
}
}
+
+ undef $ssi;
}
sub usage
exit($status);
}
+sub init_compiler
+{
+ my ($vars, $root) = @_;
+ my $ssi;
+ my $var_name;
+ my $var_value;
+
+ %ENV = (
+ "DOCUMENT_ROOT" => $root,
+ );
+
+ $CGI::SSI::DEBUG = 0;
+ $ssi = CGI::SSI->new();
+
+ $ssi->set("DOCUMENT_ROOT" => $root);
+
+ while (($var_name, $var_value) = each(%{$vars})) {
+ $ssi->set($var_name => $var_value);
+ }
+
+ return $ssi;
+}
+
sub compile
{
- my ($input, $output, $vars, $root) = @_;
+ my ($ssi, $input, $output) = @_;
my $input_fh;
my $input_abs;
my $output_fh;
- my $ssi;
- my $var_name;
- my $var_value;
if ($input eq $output and $input ne "-") {
warning("Input and output files are equal\n");
}
# CGI::SSI uses SCRIPT_FILENAME to determine the value of LAST_MODIFIED.
- %ENV = (
- "DOCUMENT_NAME" => $input,
- "DOCUMENT_URI" => $input,
- "DOCUMENT_ROOT" => $root,
- "SCRIPT_FILENAME" => $input_abs,
- );
-
- $CGI::SSI::DEBUG = 0;
- $ssi = CGI::SSI->new(
- "DOCUMENT_NAME" => $input,
- "DOCUMENT_URI" => $input,
- "DOCUMENT_ROOT" => $root,
- );
+ $ENV{"DOCUMENT_NAME"} = $input;
+ $ENV{"DOCUMENT_URI"} = $input;
+ $ENV{"SCRIPT_FILENAME"} = $input_abs;
- while (($var_name, $var_value) = each(%{$vars})) {
- $ssi->set($var_name => $var_value);
- }
+ $ssi->set("DOCUMENT_NAME" => $input);
+ $ssi->set("DOCUMENT_URI" => $input);
print($output_fh $ssi->process(<$input_fh>));