This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add option to omit Changes file, from Abigail <abigail@delanet.com>;
[perl5.git] / jpl / JNI / JNI.pm
1 package JNI;
2
3 use strict;
4 use Carp;
5 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD $JVM @JVM_ARGS $JAVALIB);
6
7 require Exporter;
8 require DynaLoader;
9 require AutoLoader;
10
11 @ISA = qw(Exporter DynaLoader);
12
13 @EXPORT = qw(
14         JNI_ABORT
15         JNI_COMMIT
16         JNI_ERR
17         JNI_FALSE
18         JNI_H
19         JNI_OK
20         JNI_TRUE
21         GetVersion
22         DefineClass
23         FindClass
24         GetSuperclass
25         IsAssignableFrom
26         Throw
27         ThrowNew
28         ExceptionOccurred
29         ExceptionDescribe
30         ExceptionClear
31         FatalError
32         NewGlobalRef
33         DeleteGlobalRef
34         DeleteLocalRef
35         IsSameObject
36         AllocObject
37         NewObject
38         NewObjectA
39         GetObjectClass
40         IsInstanceOf
41         GetMethodID
42         CallObjectMethod
43         CallObjectMethodA
44         CallBooleanMethod
45         CallBooleanMethodA
46         CallByteMethod
47         CallByteMethodA
48         CallCharMethod
49         CallCharMethodA
50         CallShortMethod
51         CallShortMethodA
52         CallIntMethod
53         CallIntMethodA
54         CallLongMethod
55         CallLongMethodA
56         CallFloatMethod
57         CallFloatMethodA
58         CallDoubleMethod
59         CallDoubleMethodA
60         CallVoidMethod
61         CallVoidMethodA
62         CallNonvirtualObjectMethod
63         CallNonvirtualObjectMethodA
64         CallNonvirtualBooleanMethod
65         CallNonvirtualBooleanMethodA
66         CallNonvirtualByteMethod
67         CallNonvirtualByteMethodA
68         CallNonvirtualCharMethod
69         CallNonvirtualCharMethodA
70         CallNonvirtualShortMethod
71         CallNonvirtualShortMethodA
72         CallNonvirtualIntMethod
73         CallNonvirtualIntMethodA
74         CallNonvirtualLongMethod
75         CallNonvirtualLongMethodA
76         CallNonvirtualFloatMethod
77         CallNonvirtualFloatMethodA
78         CallNonvirtualDoubleMethod
79         CallNonvirtualDoubleMethodA
80         CallNonvirtualVoidMethod
81         CallNonvirtualVoidMethodA
82         GetFieldID
83         GetObjectField
84         GetBooleanField
85         GetByteField
86         GetCharField
87         GetShortField
88         GetIntField
89         GetLongField
90         GetFloatField
91         GetDoubleField
92         SetObjectField
93         SetBooleanField
94         SetByteField
95         SetCharField
96         SetShortField
97         SetIntField
98         SetLongField
99         SetFloatField
100         SetDoubleField
101         GetStaticMethodID
102         CallStaticObjectMethod
103         CallStaticObjectMethodA
104         CallStaticBooleanMethod
105         CallStaticBooleanMethodA
106         CallStaticByteMethod
107         CallStaticByteMethodA
108         CallStaticCharMethod
109         CallStaticCharMethodA
110         CallStaticShortMethod
111         CallStaticShortMethodA
112         CallStaticIntMethod
113         CallStaticIntMethodA
114         CallStaticLongMethod
115         CallStaticLongMethodA
116         CallStaticFloatMethod
117         CallStaticFloatMethodA
118         CallStaticDoubleMethod
119         CallStaticDoubleMethodA
120         CallStaticVoidMethod
121         CallStaticVoidMethodA
122         GetStaticFieldID
123         GetStaticObjectField
124         GetStaticBooleanField
125         GetStaticByteField
126         GetStaticCharField
127         GetStaticShortField
128         GetStaticIntField
129         GetStaticLongField
130         GetStaticFloatField
131         GetStaticDoubleField
132         SetStaticObjectField
133         SetStaticBooleanField
134         SetStaticByteField
135         SetStaticCharField
136         SetStaticShortField
137         SetStaticIntField
138         SetStaticLongField
139         SetStaticFloatField
140         SetStaticDoubleField
141         NewString
142         GetStringLength
143         GetStringChars
144         NewStringUTF
145         GetStringUTFLength
146         GetStringUTFChars
147         GetArrayLength
148         NewObjectArray
149         GetObjectArrayElement
150         SetObjectArrayElement
151         NewBooleanArray
152         NewByteArray
153         NewCharArray
154         NewShortArray
155         NewIntArray
156         NewLongArray
157         NewFloatArray
158         NewDoubleArray
159         GetBooleanArrayElements
160         GetByteArrayElements
161         GetCharArrayElements
162         GetShortArrayElements
163         GetIntArrayElements
164         GetLongArrayElements
165         GetFloatArrayElements
166         GetDoubleArrayElements
167         GetBooleanArrayRegion
168         GetByteArrayRegion
169         GetCharArrayRegion
170         GetShortArrayRegion
171         GetIntArrayRegion
172         GetLongArrayRegion
173         GetFloatArrayRegion
174         GetDoubleArrayRegion
175         SetBooleanArrayRegion
176         SetByteArrayRegion
177         SetCharArrayRegion
178         SetShortArrayRegion
179         SetIntArrayRegion
180         SetLongArrayRegion
181         SetFloatArrayRegion
182         SetDoubleArrayRegion
183         RegisterNatives
184         UnregisterNatives
185         MonitorEnter
186         MonitorExit
187         GetJavaVM
188 );
189
190 $VERSION = '0.01';
191
192 sub AUTOLOAD {
193     # This AUTOLOAD is used to 'autoload' constants from the constant()
194     # XS function.  If a constant is not found then control is passed
195     # to the AUTOLOAD in AutoLoader.
196
197     my $constname;
198     ($constname = $AUTOLOAD) =~ s/.*:://;
199     my $val = constant($constname, @_ ? $_[0] : 0);
200     if ($! != 0) {
201         if ($! =~ /Invalid/) {
202             $AutoLoader::AUTOLOAD = $AUTOLOAD;
203             goto &AutoLoader::AUTOLOAD;
204         }
205         else {
206                 croak "Your vendor has not defined JNI macro $constname";
207         }
208     }
209     eval "sub $AUTOLOAD { $val }";
210     goto &$AUTOLOAD;
211 }
212
213 bootstrap JNI $VERSION;
214
215 if (not $JPL::_env_) {
216     $ENV{JAVA_HOME} ||= "/usr/local/java";
217
218     chop(my $arch = `uname -p`);
219     chop($arch = `uname -m`) unless -d "$ENV{JAVA_HOME}/lib/$arch";
220
221     my @CLASSPATH = split(/:/, $ENV{CLASSPATH});
222     @CLASSPATH = "." unless @CLASSPATH;
223     push @CLASSPATH,
224         "$ENV{JAVA_HOME}/classes",
225         "$ENV{JAVA_HOME}/lib/classes.zip";
226     $ENV{CLASSPATH} = join(':', @CLASSPATH);
227
228     $ENV{THREADS_TYPE} ||= "green_threads";
229
230     $JAVALIB = "$ENV{JAVA_HOME}/lib/$arch/$ENV{THREADS_TYPE}";
231     $ENV{LD_LIBRARY_PATH} .= ":$JAVALIB";
232
233     $JVM = GetJavaVM("$JAVALIB/libjava.so",@JVM_ARGS);
234 }
235
236 1;
237 __END__
238
239 =head1 NAME
240
241 JNI - Perl encapsulation of the Java Native Interface
242
243 =head1 SYNOPSIS
244
245   use JNI;
246
247 =head1 DESCRIPTION
248
249 =head1 Exported constants
250
251   JNI_ABORT
252   JNI_COMMIT
253   JNI_ERR
254   JNI_FALSE
255   JNI_H
256   JNI_OK
257   JNI_TRUE
258
259
260 =head1 AUTHOR
261
262 Copyright 1998, O'Reilly & Associates, Inc.
263
264 This package may be copied under the same terms as Perl itself.
265
266 =head1 SEE ALSO
267
268 perl(1).
269
270 =cut