#!/usr/bin/perl

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


# print a file error message and quit
sub file_err {
  my $msg = shift;
  print STDERR "error: $msg: $!\n";
  exit 2;
}


# read a file, translate some lines as specified, and write to a new file
sub trans {
  my $infile = shift;
  my $outfile = shift;
  local (*INFILE, *OUTFILE);
  unless (open(INFILE, "<", $infile)) {
    file_err("can't read from '$infile'");
  }
  unless (open(OUTFILE, ">", $outfile)) {
    file_err("can't write to '$outfile'");
  }
  # translate stuff
  my $use_lib = 0;
  my $cgidir = $ENV{FINAL_CGIDIR};
  while (my $line = <INFILE>) {
    unless ($use_lib) {
      if ($line =~ /^use lib "lib";/) {
        $line = "# $line";
        $use_lib = 1;
      }
    }
    if (defined($cgidir)) {
      if ($line =~ /^(\s*my \$cgidir =).*; # translate me$/) {
        $line = "$1 '$cgidir'; # translated by $0\n";
        $cgidir = undef;
      }
    }
    unless (print OUTFILE $line) {
      file_err("error writing to '$outfile'");
    }
  }
  unless (close(INFILE)) {
    file_err("problem closing '$infile'");
  }
  unless (close(OUTFILE)) {
    file_err("problem closing '$infile'");
  }
}


my ($infile, $outfile) = @ARGV[0..1];
unless (@ARGV == 2 && defined($infile) && defined($outfile)) {
  print STDERR "usage: util/trans.pl <IN_FILE> <OUT_FILE>\n";
  exit 1;
}

trans($infile, $outfile);
exit 0;
