use ExtUtils::MakeMaker ; use strict ; use File::Spec ; use Cwd ; use Config ; require "Java/Portable.pm" ; print "\nWelcome to the Inline::Java installation procedure.\n\n" ; # Grab the J2SDK argument my $jdk_dir = '' ; for (my $i = 0 ; $i < scalar(@ARGV) ; $i++){ my $remove = 0 ; if ($ARGV[$i] =~ /^J2SDK=(.+)$/){ $jdk_dir = $1 ; $remove = 1 ; } elsif ($ARGV[$i] =~ /^BUILD_JNI=(.+)$/){ $main::build_jni = $1 ; $remove = 1 ; } elsif ($ARGV[$i] =~ /^BUILD_PERL_NATIVES=(.+)$/){ $main::build_perl_natives = $1 ; $remove = 1 ; } elsif ($ARGV[$i] =~ /^BUILD_PERL_INTERPRETER=(.+)$/){ $main::build_perl_interpreter = $1 ; $remove = 1 ; } elsif ($ARGV[$i] =~ /^JVM_LIB_TYPE=(.+)$/){ $main::jvm_lib_type = $1 ; $remove = 1 ; } if ($remove){ splice(@ARGV, $i, 1) ; $i-- ; } } if (! $jdk_dir){ my $try = $ENV{PERL_INLINE_JAVA_J2SDK} || $ENV{JAVA_HOME} || Inline::Java::Portable::portable('DEFAULT_J2SDK_DIR') ; print "Using $try as J2SDK directory.\n\n" if $try ; $jdk_dir = $try ; } if (! $jdk_dir){ my $def_pl = File::Spec->catfile('Java', 'default_j2sdk.pl') ; if (-e $def_pl){ require File::Spec->catfile('Java', 'default_j2sdk.pl') ; $jdk_dir = Inline::Java::get_default_j2sdk() ; } else { print <catfile($jdk_dir, $jdk_bin, $f . $ext)){ my $bf = File::Spec->catfile($jdk_bin, $f . $ext) ; print "Can't locate file '$bf' anywhere under '$jdk_dir'\n" ; } } # Now we have the J2SDK directory and it exists. # We will create the default_j2sdk.pl file that # will contain that value for future use. my $def_jdk = File::Spec->catfile('Java', 'default_j2sdk.pl') ; open(J2SDK, ">$def_jdk") or die("Can't open '$def_jdk' for writing: $!") ; print J2SDK <catfile($jdk_dir, $jdk_bin, 'javac' . $ext) ; my $jar = File::Spec->catfile($jdk_dir, $jdk_bin, 'jar' . $ext) ; my $src_dir = File::Spec->catdir('Java', 'sources', 'org', 'perl', 'inline', 'java') ; my $src = File::Spec->catfile($src_dir, '*.java') ; my $obj_dir = File::Spec->catdir('Java', 'classes') ; my $server_arch = File::Spec->catfile('Java', 'InlineJavaServer.jar') ; my $user_arch = File::Spec->catfile('Java', 'InlineJavaUser.jar') ; # Create the object diretory because later we need to put the properties # file inside it. if (! -e $obj_dir){ mkdir($obj_dir) or die("Can't create object directory '$obj_dir': $!") ; } sub MY::top_targets { my $this = shift ; my $make = <MM::top_targets() ; } my $INSTALLSITEARCH = '' ; my $INST_ARCHLIB = '' ; sub MY::postamble { my $this = shift ; my $make = <{$var} ; while ($val =~ s/\$\((.*?)\)/$mm->{$1}/){} $val =~ s/\\/\\\\/g ; return $val ; } # Write the Makefile my $natives_test = File::Spec->catdir('Java', 'Natives', '_Inline_test') ; my $perlinterp_test = File::Spec->catdir('Java', 'PerlInterpreter', '_Inline_test') ; WriteMakefile( NAME => 'Inline::Java', VERSION_FROM => 'Java.pm', DIR => ['Java'], PREREQ_PM => { Inline => 0.44, Test => 1.13, 'MIME::Base64' => 0, }, PM => { 'Java.pm' => File::Spec->catfile('$(INST_LIBDIR)', 'Java.pm'), 'Java.pod'=> File::Spec->catfile('$(INST_LIBDIR)', 'Java.pod'), $server_arch => File::Spec->catfile('$(INST_LIBDIR)', $server_arch), $user_arch => File::Spec->catfile('$(INST_LIBDIR)', $user_arch), }, clean => {FILES => "$def_jdk _Inline_test $natives_test $perlinterp_test $obj_dir $server_arch $user_arch"}, ) ; # Add the so_dirs to the default_j2sdk.pl file. open(J2SDK, ">>$def_jdk") or die("Can't open '$def_jdk' for appending: $!") ; print J2SDK <catfile($INSTALLSITEARCH, @perlnatives_so_parts) ; $install_perlnatives_so =~ s/\\/\\\\/g ; my $test_perlnatives_so = File::Spec->rel2abs(File::Spec->catfile($INST_ARCHLIB, @perlnatives_so_parts)) ; $test_perlnatives_so =~ s/\\/\\\\/g ; my @perlinterpreter_so_parts = ("auto", "Inline", "Java", "PerlInterpreter", "PerlInterpreter." . Inline::Java::Portable::portable('SO_EXT')) ; my $install_perlinterpreter_so = File::Spec->catfile($INSTALLSITEARCH, @perlinterpreter_so_parts) ; $install_perlinterpreter_so =~ s/\\/\\\\/g ; my $test_perlinterpreter_so = File::Spec->rel2abs(File::Spec->catfile($INST_ARCHLIB, @perlinterpreter_so_parts)) ; $test_perlinterpreter_so =~ s/\\/\\\\/g ; my $libperl = $Config{libperl} ; my $dlext = $Config{dlext} ; my $libperl_so = '' ; if ($libperl =~ /\.$dlext$/){ $libperl_so = File::Spec->catfile($Config{installarchlib}, 'CORE', $libperl) ; } my $prop = File::Spec->catfile($obj_dir, 'InlineJava.properties') ; open(PROP, ">$prop") or die("Can't open '$prop' for writing: $!") ; print PROP < ; close(MAKEFILE) ; open(MAKEFILE, ">Makefile") or die "Can't open Makefile for writing" ; foreach my $line (@lines){ if ($line !~ /^\s*((\@\[)|(\]))\s*$/){ print MAKEFILE $line ; } } close(MAKEFILE) ; } my $make = Inline::Java::Portable::portable('MAKE') ; print "\nYou can continue the installation with the following commands:\n" ; print " % $make java\n" ; print " % $make\n" ; print " % $make test\n" ; print " % $make install\n" ;