#! /usr/bin/perl 
use Getopt::Long;
use strict;

my @optlist = ("h|help!","v|verbose!","cp|classpath=s","C=s");
my $result = GetOptions @optlist;
our ($opt_h, $opt_v, $opt_cp, $opt_C);

# -h option || check the number of arguments
if ($opt_h || @ARGV < 1 ) {
    usage();
    exit 1;
}

# local variables
my $javac = "javac";
my $classpath;
my $opts;
my $files;

# set $classpath
$classpath = "\$PLCAFEDIR/plcafe.jar:\$CLASSPATH";
#$classpath = "\$PLCAFEDIR/lang.jar:\$PLCAFEDIR/builtin.jar:\$PLCAFEDIR/compiler.jar:\$CLASSPATH";
if ($opt_cp) { # -cp option
    $classpath = ".:$opt_cp:$classpath";
} 

# set $opts
if ($opt_C) { # -C option
    if ($opt_C =~ /(-cp|-classpath)\s+/) {
	&error("can not use $1 in -C option");
    }
    $opts .= $opt_C;
}

# set $files
$files = "@ARGV";
$files =~ s/(\$)/\\$1/g;

my $cmd = "$javac $opts -classpath $classpath $files";
&message($cmd);
system($cmd) && error("$cmd fails");

exit 0;

sub usage {
    print "\nUsage: $0 [-options] [source files]\n";
    print "\n";
    print "where options support:\n\n";
    print "\t-h -help         : print this help\n";
    print "\t-v -verbose      : enable verbose output\n";
    print "\t-cp -classpath <class search path of directories and zip/jar files>\n";
    print "\t                 : A : separated list of directories and zip/jar files.\n";
    print "\t-C option        : option must be enclosed by '.\n";
    print "\t                 : pass option to the Java Compiler\n";
    print "\t                 : (ex. -C '-deprecation')\n";
    print "\n";
}

sub message {
    my ($x) = @_;
    if ($opt_v) { # check -v option
	print "\% $x\n";
    }
}

sub error {
    my ($x) = @_;
    print "\% ERROR: $x: $0\n";
    exit(1);
}
