#!/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/dist/classes"; # 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);