| #! /usr/bin/perl |
| use strict; |
| use Getopt::Long; |
| |
| # options |
| my @optlist = ("h|help!","v|verbose!","d=s","J=s","cp|classpath=s","C=s"); |
| my $result = GetOptions @optlist; |
| our ($opt_h, $opt_v, $opt_d, $opt_J,$opt_cp, $opt_C); |
| |
| # -h option || check the number of arguments |
| if ($opt_h || @ARGV < 1 ) { |
| usage(); |
| exit 1; |
| } |
| |
| # variables |
| my $pljava = "pljava"; |
| my $pljava_opts = ""; |
| my $pljavac = "pljavac"; |
| my $pljavac_opts = ""; |
| my $java_dest = "."; |
| |
| if ($opt_v) { # -v option |
| $pljava_opts .= " -v"; |
| $pljavac_opts .= " -v"; |
| } |
| |
| if ($opt_d) { # -d option |
| if (! -d $opt_d) { |
| &message("mkdir $opt_d, 0777"); |
| mkdir $opt_d, 0777 || &error("can not mkdir $opt_d"); |
| } |
| $java_dest = $opt_d; |
| } |
| |
| if ($opt_J) { # -J option |
| $pljava_opts .= " -J '$opt_J'"; |
| } |
| |
| if ($opt_cp) { # -cp option |
| $pljavac_opts .= " -cp '$opt_cp'"; |
| } |
| |
| if ($opt_C) { # -C option |
| $pljavac_opts .= " -C '$opt_C'"; |
| } |
| |
| # Prolog --> Java |
| foreach my $file (@ARGV) { |
| my $cmd1 = "$pljava $pljava_opts -d $java_dest $file"; |
| &message($cmd1); |
| system($cmd1) && error("$cmd1 fails"); |
| } |
| |
| # Java --> Class |
| my $cmd2 = "$pljavac $pljavac_opts $java_dest/*.java"; |
| &message($cmd2); |
| system($cmd2) && error("$cmd2 fails"); |
| |
| exit 0; |
| |
| # sub |
| sub usage { |
| print "\nUsage: $0 [-options] prolog-file [prolog-files]\n"; |
| print "\n where options include:\n"; |
| print "\t-h -help : print this help message\n"; |
| print "\t-v -verbose : enable verbose output\n"; |
| print "\t-d directory : set the destination directory for java files.\n"; |
| print "\t : make it if not exist\n"; |
| print "\t-J option : option must be enclosed by '.\n"; |
| print "\t : pass option to the Java Virtual Machine\n"; |
| print "\t : (ex. -J '-Xmx100m -verbose:gc')\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); |
| } |