1
- #.rst:
2
- # FindJNI
3
- # -------
4
- #
5
- # Find JNI java libraries.
6
- #
1
+ # - Find JNI java libraries.
7
2
# This module finds if Java is installed and determines where the
8
- # include files and libraries are. It also determines what the name of
9
- # the library is. The caller may set variable JAVA_HOME to specify a
10
- # Java installation prefix explicitly.
11
- #
12
- # This module sets the following result variables:
3
+ # include files and libraries are. It also determines what the name of
4
+ # the library is. This code sets the following variables:
13
5
#
14
- # ::
6
+ # JNI_INCLUDE_DIRS = the include dirs to use
7
+ # JNI_LIBRARIES = the libraries to use
8
+ # JNI_FOUND = TRUE if JNI headers and libraries were found.
9
+ # JAVA_AWT_LIBRARY = the path to the jawt library
10
+ # JAVA_JVM_LIBRARY = the path to the jvm library
11
+ # JAVA_INCLUDE_PATH = the include path to jni.h
12
+ # JAVA_INCLUDE_PATH2 = the include path to jni_md.h
13
+ # JAVA_AWT_INCLUDE_PATH = the include path to jawt.h
15
14
#
16
- # JNI_INCLUDE_DIRS = the include dirs to use
17
- # JNI_LIBRARIES = the libraries to use
18
- # JNI_FOUND = TRUE if JNI headers and libraries were found.
19
- # JAVA_AWT_LIBRARY = the path to the jawt library
20
- # JAVA_JVM_LIBRARY = the path to the jvm library
21
- # JAVA_INCLUDE_PATH = the include path to jni.h
22
- # JAVA_INCLUDE_PATH2 = the include path to jni_md.h
23
- # JAVA_AWT_INCLUDE_PATH = the include path to jawt.h
24
15
25
16
#=============================================================================
26
17
# Copyright 2001-2009 Kitware, Inc.
@@ -42,11 +33,7 @@ macro(java_append_library_directories _var)
42
33
# 1.6.0_18 + icedtea patches. However, it would be much better to base the
43
34
# guess on the first part of the GNU config.guess platform triplet.
44
35
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" )
45
- if (CMAKE_LIBRARY_ARCHITECTURE STREQUAL "x86_64-linux-gnux32" )
46
- set (_java_libarch "x32" "amd64" "i386" )
47
- else ()
48
- set (_java_libarch "amd64" "i386" )
49
- endif ()
36
+ set (_java_libarch "amd64" )
50
37
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$" )
51
38
set (_java_libarch "i386" )
52
39
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha" )
@@ -57,13 +44,11 @@ macro(java_append_library_directories _var)
57
44
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^mips" )
58
45
# mips* machines are bi-endian mostly so processor does not tell
59
46
# endianess of the underlying system.
60
- set (_java_libarch "${CMAKE_SYSTEM_PROCESSOR} " "mips" "mipsel" "mipseb" "mips64" "mips64el" "mipsn32" "mipsn32el" )
61
- elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le" )
62
- set (_java_libarch "ppc64" "ppc64le" )
47
+ set (_java_libarch "${CMAKE_SYSTEM_PROCESSOR} " "mips" "mipsel" "mipseb" )
63
48
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" )
64
- set (_java_libarch "ppc64" "ppc" )
49
+ set (_java_libarch "ppc64" )
65
50
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)" )
66
- set (_java_libarch "ppc" "ppc64" )
51
+ set (_java_libarch "ppc" )
67
52
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc" )
68
53
# Both flavours can run on the same processor
69
54
set (_java_libarch "${CMAKE_SYSTEM_PROCESSOR} " "sparc" "sparcv9" )
@@ -92,49 +77,25 @@ macro(java_append_library_directories _var)
92
77
if (_path MATCHES "{libarch}" )
93
78
foreach (_libarch ${_java_libarch} )
94
79
string (REPLACE "{libarch}" "${_libarch} " _newpath "${_path} " )
95
- if (EXISTS ${_newpath} )
96
- list (APPEND ${_var} "${_newpath} " )
97
- endif ()
80
+ list (APPEND ${_var} "${_newpath} " )
98
81
endforeach ()
99
82
else ()
100
- if (EXISTS ${_path} )
101
- list (APPEND ${_var} "${_path} " )
102
- endif ()
83
+ list (APPEND ${_var} "${_path} " )
103
84
endif ()
104
85
endforeach ()
105
86
endmacro ()
106
87
107
- include (${CMAKE_CURRENT_LIST_DIR} /CMakeFindJavaCommon.cmake )
108
-
109
- # Save CMAKE_FIND_FRAMEWORK
110
- if (DEFINED CMAKE_FIND_FRAMEWORK )
111
- set (_JNI_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK} )
112
- else ()
113
- unset (_JNI_CMAKE_FIND_FRAMEWORK )
114
- endif ()
115
-
116
- if (_JAVA_HOME_EXPLICIT )
117
- set (CMAKE_FIND_FRAMEWORK NEVER )
118
- endif ()
119
-
120
- set (JAVA_AWT_LIBRARY_DIRECTORIES )
121
- if (_JAVA_HOME )
122
- JAVA_APPEND_LIBRARY_DIRECTORIES (JAVA_AWT_LIBRARY_DIRECTORIES
123
- ${_JAVA_HOME} /jre/lib/{libarch}
124
- ${_JAVA_HOME} /jre/lib
125
- ${_JAVA_HOME} /lib/{libarch}
126
- ${_JAVA_HOME} /lib
127
- ${_JAVA_HOME}
128
- )
129
- endif ()
130
88
get_filename_component (java_install_version
131
89
"[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ JavaSoft\\ Java Development Kit;CurrentVersion]" NAME )
132
90
133
- list ( APPEND JAVA_AWT_LIBRARY_DIRECTORIES
91
+ set ( JAVA_AWT_LIBRARY_DIRECTORIES
134
92
"[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ JavaSoft\\ Java Development Kit\\ 1.4;JavaHome]/lib"
135
93
"[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ JavaSoft\\ Java Development Kit\\ 1.3;JavaHome]/lib"
136
94
"[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ JavaSoft\\ Java Development Kit\\ ${java_install_version} ;JavaHome]/lib"
137
95
)
96
+
97
+ file (TO_CMAKE_PATH "$ENV{JAVA_HOME} " _JAVA_HOME )
98
+
138
99
JAVA_APPEND_LIBRARY_DIRECTORIES (JAVA_AWT_LIBRARY_DIRECTORIES
139
100
${_JAVA_HOME} /jre/lib/{libarch}
140
101
${_JAVA_HOME} /jre/lib
@@ -180,7 +141,8 @@ JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
180
141
181
142
set (JAVA_JVM_LIBRARY_DIRECTORIES )
182
143
foreach (dir ${JAVA_AWT_LIBRARY_DIRECTORIES} )
183
- list (APPEND JAVA_JVM_LIBRARY_DIRECTORIES
144
+ set (JAVA_JVM_LIBRARY_DIRECTORIES
145
+ ${JAVA_JVM_LIBRARY_DIRECTORIES}
184
146
"${dir} "
185
147
"${dir} /client"
186
148
"${dir} /server"
@@ -190,17 +152,15 @@ foreach(dir ${JAVA_AWT_LIBRARY_DIRECTORIES})
190
152
)
191
153
endforeach ()
192
154
193
- set (JAVA_AWT_INCLUDE_DIRECTORIES )
194
- if (_JAVA_HOME )
195
- list (APPEND JAVA_AWT_INCLUDE_DIRECTORIES ${_JAVA_HOME} /include )
196
- endif ()
197
- list (APPEND JAVA_AWT_INCLUDE_DIRECTORIES
155
+
156
+ set (JAVA_AWT_INCLUDE_DIRECTORIES
198
157
"[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ JavaSoft\\ Java Development Kit\\ 1.4;JavaHome]/include"
199
158
"[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ JavaSoft\\ Java Development Kit\\ 1.3;JavaHome]/include"
200
159
"[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ JavaSoft\\ Java Development Kit\\ ${java_install_version} ;JavaHome]/include"
201
160
)
202
161
203
162
JAVA_APPEND_LIBRARY_DIRECTORIES (JAVA_AWT_INCLUDE_DIRECTORIES
163
+ ${_JAVA_HOME} /include
204
164
/usr/include
205
165
/usr/local/include
206
166
/usr/lib/java/include
@@ -222,6 +182,8 @@ JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_INCLUDE_DIRECTORIES
222
182
# Debian specific path for default JVM
223
183
/usr/lib/jvm/default-java/include
224
184
# Ubuntu
185
+ /usr/lib/jvm/java-7-openjdk-{libarch}/include
186
+ /usr/lib/jvm/java-6-openjdk-{libarch}/include
225
187
/usr/lib/jvm/java-1.5.0-gcj-4.6/include
226
188
/usr/lib/jvm/java-1.5.0-gcj-4.5/include
227
189
/usr/lib/jvm/java-1.5.0-gcj-4.4/include
@@ -236,97 +198,84 @@ foreach(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}")
236
198
get_filename_component (jpath "${JAVA_PROG} " PATH )
237
199
foreach (JAVA_INC_PATH ../include ../java/include ../share/java/include )
238
200
if (EXISTS ${jpath} /${JAVA_INC_PATH} )
239
- list ( APPEND JAVA_AWT_INCLUDE_DIRECTORIES "${jpath} /${JAVA_INC_PATH} " )
201
+ set ( JAVA_AWT_INCLUDE_DIRECTORIES ${ JAVA_AWT_INCLUDE_DIRECTORIES} "${jpath} /${JAVA_INC_PATH} " )
240
202
endif ()
241
203
endforeach ()
242
204
foreach (JAVA_LIB_PATH
243
205
../lib ../jre/lib ../jre/lib/i386
244
206
../java/lib ../java/jre/lib ../java/jre/lib/i386
245
207
../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386 )
246
208
if (EXISTS ${jpath} /${JAVA_LIB_PATH} )
247
- list ( APPEND JAVA_AWT_LIBRARY_DIRECTORIES "${jpath} /${JAVA_LIB_PATH} " )
209
+ set ( JAVA_AWT_LIBRARY_DIRECTORIES ${ JAVA_AWT_LIBRARY_DIRECTORIES} "${jpath} /${JAVA_LIB_PATH} " )
248
210
endif ()
249
211
endforeach ()
250
212
endforeach ()
251
213
252
214
if (APPLE )
253
- if (CMAKE_FIND_FRAMEWORK STREQUAL "ONLY" )
254
- set (_JNI_SEARCHES FRAMEWORK )
255
- elseif ( CMAKE_FIND_FRAMEWORK STREQUAL "NEVER" )
256
- set ( _JNI_SEARCHES NORMAL )
257
- elseif ( CMAKE_FIND_FRAMEWORK STREQUAL "LAST" )
258
- set ( _JNI_SEARCHES NORMAL FRAMEWORK )
259
- else ( )
260
- set (_JNI_SEARCHES FRAMEWORK NORMAL )
215
+ if (EXISTS ~/Library/Frameworks/JavaVM.framework )
216
+ set (JAVA_HAVE_FRAMEWORK 1 )
217
+ endif ( )
218
+ if ( EXISTS /Library/Frameworks/JavaVM.framework )
219
+ set ( JAVA_HAVE_FRAMEWORK 1 )
220
+ endif ( )
221
+ if ( EXISTS /System/Library/Frameworks/JavaVM.framework )
222
+ set (JAVA_HAVE_FRAMEWORK 1 )
261
223
endif ()
262
- set (_JNI_FRAMEWORK_JVM NAMES JavaVM )
263
- set (_JNI_FRAMEWORK_JAWT "${_JNI_FRAMEWORK_JVM} " )
264
- else ()
265
- set (_JNI_SEARCHES NORMAL )
266
- endif ()
267
224
268
- set ( _JNI_NORMAL_JVM
269
- NAMES jvm
270
- PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES}
271
- )
225
+ if ( JAVA_HAVE_FRAMEWORK )
226
+ if ( NOT JAVA_AWT_LIBRARY )
227
+ set ( JAVA_AWT_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE )
228
+ endif ( )
272
229
273
- set (_JNI_NORMAL_JAWT
274
- NAMES jawt
275
- PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES}
276
- )
230
+ if (NOT JAVA_JVM_LIBRARY )
231
+ set (JAVA_JVM_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE )
232
+ endif ()
277
233
278
- foreach (search ${_JNI_SEARCHES} )
279
- find_library (JAVA_JVM_LIBRARY ${_JNI_${search}_JVM} )
280
- find_library (JAVA_AWT_LIBRARY ${_JNI_${search}_JAWT} )
281
- if (JAVA_JVM_LIBRARY )
282
- break ()
283
- endif ()
284
- endforeach ()
285
- unset (_JNI_SEARCHES )
286
- unset (_JNI_FRAMEWORK_JVM )
287
- unset (_JNI_FRAMEWORK_JAWT )
288
- unset (_JNI_NORMAL_JVM )
289
- unset (_JNI_NORMAL_JAWT )
234
+ if (NOT JAVA_AWT_INCLUDE_PATH )
235
+ if (EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h )
236
+ set (JAVA_AWT_INCLUDE_PATH "/System/Library/Frameworks/JavaVM.framework/Headers" CACHE FILEPATH "jawt.h location" FORCE )
237
+ endif ()
238
+ endif ()
290
239
291
- # Find headers matching the library.
292
- if ("${JAVA_JVM_LIBRARY} ;${JAVA_AWT_LIBRARY} ;" MATCHES "(/JavaVM.framework|-framework JavaVM);" )
293
- set (CMAKE_FIND_FRAMEWORK ONLY )
240
+ # If using "-framework JavaVM", prefer its headers *before* the others in
241
+ # JAVA_AWT_INCLUDE_DIRECTORIES... (*prepend* to the list here)
242
+ #
243
+ set (JAVA_AWT_INCLUDE_DIRECTORIES
244
+ ~/Library/Frameworks/JavaVM.framework/Headers
245
+ /Library/Frameworks/JavaVM.framework/Headers
246
+ /System/Library/Frameworks/JavaVM.framework/Headers
247
+ ${JAVA_AWT_INCLUDE_DIRECTORIES}
248
+ )
249
+ endif ()
294
250
else ()
295
- set (CMAKE_FIND_FRAMEWORK NEVER )
251
+ find_library (JAVA_AWT_LIBRARY jawt
252
+ PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES}
253
+ )
254
+ find_library (JAVA_JVM_LIBRARY NAMES jvm JavaVM
255
+ PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES}
256
+ )
296
257
endif ()
297
258
298
259
# add in the include path
299
260
find_path (JAVA_INCLUDE_PATH jni.h
300
261
${JAVA_AWT_INCLUDE_DIRECTORIES}
301
262
)
302
263
303
- find_path (JAVA_INCLUDE_PATH2 NAMES jni_md.h jniport.h
304
- PATHS
264
+ find_path (JAVA_INCLUDE_PATH2 jni_md.h
305
265
${JAVA_INCLUDE_PATH}
306
- ${JAVA_INCLUDE_PATH} /darwin
307
266
${JAVA_INCLUDE_PATH} /win32
308
267
${JAVA_INCLUDE_PATH} /linux
309
268
${JAVA_INCLUDE_PATH} /freebsd
310
- ${JAVA_INCLUDE_PATH} /openbsd
311
269
${JAVA_INCLUDE_PATH} /solaris
312
270
${JAVA_INCLUDE_PATH} /hp-ux
313
271
${JAVA_INCLUDE_PATH} /alpha
314
- ${JAVA_INCLUDE_PATH} /aix
315
272
)
316
273
317
274
find_path (JAVA_AWT_INCLUDE_PATH jawt.h
318
275
${JAVA_INCLUDE_PATH}
319
276
)
320
277
321
- # Restore CMAKE_FIND_FRAMEWORK
322
- if (DEFINED _JNI_CMAKE_FIND_FRAMEWORK )
323
- set (CMAKE_FIND_FRAMEWORK ${_JNI_CMAKE_FIND_FRAMEWORK} )
324
- unset (_JNI_CMAKE_FIND_FRAMEWORK )
325
- else ()
326
- unset (CMAKE_FIND_FRAMEWORK )
327
- endif ()
328
-
329
- include (${CMAKE_CURRENT_LIST_DIR} /FindPackageHandleStandardArgs.cmake )
278
+ include (${CMAKE_ROOT} /Modules/FindPackageHandleStandardArgs.cmake )
330
279
FIND_PACKAGE_HANDLE_STANDARD_ARGS (JNI DEFAULT_MSG JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY
331
280
JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH )
332
281
0 commit comments