blob: abd3c93c70a711e9c3de20beab2749a5b8c2e961 [file] [log] [blame]
#! /usr/bin/perl
require 'getopts.pl';
use Getopt::Long;
use strict;
my @optlist = ("h|help!","v|verbose!","cp|classpath=s","J=s", "t|toplevel=s", "rt|runtime!");
my $result = GetOptions @optlist;
our ($opt_h, $opt_v, $opt_cp, $opt_J, $opt_t, $opt_rt);
# -h option
if ($opt_h) {
usage();
exit 1;
}
# local variables
my $java = "java";
my $classpath;
my $opts;
my $class;
my @args;
# set $class and @args
if ($opt_t) {
if (@ARGV > 0) {
usage();
exit 1;
} else { # $opt_t && @ARGV <= 0
$class = "com.googlecode.prolog_cafe.lang.PrologMain";
@args = ($opt_t);
}
} elsif (@ARGV > 0) { # !$opt_t && @ARGV > 0
($class, @args) = @ARGV;
} else { # !$opt_t && @ARGV <= 0
$class = "com.googlecode.prolog_cafe.lang.PrologMain";
@args = "com.googlecode.prolog_cafe.builtin:cafeteria";
}
# set $classpath
$classpath = "\$PLCAFEDIR/plcafe.jar";
if ($opt_rt) {
$classpath = "\$PLCAFEDIR/lang.jar:\$PLCAFEDIR/builtin.jar";
}
$classpath .= ":\$CLASSPATH";
if ($opt_cp) { # -cp option
$classpath = "$opt_cp:$classpath";
}
#$classpath = ".:$classpath";
# set $opts
if ($opt_J) { # -J option
if ($opt_J =~ /(-cp|-classpath)\s+/) {
&error("can not use $1 in -J option");
}
$opts .= $opt_J;
}
my $cmd = "$java $opts -cp $classpath $class @args";
&message("{Enjoy Prolog Cafe!}");
&message($cmd);
system($cmd) && error("launching fails");
&message("{Thank you for using Prolog Cafe!}\n");
exit 0;
sub usage {
print "\nUsage: $0 [-options] [class] [args...]\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-rt -runtime : boot a runtime environment,\n";
print "\t : not including compiler system\n";
print "\t-t -toplevel <predicate name possibly with package name>\n";
print "\t : set toplevel goal limited to atom\n";
print "\t : (ex. -t main)\n";
print "\t : (ex. -t package:main)\n";
print "\t : Note that class and args must be empty.\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 "\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);
}