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