fix: 'make dist' without javah
authorMichael Jeanson <mjeanson@efficios.com>
Thu, 7 Jul 2022 21:01:54 +0000 (17:01 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 23 Aug 2022 19:28:52 +0000 (15:28 -0400)
Don't use 'BUILT_SOURCES' for the header file generated by javah /
javac, files added to this target will be generated on 'make dist'
regardless of the configuration or presence of the required tools.

Add proper make dependencies between the different targets instead of
using 'all-local'.

Set JAVAROOT to a temporary directory to properly clean class files and
avoid confusing javah when it's used to generate the JNI header.

Change-Id: I8544d0418039ba667d062cb01c924368ab702ab7
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
src/lib/lttng-ust-java/Makefile.am

index f51206917412d7395a327b5a8de0f7943d3e8b4c..5b6be7bd4a7eaedfdae5a8492afc2bc18fe0b1c5 100644 (file)
@@ -1,41 +1,52 @@
 # SPDX-License-Identifier: LGPL-2.1-only
 
-JAVAROOT = .
+JAVAROOT = .build
 jarfile = liblttng-ust-java.jar
 jardir = $(datadir)/java
 pkgpath = org/lttng/ust
 
 dist_noinst_JAVA = $(pkgpath)/LTTngUst.java
 jar_DATA = $(jarfile)
-BUILT_SOURCES = org_lttng_ust_LTTngUst.h
 
 AM_CPPFLAGS += -I$(builddir) -I$(srcdir) $(JNI_CPPFLAGS)
+
 lib_LTLIBRARIES = liblttng-ust-java.la
 liblttng_ust_java_la_SOURCES = LTTngUst.c lttng_ust_java.h
+
+# Generated by javac / javah
 nodist_liblttng_ust_java_la_SOURCES = org_lttng_ust_LTTngUst.h
 
+# Explicit dependency to ensure the header is generated before the
+# C file is built.
+LTTngUst.lo: org_lttng_ust_LTTngUst.h
+
 liblttng_ust_java_la_LIBADD = -lc \
        $(top_builddir)/src/lib/lttng-ust/liblttng-ust.la
 
 $(jarfile): classnoinst.stamp
-       $(JAR) cf $(JARFLAGS) $@ $(pkgpath)/*.class
+       $(JAR) cf $(JARFLAGS) $@ -C $(JAVAROOT) $(pkgpath)/LTTngUst.class
+
+# Ensure the javaroot directory is created before the Java class files are built.
+$(pkgpath)/LTTngUst.java: $(JAVAROOT)
+$(JAVAROOT):
+       -test -d $(JAVAROOT) || mkdir $(JAVAROOT)
 
 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)
+# The header file will be generated by javac when building the Java class
+# files, add a dependency on the stamp file to ensure proper ordering.
+org_lttng_ust_LTTngUst.h: classnoinst.stamp
 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
+org_lttng_ust_LTTngUst.h:
+       $(JAVAH) -classpath $(srcdir) $(JAVAHFLAGS) org.lttng.ust.LTTngUst
 endif
 
-all-local: org_lttng_ust_LTTngUst.h
-
 EXTRA_DIST = README
 
-CLEANFILES = $(jarfile) $(pkgpath)/*.class jni-header.stamp org_lttng_ust_LTTngUst.h
+CLEANFILES = $(jarfile) org_lttng_ust_LTTngUst.h
+
+clean-local:
+       -rm -rf $(JAVAROOT)
This page took 0.025823 seconds and 4 git commands to generate.