Commit | Line | Data |
35ef589f |
1 | Just-JNI (call into Java from Perl only) |
2 | ---------------------------------------- |
3 | |
4 | This has been tested with: |
5 | |
6 | Debian GNU/Linux 2.2 i386, perl 5.6.0, Kaffe (CVS, 2000-12-05 or later) |
7 | RedHat 6.1, perl-5.00503-6 (RedHat RPM), IBM JDK 1.1.8 |
8 | Debian 2.1 SPARC, Perl 5.005_60, JDK 1.2 beta (crashes with AWT, though) |
9 | Windows NT 4.0 SP4, ActivePerl 519, JDK 1.1.8, Visual C++ |
10 | Solaris 7, Perl 5.005_03, JDK 1.1.6, GCC 2.8.1 |
11 | |
12 | Solaris 7 Note (this probably applies to all native thread situations): |
13 | |
14 | Native threads were tricky. I had to build my own Perl, configured with: |
15 | |
16 | sh Configure -Dprefix=/opt/perl5.005 -Duseshrplib -Doptimize=-g \ |
17 | -Uusemymalloc -D cc=gcc -Dusethreads -d |
18 | |
19 | When Configure let me edit config.sh, I changed libs to: |
20 | |
21 | libs='-lthread -lsocket -lnsl -ldl -lm -lposix4 -lpthread -lc -lcrypt' |
22 | |
23 | The leading -lthread is the only thing I had to add. |
24 | |
25 | Kaffe Note: |
26 | |
27 | I believe that Kaffe with JIT enabled will likely be problematic. I had a |
28 | lot of trouble with it, that simply went away with interpreter-based Kaffe. |
29 | FWIW, here's how I configured Kaffe: |
30 | |
31 | env AM_CPPFLAGS=-DDEBUG CFLAGS="-O0 -ggdb" ./configure --disable-gcj \ |
32 | --with-engine=intrp |
33 | |
34 | Likely you don't need all that debugging stuff. |
35 | |
36 | Also, when I build perl, I do this, to be on the safe side. I was worried |
37 | about thread interaction, but realized there was no need to build threaded |
38 | perl, but I thought that the perl code should probably be reentrant, so, I |
39 | did this: |
40 | |
41 | sh ./Configure -Dcc=gcc -Doptimize='-D_REENTRANT -DDEBUGGING -ggdb' \ |
42 | -Dlibperl='libperl.so' -Duseshrplib='true' |
43 | |
44 | Again, you likely don't need the debugging flags. |
45 | |
46 | |
47 | How do I do this crazy thing? |
48 | ----------------------------- |
49 | |
50 | 1) Cd into the JPL directory. Type the following: |
51 | |
52 | perl Makefile.PL |
53 | make |
54 | make install |
55 | |
56 | Under windows, that's: |
57 | |
58 | perl Makefile.PL |
59 | nmake |
60 | nmake install |
61 | |
62 | 3) cd into the JNI directory (cd ../JNI or cd ..\JNI) |
63 | |
64 | 4) We now need to compile and make the Closer.class available to your |
65 | JPL program. Closer is a WindowListener that closes the Frame we |
66 | make in the test program. |
67 | |
68 | It seems that we've managed to fix the problem with CLASSPATH not |
69 | getting propagated to the JVM, so if '.' is in your CLASSPATH, you |
70 | should be able to compile Closer.java and leave it in the current |
71 | directory: |
72 | |
73 | javac Closer.java |
74 | |
75 | or perhaps |
76 | |
77 | jikes Closer.java |
78 | |
79 | 5) Make the demo: |
80 | |
81 | a) type the following: |
82 | |
83 | for SUN's proprietary software Java: |
84 | |
85 | env JAVA_HOME=/path/to/java perl Makefile.PL |
86 | # setting the JAVA_HOME enviornment variable might not be needed |
87 | # if Java is in installed in a canonical location |
88 | make |
89 | make test |
90 | |
91 | for Kaffe: |
92 | |
93 | env KAFFE_PREFIX=/kaffe/installation/prefix perl Makefile.PL |
94 | # setting the KAFFE_PREFIX enviornment variable might not be needed |
95 | # if Kaffe is in a canonical location |
96 | make |
97 | make test |
98 | |
99 | Under Windows: |
100 | |
101 | perl Makefile.PL |
102 | nmake |
103 | nmake test |
104 | |
105 | |
106 | b) if all went well, type: |
107 | |
108 | make install |
109 | |
110 | or, under Windows: |
111 | |
112 | nmake install |
113 | |