From 2d2d38713aea27077b690f2756a901c2a0c06f8c Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Thu, 7 Jul 2022 17:01:54 -0400 Subject: [PATCH] fix: 'make dist' without javah 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 Signed-off-by: Mathieu Desnoyers --- src/lib/lttng-ust-java/Makefile.am | 35 ++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/lib/lttng-ust-java/Makefile.am b/src/lib/lttng-ust-java/Makefile.am index f5120691..5b6be7bd 100644 --- a/src/lib/lttng-ust-java/Makefile.am +++ b/src/lib/lttng-ust-java/Makefile.am @@ -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) -- 2.34.1