diff --git a/projects/samskivert/bin/runjava b/projects/samskivert/bin/runjava new file mode 100755 index 00000000..5edd6850 --- /dev/null +++ b/projects/samskivert/bin/runjava @@ -0,0 +1,103 @@ +#!/usr/bin/perl -w + +use Getopt::Std; + +my $usage = "Usage: $0 [-p pid_file] [-r server_root] args\n"; + +# locations of stuff +chomp($location = `dirname $0`); + +# get the server root by popping the /bin off of our parent directory +@parts = split(/\//, $location); +pop(@parts); +my $root = join("/", @parts); + +my $jhome = $ENV{"JAVA_HOME"}; + +# make sure JAVA_HOME is set +if (!defined $jhome) { + warn "$0: Error: No JAVA_HOME specified!\n"; + warn "\n"; + warn "You must set your JAVA_HOME environment variable to the\n"; + warn "the absolute path of your JDK installation. For example:\n"; + warn "\n"; + warn " % JAVA_HOME=/usr/local/jdk1.2\n"; + warn " % export JAVA_HOME\n"; + die "\n"; +} + +# make sure it's set to a directory +if (! -d $jhome) { + die "$0: Can't find a java interpreter in '$jhome'.\n"; +} + +my $java = "$jhome/bin/java"; +my $jlib = "$jhome/lib/classes.zip"; + +# determine our machine architecture +my $ostype = `uname -s`; +my $machtype = `uname -m`; +chomp($ostype); +chomp($machtype); +my $arch = "$machtype-$ostype"; + +# add our native libraries to the runtime library path +my $libs = "$root/lib/$arch"; +my $libpath = $ENV{"LD_LIBRARY_PATH"}; + +if (defined $libpath) { + $ENV{"LD_LIBRARY_PATH"} = "$libs:$libpath"; +} else { + $ENV{"LD_LIBRARY_PATH"} = $libs; +} + +# put everything in our class path +my $classpath = "-classpath $jlib:$root/src/java"; + +# any zip or jar files in our lib/ directory get added to the class path +if (opendir(DIR, "$root/lib")) { + foreach $lib (grep { /.(zip|jar)/ && -f "$root/lib/$_" } readdir(DIR)) { + $classpath .= ":$root/lib/$lib"; + } + closedir DIR; +} + +# specify our server root (this is for server code) +my $serverroot = "-Dserver.root=$root"; + +# specify our base directory (this is for client code) +my $basedir = "-Dbase.dir=$root/src/java"; + +my $pid_file = undef; +my $i = 0; + +# strip out the -p and -r args (we'd use getopt() but the damned thing +# provides no way of escaping arguments so that we can pass args to +# runjava that get passed down to the JVM) +for ($i = 0; $i < @ARGV; $i++) { + my $arg = $ARGV[$i]; + + # stop when we see -- (and strip it out because Java don't dig --) + if ($arg eq "--") { + splice(@ARGV, $i, 1); + last; + } + + if ($arg eq "-p") { + $pid_file = $ARGV[$i+1]; + splice(@ARGV, $i, 2); + $i -= 1; # decrement i so that things stay in sync + + } elsif ($arg eq "-r") { + $serverroot = "-Dserver.root=" . $ARGV[$i+1]; + splice(@ARGV, $i, 2); + $i -= 1; # decrement i so that things stay in sync + } +} + +# log the pid file if requested to do so +print `echo $$ > $pid_file` if (defined $pid_file); + +my $cmd = "$java -mx256M $classpath $serverroot $basedir " . join(" ", @ARGV); +# print "$cmd\n"; +exec($cmd);