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++){ if ($ARGV[$i] =~ /^J2SDK=(.+)$/){ $jdk_dir = $1 ; splice(@ARGV, $i, 1) ; $i-- ; } } 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, 'bin', $f . $ext)){ my $bf = File::Spec->catfile('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, 'bin', 'javac' . $ext) ; my $jar = File::Spec->catfile($jdk_dir, '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 WriteMakefile( NAME => 'Inline::Java', VERSION_FROM => 'Java.pm', DIR => ['Java'], PREREQ_PM => { Inline => 0.44, Test => 1.13, }, 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 $obj_dir $server_arch $user_arch"}, ) ; # Create the properties that will be included in the jar. my @natives_so_parts = ("auto", "Inline", "Java", "Natives", "Natives." . Inline::Java::Portable::portable('SO_EXT')) ; my $install_natives_so = File::Spec->catfile($INSTALLSITEARCH, @natives_so_parts) ; $install_natives_so =~ s/\\/\\\\/g ; my $test_natives_so = File::Spec->rel2abs(File::Spec->catfile($INST_ARCHLIB, @natives_so_parts)) ; $test_natives_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" ;