2 use ExtUtils::MakeMaker;
5 $ARCHNAME = $Config{archname};
8 getopts('e'); # embedding?
12 if ($^O eq 'solaris') {
13 $LIBPATH = " -R$Config{archlib}/CORE -L$Config{archlib}/CORE";
14 } elsif ($^O eq 'MSWin32') {
15 $LIBPATH = " -L$Config{archlib}\\CORE";
17 $LIBPATH = " -L$Config{archlib}/CORE";
21 # Figure out where Java might live
23 my @JAVA_HOME_GUESSES = qw(/usr/local/java /usr/java /usr/local/jdk117_v3
24 /usr/local/lib/kaffe C:\\JDK1.1.8
26 if (! defined $ENV{JAVA_HOME}) {
27 print "You didn't define JAVA_HOME, so I'm trying a few guesses.\n";
28 print "If this fails, you might want to try setting JAVA_HOME and\n";
29 print "running me again.\n";
31 @JAVA_HOME_GUESSES = ( $ENV{JAVA_HOME} );
34 # Let's find out where jni.h lives
36 my @INCLUDE = find_includes();
37 $INC = join(" -I", ("", @INCLUDE));
39 # Let's find out the name of the Java shared library
41 my @JAVALIBS = find_libs();
43 # Find out some defines based on the library we are linking to
46 if ( /javai.lib$/ or /jvm.lib$/) { # We're on Win32
49 $CCFLAGS .= "-DWIN32 -Z7 -D_DEBUG";
51 } elsif (/libkaffevm.so$/) {
52 $CCFLAGS .= "-DKAFFE";
56 # Let's find out the path of the library we need to link against.
59 if ( /javai.lib$/ or /jvm.lib$/) { # We're on Win32
62 my ($libname, $libpath, $libsuffix) = fileparse($_, ("\.so", "\.lib"));
64 if ($^O eq 'solaris') {
65 $LIBPATH .= " -R$libpath -L$libpath"
67 $LIBPATH .= " -L$libpath"
69 $LIBS .= " -l$libname";
72 # Do we need -D_REENTRANT?
73 if ($LIBPATH =~ /native/) {
74 print "Looks like native threads...\n";
75 $CCFLAGS .= " -D_REENTRANT";
79 print "We're embedding Perl in Java via libPerlInterpreter.so.\n";
80 eval `../setvars -perl`;
81 $CCFLAGS .= " -DEMBEDDEDPERL";
82 $LIBPATH .= " -R$ENV{JPL_HOME}/lib/$ARCHNAME -L$ENV{JPL_HOME}/lib/$ARCHNAME";
83 $LIBS .= " -lPerlInterpreter";
87 if ($^O eq 'solaris') {
88 $LIBS = " -lthread -lc $LIBS"; #-lthread must be first!!!
89 $CCFLAGS .= " -D_REENTRANT";
94 VERSION_FROM => 'JNI.pm',
96 LINKTYPE => 'dynamic',
98 CCFLAGS => "$Config{ccflags} $CCFLAGS",
99 ($Config{archname} =~ /mswin32.*-object/i ? ('CAPI' => 'TRUE') : ()),
102 $Makefile{LIBS} = ["$LIBPATH $LIBS"];
104 $Makefile{MYEXTLIB} = $MYEXTLIB;
107 # See lib/ExtUtils/MakeMaker.pm for details of how to influence
108 # the contents of the Makefile that is written.
110 WriteMakefile(%Makefile);
112 # subroutine to find a library
116 my ($candidates, $locations) = @_;
120 foreach my $name (@$candidates) {
121 if (/$name$/ and ! /green_threads/ and !/include-old/) {
122 $lib = $File::Find::name;
128 foreach my $guess (@$locations) {
129 next unless -d $guess;
130 find (\&$wanted, $guess);
133 print "Could not find @$candidates\n";
135 print "Found @$candidates as $lib\n\n";
140 # Extra lib for Java 1.2
144 my $libjava = find_stuff(['libjava.so', 'libkaffevm.so', 'javai.lib', 'jvm.lib'],
145 \@JAVA_HOME_GUESSES);
146 my $libjvm = find_stuff(['libjvm.so'], \@JAVA_HOME_GUESSES);
147 if ($libjvm) { # JDK 1.2
148 my $libhpi = find_stuff(['libhpi.so'], \@JAVA_HOME_GUESSES);
149 my $libawt = find_stuff(['libawt.so'], \@JAVA_HOME_GUESSES);
150 return($libjava, $libjvm, $libhpi, $libawt);
157 # We need to find jni.h and jni_md.h
161 my @CANDIDATES = qw(jni.h jni_md.h);
165 foreach my $name (@CANDIDATES) {
167 my ($hname, $hpath, $hsuffix) =
168 fileparse($File::Find::name, ("\.h", "\.H"));
169 unless ($hpath =~ /include-old/) {
170 print "Found $hname$hsuffix in $hpath\n";
171 push @includes, $hpath;
178 foreach my $guess (@JAVA_HOME_GUESSES) {
179 next unless -d $guess;
180 find (\&find_inc, $guess);
183 die "Could not find Java includes!";
185 print join("\n", @includes), "\n";