ports/java/openjdk25/Makefile
Harald Eilertsen fe94eea555 java/openjdk25: Add jre and headless flavors
Add FLAVORS to allow building jre and headless variants from the same
port. For backwards compatibility, it is also possible to build the jre
version by setting the BUILD_JRE env var.

Also reorganize the Makefile to make portclippy happy

Reviewed by:	fuz, jrm
Approved by:	fuz (mentor)
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D53450
2025-11-04 13:13:01 +01:00

213 lines
6.3 KiB
Makefile

PORTNAME= openjdk
DISTVERSIONPREFIX= jdk-
DISTVERSION= ${JDK_FULL_VERSION:S/.0.0//}
CATEGORIES= java devel
PKGNAMESUFFIX?= ${JDK_MAJOR_VERSION}
MAINTAINER= java@FreeBSD.org
COMMENT= Java Development Kit ${JDK_MAJOR_VERSION}
WWW= https://openjdk.java.net/projects/jdk/25/
LICENSE= GPLv2
ONLY_FOR_ARCHS= aarch64 amd64 powerpc64 powerpc64le
BUILD_DEPENDS= ${LOCALBASE}/include/cups/cups.h:print/cups \
bash:shells/bash \
gsed:textproc/gsed \
zip:archivers/zip
.if ${FLAVORS:U} != headless
LIB_DEPENDS= libasound.so:audio/alsa-lib \
libfontconfig.so:x11-fonts/fontconfig \
libfreetype.so:print/freetype2 \
libgif.so:graphics/giflib \
libharfbuzz.so:print/harfbuzz \
liblcms2.so:graphics/lcms2 \
libpng.so:graphics/png
.endif
RUN_DEPENDS= javavm:java/javavmwrapper
.if ${FLAVORS:U} != headless
RUN_DEPENDS+= xorg-fonts-truetype>0:x11-fonts/xorg-fonts-truetype
.endif
FLAVORS= jdk jre headless
FLAVOR?= ${BUILD_JRE:?jre:${FLAVORS:[1]}}
headless_PKGNAMESUFFIX= ${JDK_MAJOR_VERSION}-headless
jre_PKGNAMESUFFIX= ${JDK_MAJOR_VERSION}-jre
USES= autoreconf:build compiler:features cpe gmake iconv pkgconfig
.if ${FLAVORS:U} != headless
USES+= jpeg xorg
.endif
CPE_VENDOR= oracle
USE_GITHUB= yes
GH_ACCOUNT= freebsd
.if ${FLAVORS:U} != headless
USE_XORG= x11 xext xi xrandr xrender xt xtst
.endif
GNU_CONFIGURE= yes
CONFIGURE_ARGS= --disable-ccache \
--disable-javac-server \
--with-alsa=${LOCALBASE} \
--with-boot-jdk=${BOOTSTRAPJDKDIR} \
--with-cups=${LOCALBASE} \
--with-debug-level=release \
--with-fontconfig=${LOCALBASE} \
--with-freetype=system \
--with-giflib-include=${LOCALBASE}/include \
--with-giflib-lib=${LOCALBASE}/lib \
--with-giflib=system \
--with-harfbuzz=system \
--with-lcms=system \
--with-libjpeg=system \
--with-libpng=system \
--with-native-debug-symbols=none \
--with-num-cores=${MAKE_JOBS_NUMBER} \
--with-vendor-bug-url="${JDK_BUG_URL}" \
--with-vendor-name="OpenJDK BSD Porting Team" \
--with-vendor-url="https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/" \
--with-vendor-vm-bug-url="${JDK_BUG_URL}" \
--with-version-string=${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_PATCH_VERSION}+${JDK_BUILD_NUMBER}-${BSD_JDK_VERSION} \
--with-zlib=system \
--x-includes=${LOCALBASE}/include \
--x-libraries=${LOCALBASE}/lib
CONFIGURE_ENV= ac_cv_path_SED=${LOCALBASE}/bin/gsed
CONFIGURE_TARGET= ${JDK_ARCH}-portbld-${OPSYS:tl}${OSREL}
.if ${FLAVOR:U} == headless
CONFIGURE_ARGS+= --enable-headless-only
.endif
# Suppress passing -j to do-build target via Mk/bsd.port.mk
# In the JDK build the number of parallel jobs is passed in via configure --with-num-cores=N
_MAKE_JOBS= #
MAKE_ENV= CLASSPATH="" \
JAVA_HOME="" \
LD_LIBRARY_PATH="" \
LOG=cmdlines \
MAKEFLAGS=""
.if ${FLAVOR:U} == jre
ALL_TARGET= legacy-images
.else
ALL_TARGET= images
.endif
JDK_BUILD_TYPE= release
JDK_ARCH= ${ARCH:S/amd64/x86_64/:S/i386/x86/:S/powerpc64/ppc64/}
JDK_OSARCH= bsd-${JDK_ARCH}
JDK_BUILDDIR= ${WRKSRC}/build/${JDK_OSARCH}-${JDK_BUILD_JVM}-${JDK_BUILD_TYPE}
.if ${FLAVOR:U} == jre
BUILD_JRE= true
JDK_IMAGEDIR= ${JDK_BUILDDIR}/images/jre
.else
JDK_IMAGEDIR= ${JDK_BUILDDIR}/images/jdk
.endif
INSTALLDIR= ${PREFIX}/${PKGBASE}
NO_CCACHE= yes
NOPRECIOUSMAKEVARS= yes
JDK_MAJOR_VERSION= 25
JDK_MINOR_VERSION= 0
JDK_PATCH_VERSION= 0
JDK_BUILD_NUMBER= 36
BSD_JDK_VERSION= freebsd-1
JDK_FULL_VERSION= ${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_PATCH_VERSION}+${JDK_BUILD_NUMBER}-${BSD_JDK_VERSION}
JDK_BUG_URL= https://bugs.freebsd.org/bugzilla/enter_bug.cgi?product=Ports%20%26%20Packages&component=Individual%20Port(s)&short_desc=java/${PORTNAME}${JDK_MAJOR_VERSION}%3A%20
.ifnmake portclippy
JAVAVMS_COMMENT= OpenJDK${JDK_MAJOR_VERSION}
.endif
.include <bsd.port.pre.mk>
BOOTSTRAP_JDKS= ${LOCALBASE}/openjdk25 ${LOCALBASE}/openjdk24
# do we have valid native jdk installed?
.for BJDK in ${BOOTSTRAP_JDKS}
. if !defined(BOOTSTRAPJDKDIR) && exists(${BJDK}/bin/javac)
BOOTSTRAPJDKDIR= ${BJDK}
. endif
.endfor
# if no valid jdk found, set dependency
.if !defined(BOOTSTRAPJDKDIR)
BOOTSTRAPJDKDIR?= ${LOCALBASE}/openjdk24
BUILD_DEPENDS+= ${BOOTSTRAPJDKDIR}/bin/javac:java/openjdk24
.endif
JDK_BUILD_JVM= server
MAKE_ENV+= --with-toolchain-type=${COMPILER_TYPE}
CONFIGURE_ARGS+= --with-toolchain-type=${COMPILER_TYPE}
CONFIGURE_ARGS+= --disable-warnings-as-errors
.if ${COMPILER_TYPE} == gcc
USE_GCC= yes
CONFIGURE_ARGS+= --with-extra-cflags="-Wl,-rpath=${LOCALBASE}/lib/gcc${GCC_DEFAULT}" \
--with-extra-cxxflags="-Wl,-rpath=${LOCALBASE}/lib/gcc${GCC_DEFAULT}" \
--with-extra-ldflags="-Wl,-rpath=${LOCALBASE}/lib/gcc${GCC_DEFAULT} -L${LOCALBASE}/lib/gcc${GCC_DEFAULT}"
.else
MAKE_ENV+= USE_CLANG=true
EXTRA_CFLAGS+= -Wno-unused-but-set-parameter
EXTRA_CFLAGS+= -Wno-bitwise-instead-of-logical \
-Wno-error=deprecated-non-prototype
CONFIGURE_ARGS+= --with-extra-cflags="${EXTRA_CFLAGS}"
CONFIGURE_ARGS+= --with-extra-cxxflags="${EXTRA_CFLAGS}"
.endif
.if ${ARCH} == aarch64
CONFIGURE_ARGS+= --disable-dtrace
.endif
.if empty(ICONV_LIB)
ICONV_CFLAGS= -DLIBICONV_PLUG
.else
ICONV_CFLAGS= -I${LOCALBASE}/include
ICONV_LDFLAGS= -L${LOCALBASE}/lib
ICONV_LIBS= ${ICONV_LIB}
.endif
post-patch:
@${RM} ${WRKSRC}/src/hotspot/os_cpu/bsd_ppc/thread_bsd_ppc.cpp
@${MV} ${WRKSRC}/src/hotspot/os_cpu/bsd_ppc/thread_bsd_ppc.hpp \
${WRKSRC}/src/hotspot/os_cpu/bsd_ppc/javaThread_bsd_ppc.hpp
@${FIND} ${WRKSRC} -name '*.orig' -delete
@${CHMOD} 755 ${WRKSRC}/configure
@${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \
${WRKSRC}/configure \
${WRKSRC}/src/hotspot/os/bsd/os_bsd.cpp
@${REINPLACE_CMD} -e 's|%%ICONV_CFLAGS%%|${ICONV_CFLAGS}|' \
-e 's|%%ICONV_LDFLAGS%%|${ICONV_LDFLAGS}|' \
-e 's|%%ICONV_LIBS%%|${ICONV_LIBS}|' \
${WRKSRC}/make/autoconf/libraries.m4
post-build:
.if defined(OPENJDK_SYMLINK_CACERTS)
@${RM} ${JDK_IMAGEDIR}/lib/security/cacerts
@${LN} -sf ${OPENJDK_SYMLINK_CACERTS} ${JDK_IMAGEDIR}/lib/security/cacerts
.endif
do-install:
@${MKDIR} ${STAGEDIR}${INSTALLDIR}
@cd ${JDK_IMAGEDIR} && ${COPYTREE_SHARE} . ${STAGEDIR}${INSTALLDIR}
@cd ${STAGEDIR}${INSTALLDIR} && \
${FIND} bin -type f -exec ${CHMOD} ${BINMODE} {} \;
@${CHMOD} ${BINMODE} ${STAGEDIR}${INSTALLDIR}/lib/jspawnhelper
@${ECHO} "@javavm ${INSTALLDIR}/bin/java" >> ${TMPPLIST}
@${FIND} ${STAGEDIR}${INSTALLDIR} -not -type d | ${SORT} | \
${SED} -e 's|^${STAGEDIR}${PREFIX}/||' >> ${TMPPLIST}
.include <bsd.port.post.mk>