Merge lp:~zorba-coders/zorba/util-jvm-rpath into lp:zorba/util-jvm-module

Proposed by Juan Zacarias
Status: Merged
Approved by: Chris Hillery
Approved revision: 17
Merged at revision: 17
Proposed branch: lp:~zorba-coders/zorba/util-jvm-rpath
Merge into: lp:zorba/util-jvm-module
Diff against target: 334 lines (+315/-4)
2 files modified
cmake_modules/FindJNI.cmake (+304/-0)
src/CMakeLists.txt (+11/-4)
To merge this branch: bzr merge lp:~zorba-coders/zorba/util-jvm-rpath
Reviewer Review Type Date Requested Status
Chris Hillery Approve
Juan Zacarias Approve
Review via email: mp+163074@code.launchpad.net

Commit message

Fixes for Debian Installers.

Description of the change

Fixes for Debian Installers.

To post a comment you must log in.
Revision history for this message
Chris Hillery (ceejatec) wrote :

1. I believe that the correct values for RPATH are directories, not actual .so files, so the value of INSTALL_RPATH_PATHS should omit all the "/libjvm.so" parts.

2. FindJNI.cmake says:

# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)

So, we should do that.

review: Needs Fixing
17. By Juan Zacarias

Updated FindJNI with the correct cmake license, Added the correct RPATHS.

Revision history for this message
Juan Zacarias (juan457) :
review: Approve
Revision history for this message
Chris Hillery (ceejatec) :
review: Approve
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Validation queue job util-jvm-rpath-2013-05-27T19-06-44.412Z is finished. The final status was:

All tests succeeded!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'cmake_modules/FindJNI.cmake'
--- cmake_modules/FindJNI.cmake 1970-01-01 00:00:00 +0000
+++ cmake_modules/FindJNI.cmake 2013-05-27 16:57:27 +0000
@@ -0,0 +1,304 @@
1# - Find JNI java libraries.
2# This module finds if Java is installed and determines where the
3# include files and libraries are. It also determines what the name of
4# the library is. This code sets the following variables:
5#
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
14#
15
16#=============================================================================
17# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
18# All rights reserved.
19#
20# Redistribution and use in source and binary forms, with or without
21# modification, are permitted provided that the following conditions are met:
22#
23# * Redistributions of source code must retain the above copyright notice,
24# this list of conditions and the following disclaimer.
25#
26# * Redistributions in binary form must reproduce the above copyright notice,
27# this list of conditions and the following disclaimer in the documentation
28# and/or other materials provided with the distribution.
29#
30# * Neither the names of Kitware, Inc., the Insight Software Consortium, nor
31# the names of their contributors may be used to endorse or promote products
32# derived from this software without specific prior written permission.
33#
34# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
35# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
36# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
37# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
38# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
39# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
40# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
41# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
42# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
43# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
44# POSSIBILITY OF SUCH DAMAGE.
45#=============================================================================
46
47# Expand {libarch} occurences to java_libarch subdirectory(-ies) and set ${_var}
48MACRO(java_append_library_directories _var)
49 # Determine java arch-specific library subdir
50 # Mostly based on openjdk/jdk/make/common/shared/Platform.gmk as of openjdk
51 # 1.6.0_18 + icedtea patches. However, it would be much better to base the
52 # guess on the first part of the GNU config.guess platform triplet.
53 IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
54 SET(_java_libarch "amd64")
55 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
56 SET(_java_libarch "i386")
57 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha")
58 SET(_java_libarch "alpha")
59 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
60 # Subdir is "arm" for both big-endian (arm) and little-endian (armel).
61 SET(_java_libarch "arm")
62 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
63 # mips* machines are bi-endian mostly so processor does not tell
64 # endianess of the underlying system.
65 SET(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "mips" "mipsel" "mipseb")
66 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
67 SET(_java_libarch "ppc64")
68 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
69 SET(_java_libarch "ppc")
70 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc")
71 # Both flavours can run on the same processor
72 SET(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "sparc" "sparcv9")
73 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)")
74 SET(_java_libarch "parisc" "parisc64")
75 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390")
76 # s390 binaries can run on s390x machines
77 SET(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "s390" "s390x")
78 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh")
79 SET(_java_libarch "sh")
80 ELSE(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
81 SET(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}")
82 ENDIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
83
84 # Append default list architectures if CMAKE_SYSTEM_PROCESSOR was empty or
85 # system is non-Linux (where the code above has not been well tested)
86 IF(NOT _java_libarch OR NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
87 LIST(APPEND _java_libarch "i386" "amd64" "ppc")
88 ENDIF(NOT _java_libarch OR NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
89
90 # Sometimes ${CMAKE_SYSTEM_PROCESSOR} is added to the list to prefer
91 # current value to a hardcoded list. Remove possible duplicates.
92 LIST(REMOVE_DUPLICATES _java_libarch)
93
94 FOREACH(_path ${ARGN})
95 IF(_path MATCHES "{libarch}")
96 FOREACH(_libarch ${_java_libarch})
97 STRING(REPLACE "{libarch}" "${_libarch}" _newpath "${_path}")
98 LIST(APPEND ${_var} "${_newpath}")
99 ENDFOREACH(_libarch)
100 ELSE(_path MATCHES "{libarch}")
101 LIST(APPEND ${_var} "${_path}")
102 ENDIF(_path MATCHES "{libarch}")
103 ENDFOREACH(_path)
104ENDMACRO(java_append_library_directories)
105
106GET_FILENAME_COMPONENT(java_install_version
107 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME)
108
109SET(JAVA_AWT_LIBRARY_DIRECTORIES
110 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/lib"
111 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/lib"
112 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/lib"
113 )
114
115FILE(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _JAVA_HOME)
116
117JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
118 ${_JAVA_HOME}/jre/lib/{libarch}
119 ${_JAVA_HOME}/jre/lib
120 ${_JAVA_HOME}/lib
121 ${_JAVA_HOME}
122 /usr/lib/jvm/java-6-openjdk/jre/lib
123 /usr/lib/jvm/java-6-openjdk-i386/jre/lib
124 /usr/lib/jvm/java-6-openjdk-amd64/jre/lib
125 /usr/lib/jvm/java-6-openjdk/jre/lib/{libarch}
126 /usr/lib/jvm/java-6-openjdk-i386/jre/lib/{libarch}
127 /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/{libarch}
128 /usr/lib
129 /usr/local/lib
130 /usr/lib/jvm/java/lib
131 /usr/lib/java/jre/lib/{libarch}
132 /usr/local/lib/java/jre/lib/{libarch}
133 /usr/local/share/java/jre/lib/{libarch}
134 /usr/lib/j2sdk1.4-sun/jre/lib/{libarch}
135 /usr/lib/j2sdk1.5-sun/jre/lib/{libarch}
136 /opt/sun-jdk-1.5.0.04/jre/lib/{libarch}
137 /usr/lib/jvm/java-6-sun/jre/lib/{libarch}
138 /usr/lib/jvm/java-1.5.0-sun/jre/lib/{libarch}
139 /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/{libarch} # can this one be removed according to #8821 ? Alex
140 /usr/lib/jvm/java-openjdk/jre/lib/{libarch}
141 # Debian specific paths for default JVM
142 /usr/lib/jvm/default-java/jre/lib/{libarch}
143 /usr/lib/jvm/default-java/jre/lib
144 /usr/lib/jvm/default-java/lib
145 )
146
147SET(JAVA_JVM_LIBRARY_DIRECTORIES)
148FOREACH(dir ${JAVA_AWT_LIBRARY_DIRECTORIES})
149 SET(JAVA_JVM_LIBRARY_DIRECTORIES
150 ${JAVA_JVM_LIBRARY_DIRECTORIES}
151 "${dir}"
152 "${dir}/client"
153 "${dir}/server"
154 )
155ENDFOREACH(dir)
156
157
158SET(JAVA_AWT_INCLUDE_DIRECTORIES
159 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include"
160 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include"
161 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include"
162 ${_JAVA_HOME}/include
163 /usr/lib/jvm/java-6-openjdk/include
164 /usr/lib/jvm/java-6-openjdk-amd64/include
165 /usr/lib/jvm/java-6-openjdk-i386/include
166 /usr/include
167 /usr/local/include
168 /usr/lib/java/include
169 /usr/local/lib/java/include
170 /usr/lib/jvm/java/include
171 /usr/lib/jvm/java-6-sun/include
172 /usr/lib/jvm/java-1.5.0-sun/include
173 /usr/lib/jvm/java-6-sun-1.6.0.00/include # can this one be removed according to #8821 ? Alex
174 /usr/lib/jvm/java-6-openjdk/include
175 /usr/local/share/java/include
176 /usr/lib/j2sdk1.4-sun/include
177 /usr/lib/j2sdk1.5-sun/include
178 /opt/sun-jdk-1.5.0.04/include
179 # Debian specific path for default JVM
180 /usr/lib/jvm/default-java/include
181 )
182
183FOREACH(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}")
184 GET_FILENAME_COMPONENT(jpath "${JAVA_PROG}" PATH)
185 FOREACH(JAVA_INC_PATH ../include ../java/include ../share/java/include)
186 IF(EXISTS ${jpath}/${JAVA_INC_PATH})
187 SET(JAVA_AWT_INCLUDE_DIRECTORIES ${JAVA_AWT_INCLUDE_DIRECTORIES} "${jpath}/${JAVA_INC_PATH}")
188 ENDIF(EXISTS ${jpath}/${JAVA_INC_PATH})
189 ENDFOREACH(JAVA_INC_PATH)
190 FOREACH(JAVA_LIB_PATH
191 ../lib ../jre/lib ../jre/lib/i386
192 ../java/lib ../java/jre/lib ../java/jre/lib/i386
193 ../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386)
194 IF(EXISTS ${jpath}/${JAVA_LIB_PATH})
195 SET(JAVA_AWT_LIBRARY_DIRECTORIES ${JAVA_AWT_LIBRARY_DIRECTORIES} "${jpath}/${JAVA_LIB_PATH}")
196 ENDIF(EXISTS ${jpath}/${JAVA_LIB_PATH})
197 ENDFOREACH(JAVA_LIB_PATH)
198ENDFOREACH(JAVA_PROG)
199
200IF(APPLE)
201 IF(EXISTS ~/Library/Frameworks/JavaVM.framework)
202 SET(JAVA_HAVE_FRAMEWORK 1)
203 ENDIF(EXISTS ~/Library/Frameworks/JavaVM.framework)
204 IF(EXISTS /Library/Frameworks/JavaVM.framework)
205 SET(JAVA_HAVE_FRAMEWORK 1)
206 ENDIF(EXISTS /Library/Frameworks/JavaVM.framework)
207 IF(EXISTS /System/Library/Frameworks/JavaVM.framework)
208 SET(JAVA_HAVE_FRAMEWORK 1)
209 ENDIF(EXISTS /System/Library/Frameworks/JavaVM.framework)
210
211 IF(JAVA_HAVE_FRAMEWORK)
212 IF(NOT JAVA_AWT_LIBRARY)
213 SET (JAVA_AWT_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE)
214 ENDIF(NOT JAVA_AWT_LIBRARY)
215
216 IF(NOT JAVA_JVM_LIBRARY)
217 SET (JAVA_JVM_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE)
218 ENDIF(NOT JAVA_JVM_LIBRARY)
219
220 IF(NOT JAVA_AWT_INCLUDE_PATH)
221 IF(EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h)
222 SET (JAVA_AWT_INCLUDE_PATH "/System/Library/Frameworks/JavaVM.framework/Headers" CACHE FILEPATH "jawt.h location" FORCE)
223 ENDIF(EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h)
224 ENDIF(NOT JAVA_AWT_INCLUDE_PATH)
225
226 # If using "-framework JavaVM", prefer its headers *before* the others in
227 # JAVA_AWT_INCLUDE_DIRECTORIES... (*prepend* to the list here)
228 #
229 SET(JAVA_AWT_INCLUDE_DIRECTORIES
230 ~/Library/Frameworks/JavaVM.framework/Headers
231 /Library/Frameworks/JavaVM.framework/Headers
232 /System/Library/Frameworks/JavaVM.framework/Headers
233 ${JAVA_AWT_INCLUDE_DIRECTORIES}
234 )
235 ENDIF(JAVA_HAVE_FRAMEWORK)
236ELSE(APPLE)
237 FIND_LIBRARY(JAVA_AWT_LIBRARY jawt
238 PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES}
239 )
240 FIND_LIBRARY(JAVA_JVM_LIBRARY NAMES jvm JavaVM java
241 PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES}
242 )
243ENDIF(APPLE)
244
245# add in the include path
246FIND_PATH(JAVA_INCLUDE_PATH jni.h
247 ${JAVA_AWT_INCLUDE_DIRECTORIES}
248)
249
250FIND_PATH(JAVA_INCLUDE_PATH2 jni_md.h
251 ${JAVA_INCLUDE_PATH}
252 ${JAVA_INCLUDE_PATH}/win32
253 ${JAVA_INCLUDE_PATH}/linux
254 ${JAVA_INCLUDE_PATH}/freebsd
255 ${JAVA_INCLUDE_PATH}/solaris
256)
257
258FIND_PATH(JAVA_AWT_INCLUDE_PATH jawt.h
259 ${JAVA_INCLUDE_PATH}
260)
261
262
263IF (APPLE)
264 # On Mac, the java headers files are broken symlinks if the Apple Developer Tools for Java are not installed
265 EXECUTE_PROCESS(COMMAND cat ${JAVA_INCLUDE_PATH}/jni.h
266 OUTPUT_QUIET
267 ERROR_QUIET
268 RESULT_VARIABLE SYMLINK_CHECK_RESULT_VARIABLE)
269 IF (SYMLINK_CHECK_RESULT_VARIABLE GREATER 0)
270 SET (JAVA_INCLUDE_PATH "JAVA_INCLUDE_PATH-NOTFOUND")
271 SET (JAVA_INCLUDE_PATH2 "JAVA_INCLUDE_PATH2-NOTFOUND")
272 SET (JAVA_AWT_INCLUDE_PATH "JAVA_AWT_INCLUDE_PATH-NOTFOUND")
273 ENDIF()
274ENDIF (APPLE)
275
276
277#INCLUDE("${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake")
278#FIND_PACKAGE_HANDLE_STANDARD_ARGS(JNI DEFAULT_MSG JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY
279# JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
280
281MARK_AS_ADVANCED(
282 JAVA_AWT_LIBRARY
283 JAVA_JVM_LIBRARY
284 JAVA_AWT_INCLUDE_PATH
285 JAVA_INCLUDE_PATH
286 JAVA_INCLUDE_PATH2
287)
288
289IF (JAVA_AWT_LIBRARY AND JAVA_JVM_LIBRARY AND JAVA_INCLUDE_PATH AND JAVA_INCLUDE_PATH2 AND JAVA_AWT_INCLUDE_PATH)
290 SET(JNI_FOUND 1)
291 SET(JNI_LIBRARIES
292 ${JAVA_AWT_LIBRARY}
293 ${JAVA_JVM_LIBRARY}
294 )
295 SET(JNI_INCLUDE_DIRS
296 ${JAVA_INCLUDE_PATH}
297 ${JAVA_INCLUDE_PATH2}
298 ${JAVA_AWT_INCLUDE_PATH}
299 )
300ELSE (JAVA_AWT_LIBRARY AND JAVA_JVM_LIBRARY AND JAVA_INCLUDE_PATH AND JAVA_INCLUDE_PATH2 AND JAVA_AWT_INCLUDE_PATH)
301 SET(JNI_FOUND 0)
302 SET(JNI_LIBRARIES "")
303 SET(JNI_INCLUDE_DIRS "")
304ENDIF (JAVA_AWT_LIBRARY AND JAVA_JVM_LIBRARY AND JAVA_INCLUDE_PATH AND JAVA_INCLUDE_PATH2 AND JAVA_AWT_INCLUDE_PATH)
0305
=== modified file 'src/CMakeLists.txt'
--- src/CMakeLists.txt 2012-06-04 21:47:12 +0000
+++ src/CMakeLists.txt 2013-05-27 16:57:27 +0000
@@ -39,10 +39,17 @@
39 LIBRARY DESTINATION lib${LIB_SUFFIX}39 LIBRARY DESTINATION lib${LIB_SUFFIX}
40 ARCHIVE DESTINATION lib)40 ARCHIVE DESTINATION lib)
4141
42# MAC OS X only property42#SET RPATH
43# this is required to make sure that the library has the correct install name after43IF (ZORBA_ADD_DEBIAN_JRE_RPATHS)
44# installation such that dependent modules always find it44 SET (INSTALL_RPATH_PATHS "/usr/lib/jvm/default-java/jre/lib/amd64/server;/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server;/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/server;/usr/lib/jvm/java-7-openjdk/jre/lib/amd64/server;/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server;/usr/lib/jvm/default-java/jre/lib/i386/server;/usr/lib/jvm/java-6-openjdk/jre/lib/i386/server;/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/server;/usr/lib/jvm/java-7-openjdk/jre/lib/i386/server;/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/server")
45SET_TARGET_PROPERTIES(util-jvm PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")45 SET_TARGET_PROPERTIES(util-jvm PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" INSTALL_RPATH_USE_LINK_PATH TRUE INSTALL_RPATH "${INSTALL_RPATH_PATHS}")
46ELSE (ZORBA_ADD_DEBIAN_JRE_RPATHS)
47 # MAC OS X only property
48 # this is required to make sure that the library has the correct install name after
49 # installation such that dependent modules always find it
50 SET_TARGET_PROPERTIES(util-jvm PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
51ENDIF (ZORBA_ADD_DEBIAN_JRE_RPATHS)
52
4653
47# Set this in the parent scope so it will be put into our Config.cmake file.54# Set this in the parent scope so it will be put into our Config.cmake file.
48# As with many other things, this doesn't work when the module is installed.55# As with many other things, this doesn't work when the module is installed.

Subscribers

People subscribed via source and target branches

to all changes: