#!/usr/bin/perl -w #Ident = $Id: Makefile.PL,v 1.2 2002/05/01 18:38:13 aknaff Exp $ use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. use strict; use File::Find; use File::Basename; use vars qw(%JAVA_LIB %JAVA_SO %JAVA_INC); my $JAVA_HOME=$ENV{JAVA_HOME}; if(! $JAVA_HOME) { print "Please input your JDK HOME path (e.g. /usr/local/jdk1.3) : "; $JAVA_HOME=; chomp($JAVA_HOME); } if(! -d $JAVA_HOME) { die "JAVA_HOME: '$JAVA_HOME' doesn't exist!"; } if($JAVA_HOME !~/1\.3/) { print <<"EOF"; WARNING: This package *ONLY* works with JDK1.3 beta or above! If the JDK version on your box is below than 1.3, it may NOT work! EOF } print "Searching files under '$JAVA_HOME' ...\n"; find(\&search, $JAVA_HOME); if(scalar keys(%JAVA_LIB) == 0) { die "Sorry, 'libjava.*' lib not found under '$JAVA_HOME'."; } if(scalar keys(%JAVA_SO) == 0) { die "Sorry, '*.so' not found under '$JAVA_HOME'."; } if(scalar keys(%JAVA_INC) == 0) { die "Sorry, '*.h' not found under '$JAVA_HOME'."; } takeOutExtraSoPath(\%JAVA_SO); print "1. Found 'libjava.so':\n" . join("\n", getSortedPath(%JAVA_LIB)) . "\n"; print "2. Found '*.so':\n" . join("\n", getSortedPath(%JAVA_SO)) . "\n"; print "3. Found '*.h':\n" . join("\n", getSortedPath(%JAVA_INC)) . "\n"; my $lib_1 = join(":", getSortedPath(%JAVA_SO)); my $lib_2 = join("\n#", getSortedPath(%JAVA_SO)); print << "EOF"; ############################################################# # To work with 'Jvm' package, you need add your Java # shared library path to either LD_LIBRARY_PATH shell # environment or in /etc/ld.so.conf, so that Java shared # library can be loaded when nessary. # You need do eithe A or B beforen next step: # A) set LD_LIBRARY_PATH environment variable # Add Java shared library paths in your LD_LIBRARY_PATH, e.g. # csh, tcsh: # setenv LD_LIBRARY_PATH $lib_1 # sh, bash, ksh: # export LD_LIBRARY_PATH=$lib_1 # B) edit /etc/ld.so.conf file # Add the following lines in your /etc/ld.so.conf # then run "ldconfig". #$lib_2 # # Following steps are: # make # make test # make install ############################################################# EOF WriteMakefile( 'NAME' => 'Jvm', 'VERSION_FROM' => 'Jvm.pm', # finds $VERSION 'LIBS' => join(" ", map { "-L$_" } getSortedPath(%JAVA_LIB)) . " -ljava", # e.g., '-lm' 'DEFINE' => "", # e.g., '-DHAVE_SOMETHING' 'INC' => join(" ", map { "-I$_" } getSortedPath(%JAVA_INC)), # e.g., '-I/usr/include/other' 'OBJECT' => "Jvm\$(OBJ_EXT)", "AUTHOR" => "Ye, Wei & Alain Knaff", "clean" => {FILES=> "*.class"}, ); sub getSortedPath { my(%path) = @_; return sort keys %path; } sub search { my $basename = basename($File::Find::name); my $dirname = dirname($File::Find::name); if($basename=~/^libjava\./) { $JAVA_LIB{$dirname} = 1; } if($basename=~/\.so$/) { $JAVA_SO{$dirname} = 1; } if($basename=~/\.h$/) { $JAVA_INC{$dirname} = 1; } } sub takeOutExtraSoPath { my($so_path) = @_; if(mymatch('hotspot$', $so_path)) { # if 'hostspot' found, take out others mydel('classic$', $so_path); mydel('green_threads$', $so_path); mydel('native_threads$', $so_path); mydel('server$', $so_path); } elsif (mymatch('green_threads$', $so_path)) { # if 'green_threads' found, take out others mydel('classic$', $so_path); mydel('native_threads$', $so_path); mydel('server$', $so_path); } } # to check if the hash match a regualar express sub mymatch { my($patt, $dir) = @_; foreach (keys %{$dir}) { if($_=~/$patt/) { return 1; } } return 0; } # undefine key out of hash if it matches RE $patt sub mydel { my($patt, $dir) = @_; foreach (keys %{$dir}) { if($_=~/$patt/) { delete $dir->{$_}; } } }