From 6d43f1745fc2e919df4a942cd7565406a22d2615 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 16 Sep 2020 18:19:08 +0200 Subject: [PATCH] added build option: USE_JAVAH - explicitly enable/disable use of javah over javac -h (if autodetect doesnt work correctly) --- Makefile.conf | 22 ++++++++++++++-------- local.conf.example | 1 + src/Makefile | 3 ++- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index 8e567e0..d202643 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -5,10 +5,12 @@ HERE:=$(dir $(lastword $(MAKEFILE_LIST))) PLATFORM:=$(shell uname | tr A-Z a-z) +JAVAC_CMD=javac -encoding UTF-8 +JAVAH_CMD=javah -encoding UTF-8 # DEV ENV PATHS & CFG -# The dev environment paths and configs are set to a default value which can be overridden by ./local.conf and overridden again by /local.conf -######### Build Config Defaults ######### +# The build settings are set to a default value which can be overridden by using ./local.conf +######### DEFAULTS ######### DEBUG=0 PREFIX=$(HOME) YML2_PATH=$(PREFIX)/src/yml2 @@ -19,14 +21,13 @@ ENGINE_INC_PATH=$(PREFIX)/include AD_LIB_PATH=$(PREFIX)/lib AD_INC_PATH=$(PREFIX)/include + ### Guessing JAVA_HOME ifeq ($(PLATFORM),linux) JAVA_HOME=$(subst /bin,,$(dir $(realpath /usr/bin/javac))) endif -JAVAC_CMD=javac -encoding UTF-8 -JAVAH_CMD=javah -encoding UTF-8 ######### Overrides from the config file(s) ######### ifneq ("$(wildcard $(HERE)local.conf)","") @@ -46,10 +47,15 @@ ifndef JAVA_HOME $(error JAVA_HOME is not set!) endif -# Old versions of a Java distribution have a `javah` binary, new versions do not. This checks whether or not `javah` can be found in the Java distribution found in the directory `$JAVA_HOME`. -DUMMY:=$(shell which $(JAVA_HOME)/bin/javah) -ifeq ($(.SHELLSTATUS),0) - OLD_JAVA=true +# Guessing USE_JAVAH +# cant be guessed earlier, because we depend on JAVA_HOME which can be set in the local.conf +# Old versions of a Java distribution have a `javah` binary, new version do not and the replacement is "javac -h" +# TODO: dont check for presence of javah, but check if javac -h is supported, because some java (RHEL) has javah but supports javac -h +ifndef USE_JAVAH + DUMMY:=$(shell which $(JAVA_HOME)/bin/javah) + ifeq ($(.SHELLSTATUS),0) + USE_JAVAH=1 + endif endif JAVA_BIN_DIR=$(JAVA_HOME)/bin diff --git a/local.conf.example b/local.conf.example index 310de4b..6cc3be8 100644 --- a/local.conf.example +++ b/local.conf.example @@ -14,6 +14,7 @@ ############ JAVA ############## # JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home +# USE_JAVAH=0 # keep the build from using javah ############ YML2 ############## # YML2_PATH=$(HOME)/src/yml2 diff --git a/src/Makefile b/src/Makefile index 926d660..477f6cc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -33,6 +33,7 @@ $(info PLATFORM: $(PLATFORM)) $(info DEBUG: $(DEBUG)) $(info CXX: $(CXX)) $(info JAVA_HOME: $(JAVA_HOME)) +$(info USE_JAVAH: $(USE_JAVAH)) $(info ENGINE_LIB_PATH: $(ENGINE_LIB_PATH)) $(info ENGINE_INC_PATH: $(ENGINE_INC_PATH)) $(info AD_LIB_PATH: $(AD_LIB_PATH)) @@ -145,7 +146,7 @@ gen-jni-headers: codegen $(JNI_GENERATED_HH) # "new" javac -h accepts list of java files # While "old" (Java 8) javah needs a list of java classes (e.g. foundation.pEp.jniadapter.Message) $(JNI_GENERATED_HH): -ifdef OLD_JAVA +ifeq ($(USE_JAVAH),1) cd $(JAVA_BUILD_ROOT)/;$(JAVA_BIN_DIR)/$(JAVAH_CMD) -d ../../src/$(CXX_DIR) $(subst ${ },${space}\${\n}, $(subst /,.,$(subst $(JAVA_BUILD_ROOT),,$(basename $(sort $(wildcard $(JAVA_BUILD_ROOT)$(JAVA_PKG_BASENAME)*.class/)))))) else cd $(JAVA_DIR);$(JAVA_BIN_DIR)/$(JAVAC_CMD) -d ../$(JAVA_BUILD_ROOT) -h ../$(CXX_DIR)/ $(JAVA_PKG_BASENAME)/*.java