Files
kurt 04bed8da0f Remove 1.8 support from java.port.mk and update the guidance regarding
how to use JAVA_HOME in a port. ok ian@ sthen@ phessler@
2026-01-23 18:31:27 +00:00

105 lines
3.6 KiB
Makefile

# Set MODJAVA_VER to 11, 17, 21 or 25 based on the version of the jdk
# needed for the port. Append a + (e.g., 11+) if any higher version is
# acceptable.
MODJAVA_VER?=
# Based on the MODJAVA_VER, NO_BUILD and MACHINE_ARCH, the following
# things will be setup:
#
# ONLY_FOR_ARCHS if not already set.
# BUILD_DEPENDS on a jdk (only if not NO_BUILD)
# JAVA_HOME to pass on to the port build
# RUN_DEPENDS for all jdk's that can run the port.
# MODJAVA_RUN_DEPENDS with same value as RUN_DEPENDS
# to assist with multipackages.
#
# NOTE: All source built java ports must properly set javac -source and
# -target build arguments. Depending on the architecture an older level
# port may be built by a newer jdk. The JAVA_HOME variable points to the
# build jdk not the default RUN_DEPEND jdk. It should only be used to
# set the jdk to run with when a port requires a fixed jdk version
# (e.g. no + in MODJAVA_VER). The javaPathHelper port should be used
# to set the default JAVA_HOME or JAVACMD vars for ports with
# MODJAVA_VER containing a +.
#
.if ${MODJAVA_VER:S/+//} != "11" && ${MODJAVA_VER:S/+//} != "17" && \
${MODJAVA_VER:S/+//} != "21" && ${MODJAVA_VER:S/+//} != "25"
ERRORS+="Fatal: MODJAVA_VER must be one of 11, 17, 21 or 25"
ERRORS+="with an optional + suffix."
.endif
.if ${MODJAVA_VER:S/+//} == "11"
ONLY_FOR_ARCHS?= i386 amd64 aarch64 sparc64
.elif ${MODJAVA_VER:S/+//} == "25"
ONLY_FOR_ARCHS?= amd64 aarch64
.else
ONLY_FOR_ARCHS?= i386 amd64 aarch64
.endif
.if ${MODJAVA_VER:S/+//} == "11"
JAVA_HOME= ${LOCALBASE}/jdk-11
MODJAVA_BUILD_DEPENDS+= jdk->=11v0,<12v0:devel/jdk/11
.elif ${MODJAVA_VER:S/+//} == "17"
JAVA_HOME= ${LOCALBASE}/jdk-17
MODJAVA_BUILD_DEPENDS+= jdk->=17v0,<18v0:devel/jdk/17
.elif ${MODJAVA_VER:S/+//} == "21"
JAVA_HOME= ${LOCALBASE}/jdk-21
MODJAVA_BUILD_DEPENDS+= jdk->=21v0,<22v0:devel/jdk/21
.else
JAVA_HOME= ${LOCALBASE}/jdk-25
MODJAVA_BUILD_DEPENDS+= jdk->=25v0,<26v0:devel/jdk/25
.endif
.if ${MODJAVA_VER:M*+}
MODJAVA_RUN_DEPENDS?= ${MODJAVA_BUILD_DEPENDS:C/,.*:/:/}
.else
MODJAVA_RUN_DEPENDS?= ${MODJAVA_BUILD_DEPENDS}
.endif
RUN_DEPENDS+= ${MODJAVA_RUN_DEPENDS}
.if ${NO_BUILD:L} != "yes"
BUILD_DEPENDS+= ${MODJAVA_BUILD_DEPENDS}
CONFIGURE_ENV += JAVA_HOME=${JAVA_HOME}
MAKE_ENV += JAVA_HOME=${JAVA_HOME}
.endif
# Append 'java' to the list of categories.
CATEGORIES+= java
# Allow ports to that use devel/apache-ant to set MODJAVA_BUILD=ant
# In case a non-standard build target, build file or build directory are
# needed, set MODJAVA_BUILD_TARGET_NAME, MODJAVA_BUILD_FILE or MODJAVA_BUILD_DIR
# respectively.
.if defined(MODJAVA_BUILD) && ${MODJAVA_BUILD:L} == "ant"
BUILD_DEPENDS += devel/apache-ant
MODJAVA_BUILD_TARGET_NAME ?=
MODJAVA_BUILD_FILE ?= build.xml
MODJAVA_BUILD_DIR ?= ${WRKSRC}
MODJAVA_BUILD_ARGS ?=
MODJAVA_BUILD_TARGET = \
cd ${MODJAVA_BUILD_DIR} && \
${SETENV} ${MAKE_ENV} ${LOCALBASE}/bin/ant \
-buildfile ${MODJAVA_BUILD_FILE} ${MODJAVA_BUILD_TARGET_NAME} \
${MODJAVA_BUILD_ARGS}
. if !target(do-build)
do-build:
${MODJAVA_BUILD_TARGET}
. endif
.endif
# Convenience variables.
# Ports that install .jar files for public use (ie, in ${MODJAVA_JAR_DIR})
# please install unversioned .jar files. If a port installs
# multiple .jar files, use a ${MODJAVA_JAR_DIR}/<project_name>/ prefix.
# This will help other ports to pickup these classes.
MODJAVA_SHARE_DIR = ${PREFIX}/share/java/
MODJAVA_JAR_DIR = ${MODJAVA_SHARE_DIR}/classes/
MODJAVA_EXAMPLE_DIR = ${MODJAVA_SHARE_DIR}/examples/
MODJAVA_DOC_DIR = ${MODJAVA_SHARE_DIR}/doc/
SUBST_VARS += MODJAVA_SHARE_DIR MODJAVA_JAR_DIR MODJAVA_EXAMPLE_DIR \
MODJAVA_DOC_DIR