Fix: build jni libs with openjdk >= 10
authorMichael Jeanson <mjeanson@efficios.com>
Thu, 3 May 2018 19:42:54 +0000 (15:42 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 3 May 2018 19:52:42 +0000 (15:52 -0400)
In openjdk 10, the "javah" utility used to generate c headers from java
classes was removed and replaced with an option of "javac".

When we detect "javac" but no "javah", assume we are working with
openjdk >= 10 and configure the build system to use the proper tool and
switches.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
configure.ac
liblttng-ust-java-agent/java/lttng-ust-agent-common/Makefile.am
liblttng-ust-java-agent/java/lttng-ust-agent-jul/Makefile.am
liblttng-ust-java-agent/java/lttng-ust-agent-log4j/Makefile.am
liblttng-ust-java/Makefile.am

index f90c5baa92f439ad768fcdda5d2d6eb2d5185f43..8be1ceb0636d6403dec66a4ae389b30c91584bbd 100644 (file)
@@ -343,6 +343,8 @@ AS_IF([test "x$jni_interface" = "xyes" || test "x$java_agent_jul" = "xyes" || te
        CPPFLAGS="$CPPFLAGS $JNI_CPPFLAGS"
        AX_PROG_JAVAH
        CPPFLAGS="$saved_CPPFLAGS"
+
+       AM_CONDITIONAL([HAVE_JAVAH], [test "x$JAVAH" != "x"])
 ])
 
 AS_IF([test "x$java_agent_log4j" = "xyes"], [
index 26b2ef25ca67b12ce87633b986d6b14cc4d86c1c..ed551eb4bd6ecefa0dce4acb077b24e7ae65e1d0 100644 (file)
@@ -50,11 +50,17 @@ classes = $(pkgpath)/*.class \
 $(jarfile): classnoinst.stamp
        $(JAR) cfm $(JARFLAGS) $@ $(jarfile_manifest) $(classes) && rm -f $(jarfile_symlink) && $(LN_S) $@ $(jarfile_symlink)
 
+if !HAVE_JAVAH
+# If we don't have javah, assume we are running openjdk >= 10 and use javac
+# to generate the jni header file.
+AM_JAVACFLAGS = -h $(jnioutdir)
+else
 context-jni-header.stamp: $(dist_noinst_JAVA)
        $(JAVAH) -classpath $(CLASSPATH):$(srcdir) -d $(jnioutdir) $(JAVAHFLAGS) org.lttng.ust.agent.context.LttngContextApi && \
        echo "Context API JNI header generated" > context-jni-header.stamp
 
 all-local: context-jni-header.stamp
+endif
 
 install-data-hook:
        cd $(DESTDIR)/$(jardir) && rm -f $(jarfile_symlink) && $(LN_S) $(jarfile) $(jarfile_symlink)
index 2b6cf2352ee44353b914e204aa25a730772184da..99fa78cf51e469b0395b499f0b45c0a1efbc5de7 100644 (file)
@@ -26,11 +26,17 @@ classes = $(pkgpath)/*.class
 $(jarfile): classnoinst.stamp
        $(JAR) cfm $(JARFLAGS) $@ $(jarfile_manifest) $(classes) && rm -f $(jarfile_symlink) && $(LN_S) $@ $(jarfile_symlink)
 
+if !HAVE_JAVAH
+# If we don't have javah, assume we are running openjdk >= 10 and use javac
+# to generate the jni header file.
+AM_JAVACFLAGS = -h $(juljniout)
+else
 jul-jni-header.stamp: $(dist_noinst_JAVA)
        $(JAVAH) -classpath $(CLASSPATH):$(srcdir) -d $(juljniout) $(JAVAHFLAGS) org.lttng.ust.agent.jul.LttngJulApi && \
        echo "JUL JNI header generated" > jul-jni-header.stamp
 
 all-local: $(stamp)
+endif
 
 install-data-hook:
        cd $(DESTDIR)/$(jardir) && rm -f $(jarfile_symlink) && $(LN_S) $(jarfile) $(jarfile_symlink)
index 05a18d436a2029317ea7034bf6fd08e3761cb586..0c9475a328d7f19541b400f97ac9d3ff2d9e85d7 100644 (file)
@@ -26,11 +26,17 @@ classes = $(pkgpath)/*.class
 $(jarfile): classnoinst.stamp
        $(JAR) cfm $(JARFLAGS) $@ $(jarfile_manifest) $(classes) && rm -f $(jarfile_symlink) && $(LN_S) $@ $(jarfile_symlink)
 
+if !HAVE_JAVAH
+# If we don't have javah, assume we are running openjdk >= 10 and use javac
+# to generate the jni header file.
+AM_JAVACFLAGS = -h $(log4jjniout)
+else
 log4j-jni-header.stamp: $(dist_noinst_JAVA)
        $(JAVAH) -classpath $(CLASSPATH):$(srcdir) -d $(log4jjniout) $(JAVAHFLAGS) org.lttng.ust.agent.log4j.LttngLog4jApi && \
        echo "Log4j JNI header generated" > log4j-jni-header.stamp
 
 all-local: $(stamp)
+endif
 
 install-data-hook:
        cd $(DESTDIR)/$(jardir) && rm -f $(jarfile_symlink) && $(LN_S) $(jarfile) $(jarfile_symlink)
index 399b62cac1d06cb322d3b549c9998523d72027fe..260774f972c81540854b9d20828be9651341f7d2 100644 (file)
@@ -17,11 +17,19 @@ liblttng_ust_java_la_LIBADD = -lc -L$(top_builddir)/liblttng-ust/.libs -llttng-u
 $(jarfile): classnoinst.stamp
        $(JAR) cf $(JARFLAGS) $@ $(pkgpath)/*.class
 
+if !HAVE_JAVAH
+# If we don't have javah, assume we are running openjdk >= 10 and use javac
+# to generate the jni header file.
+AM_JAVACFLAGS = -h .
+
+org_lttng_ust_LTTngUst.h: $(jarfile)
+else
 org_lttng_ust_LTTngUst.h: jni-header.stamp
 
 jni-header.stamp: $(dist_noinst_JAVA)
        $(JAVAH) -classpath $(srcdir) $(JAVAHFLAGS) org.lttng.ust.LTTngUst && \
        echo "JNI header generated" > jni-header.stamp
+endif
 
 all-local: org_lttng_ust_LTTngUst.h
 
This page took 0.027143 seconds and 4 git commands to generate.