| #! /usr/bin/perl | |
| use strict; | |
| use Getopt::Long; | |
| use File::Basename; | |
| # options | |
| my @optlist = ("h|help!","v|verbose!","J=s","cp|classpath=s","C=s"); | |
| my $result = GetOptions @optlist; | |
| our ($opt_h, $opt_v, $opt_J, $opt_cp, $opt_C); | |
| # -h option || check the number of arguments | |
| if ($opt_h || @ARGV < 2 ) { | |
| usage(); | |
| exit 1; | |
| } | |
| # variables | |
| my ($file, @args) = @ARGV; | |
| my ($jar_file, $jar_path, $jar_suffix) = fileparse($file, (".jar")); | |
| my $plcomp = "plcomp"; | |
| my $plcomp_opts = ""; | |
| my $java_dest = "$jar_file"; | |
| my $class_dest = "$java_dest/classes"; | |
| my $jar = "jar"; | |
| my $jar_opts = "cf $file"; | |
| # check arguments | |
| if (-d $java_dest) { | |
| &error("directory $java_dest is already exist."); | |
| } | |
| if ($jar_suffix ne ".jar") { | |
| &error("$file is not suffixed by .jar"); | |
| } | |
| if ($opt_v) { # -v option | |
| $plcomp_opts .= " -v"; | |
| } | |
| if ($opt_J) { # -J option | |
| $plcomp_opts .= " -J '$opt_J'"; | |
| $jar_opts .= " -J'$opt_J'"; | |
| } | |
| if ($opt_cp) { # -cp option | |
| $plcomp_opts .= " -cp '$opt_cp'"; | |
| } | |
| if ($opt_C) { # -C option | |
| if ($opt_C =~ /-d\s+/) { | |
| &error("can not use -d in -C option"); | |
| } | |
| $plcomp_opts .= " -C '-d $class_dest $opt_C'"; | |
| } else { | |
| $plcomp_opts .= " -C '-d $class_dest'"; | |
| } | |
| &message("mkdir $java_dest, 0777"); | |
| mkdir $java_dest, 0777 || &error("can not mkdir $java_dest"); | |
| &message("mkdir $class_dest, 0777"); | |
| mkdir $class_dest, 0777 || &error("can not mkdir $class_dest"); | |
| my $cmd1 = "$plcomp $plcomp_opts -d $java_dest @args"; | |
| &message($cmd1); | |
| system($cmd1) && &error("$cmd1 fails"); | |
| my $cmd2 = "$jar $jar_opts -C $class_dest ."; | |
| &message($cmd2); | |
| system($cmd2) && &error("$cmd2 fails"); | |
| exit 0; | |
| # sub | |
| sub usage { | |
| print "\nUsage: $0 [-options] jar-file 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-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); | |
| } |