B-JVM-Jasmin

 view release on metacpan or  search on metacpan

perljvm.PL  view on Meta::CPAN

# Need this 'use vars' because the above 'no warnings' is still experimental
use vars qw($running_under_some_shell);

use vars qw($RUN_ONCE_COMPILED $KEEP_INTERMEDIATE $JAVA_PATH $JASMIN_PATH);

$KEEP_INTERMEDIATE = $RUN_ONCE_COMPILED = 0;

# FIXME: Use Getopts for the love of dog.  ;p)
{
  no warnings qw(uninitialized);
  
  if ($ARGV[0] eq "--run") {
    shift @ARGV;
    $RUN_ONCE_COMPILED = 1;
    die "cannot use --run since not configured with working jasmin"
      if ($JASMIN_PATH eq "");
    die "cannot use --run since not configured with working JVM"
      if ($JAVA_PATH eq "");
    
  }
  if ($ARGV[0] eq "--keep") {
    shift @ARGV;
    $KEEP_INTERMEDIATE = 1;
  }
}

if (@ARGV < 1) {
  print STDERR "usage: $0 [--run] [--keep] <perlsource> [<classname>]\n";
  exit 1;
}
  
  my $INC = ' -I' . join(' -I', @INC);

# FIXME: I was in a hurry...this really shouldn't recall Perl but call the 
#        module directly

  my $systemString;

  $ARGV[1] = "Main" unless (defined $ARGV[1]);
  $systemString = "$^X $INC -MO=JVM::Jasmin,$KEEP_INTERMEDIATE,$ARGV[1]" .
      " $ARGV[0]";

#print STDERR "EXECUTING: $systemString\n";
system($systemString);

die "unable to compile $ARGV[0]" unless ($? == 0);

system("$JASMIN_PATH $ARGV[1].jasmin");

die "unable to $ARGV[1] to $ARGV[0].class" unless ($? == 0);

unlink("$ARGV[1].jasmin") unless $KEEP_INTERMEDIATE;

if ($RUN_ONCE_COMPILED) {
    system("java $ARGV[1]");
    unlink("$ARGV[1].class") unless $KEEP_INTERMEDIATE;
}
!NO!SUBS!

close OUT or die "Can't close $file: $!";
chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
chdir $origdir;



( run in 1.115 second using v1.01-cache-2.11-cpan-5735350b133 )