/usr/local/CPAN/B-JVM-Jasmin/Makefile.PL
#!/usr/bin/perl
# Makefile.PL -*- Perl -*-
# Makefile generator for B::JVM::Jasmin
#
# Copyright (C) 1999, Bradley M. Kuhn, All Rights Reserved.
#
# You may distribute under the terms of either the GNU General Public License
# or the Artistic License, as specified in the LICENSE file that was shipped
# with this distribution.
use 5.00562;
use strict;
use warnings;
use Carp;
use Config;
use ExtUtils::MakeMaker;
use vars qw($VERSION_FILE);
# If you don't put this in a begin block, it does not work. Who takes control
# of STDIN or "selects" another output in a BEGIN block?
BEGIN {
($ENV{B_JVM_JASMIN_JASMIN_PATH}, $ENV{PERL_JVM_JAVAC},
$ENV{B_JVM_JASMIN_JAVA_PATH}) = ("", "", "");
print <<"END";
There are a number of Java .class files that are created for use by perljvm.
You will need to decide where these classes are installed.
END
$ENV{PERL_JVM_CLASS_FILE_HOME} = "";
print "Install .class files to: [$Config{installsitelib}/javalib] ";
chomp($ENV{PERL_JVM_CLASS_FILE_HOME} = <STDIN>);
$ENV{PERL_JVM_CLASS_FILE_HOME} ||= "$Config{installsitelib}/javalib";
# Check to make sure we have java installed, of some sort.
my $JASMIN_MAJOR = 1.0;
my $JASMIN_MINOR = 6;
my @PATH_LIST = split /:/, $ENV{PATH};
# Make sure that version numbers are consistent
$VERSION_FILE = "Jasmin.pm";
my $VERSION = MM->parse_version($VERSION_FILE);
foreach my $file (<*.pm>) {
my $newVersion = MM->parse_version($file);
die("version mismatch: $file is version $newVersion, " .
"but $VERSION_FILE is $VERSION. $file must be updated")
unless ($newVersion eq $VERSION);
}
# Look for the jasmin program
foreach my $path (@PATH_LIST) {
if (-x "$path/jasmin") {
$ENV{B_JVM_JASMIN_JASMIN_PATH} = "$path/jasmin";
last;
}
}
# Look for the java program
foreach my $javaProgram ("java", "kaffe", "japhar") {
if ($ENV{B_JVM_JASMIN_JAVA_PATH} eq "") {
foreach my $path (@PATH_LIST) {
if (-x "$path/$javaProgram") {
$ENV{B_JVM_JASMIN_JAVA_PATH} = "$path/$javaProgram";
last;
}
}
}
}
# Look for the javac program
foreach my $javacProgram ("javac", "guavac", "jikes") {
if ($ENV{PERL_JVM_JAVAC} eq "") {
foreach my $path (@PATH_LIST) {
if (-x "$path/$javacProgram") {
$ENV{PERL_JVM_JAVAC} = "$path/$javacProgram";
last;
}
}
}
}
if ($ENV{B_JVM_JASMIN_JASMIN_PATH} ne "") {
unless (open(JASMIN, "$ENV{B_JVM_JASMIN_JASMIN_PATH} -version 2>&1|")) {
carp("$ENV{B_JVM_JASMIN_JASMIN_PATH} does not appear to run");
$ENV{B_JVM_JASMIN_JASMIN_PATH} = "";
} else {
my($version, $major, $minor);
while (my $line = <JASMIN>) {
if ($line =~
/^\s*Jasmin\s+version\s*:\s*v?((\d+)\.(\d+)(?:\.\d+)*)\s*$/i) {
($version, $major, $minor) = ($1, $2, $3);
last;
}
if ($version eq "") {
carp("Unable to run $ENV{B_JVM_JASMIN_JASMIN_PATH} properly!");
$ENV{B_JVM_JASMIN_JASMIN_PATH} = "";
}
elsif ( ($major == $JASMIN_MAJOR && $minor >= $JASMIN_MINOR)
|| ($major > $JASMIN_MAJOR) ) {
carp("$ENV{B_JVM_JASMIN_JASMIN_PATH} is $version, we need at least " .
"$JASMIN_MAJOR.$JASMIN_MINOR");
$ENV{B_JVM_JASMIN_JASMIN_PATH} = "";
}
}
close(JASMIN);
}
}
if ($ENV{B_JVM_JASMIN_JAVA_PATH} eq "") {
carp("perljvm --run will not work! No JVM found!")
} else {
print "java appears to be $ENV{B_JVM_JASMIN_JAVA_PATH}\n";
}
if ($ENV{B_JVM_JASMIN_JASMIN_PATH} eq "") {
carp("perljvm --run will not work! Jasmin not found!")
} else {
print "jasmin appears to be $ENV{B_JVM_JASMIN_JASMIN_PATH}\n";
}
if ($ENV{PERL_JVM_JAVAC} eq "") {
die("No Java compiler found, cannot compile this package!")
} else {
print "javac appears to be $ENV{PERL_JVM_JAVAC}\n";
}
}
# Had to do this to get the PATHs into perljvm. Is there a better solution?
sub MY::processPL {
package MY; # so that "SUPER" works right
my $inherited = shift->SUPER::processPL(@_);
$inherited =~ s/(\n\t+)(\$\(PERL\))/$1export B_JVM_JASMIN_JASMIN_PATH="$ENV{B_JVM_JASMIN_JASMIN_PATH}"; export B_JVM_JASMIN_JAVA_PATH="$ENV{B_JVM_JASMIN_JAVA_PATH}"; $2/;
$inherited;
}
# Had to do this so I could run perljvm instead of plan old perl when testing
#sub MY::test {
# package MY; # so that "SUPER" works right
# my $inherited = shift->SUPER::test(@_);
# $inherited;
#}
###############################################################################
WriteMakefile(
NAME => 'B::JVM::Jasmin',
VERSION_FROM => $VERSION_FILE,
AUTHOR => 'Bradley M. Kuhn <bkuhn@ebb.org>',
ABSTRACT_FROM => $VERSION_FILE,
PL_FILES => {'perljvm.PL' => 'perljvm' },
EXE_FILES => ['perljvm'],
DIR => ['Java'],
clean => {FILES => "lib/B/JVM/Jasmin/*~ perljvm"},
dist => {
CI => 'cvs -d /home/bkuhn/Files/Graduate/University-of-Cincinnati/CVSThesis commit' }
);