PORTNAME=	openjdk
DISTVERSIONPREFIX=	jdk-
DISTVERSION=	${JDK_FULL_VERSION:S/.0.0//}
CATEGORIES=	java devel
PKGNAMESUFFIX?=	${JDK_MAJOR_VERSION}

MAINTAINER=	java@FreeBSD.org
COMMENT=	${COMMENT_${FLAVOR}} ${JDK_MAJOR_VERSION}
COMMENT_jdk=	Java Development Kit
COMMENT_headless=	Java Development Kit (headless version)
COMMENT_jre=	Java Runtime Environment
COMMENT_jre_headless=	Java Runtime Environment (headless version)

WWW=		https://openjdk.java.net/projects/jdk/25/

LICENSE=	GPLv2

ONLY_FOR_ARCHS=	aarch64 amd64 powerpc64 powerpc64le

# This port supports the following flavors:
#
# - jdk (default)	Full OpenJDK including dev tools and x11 support
# - headless		Full OpenJDK including dev tools, but without x11 support
# - jre			Java Runtime Environment including x11 support
# - jre_headless	Jave Runtime Environment without x11 support
FLAVORS=	jdk jre headless jre_headless

headless_PKGNAMESUFFIX=	${JDK_MAJOR_VERSION}-headless
jre_PKGNAMESUFFIX=	-jre
jre_headless_PKGNAMESUFFIX=	${JDK_MAJOR_VERSION}-jre-headless

FLAVOR?=	${BUILD_JRE:?jre:${FLAVORS:[1]}}

BUILD_DEPENDS=	${LOCALBASE}/include/cups/cups.h:print/cups \
		bash:shells/bash \
		gsed:textproc/gsed \
		zip:archivers/zip

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

RUN_DEPENDS=	javavm:java/javavmwrapper
.if ${FLAVOR:M*headless} == ""
RUN_DEPENDS+=	xorg-fonts-truetype>0:x11-fonts/xorg-fonts-truetype
.endif

USES=		autoreconf:build compiler:features cpe gmake iconv jpeg pkgconfig
.if ${FLAVOR:M*headless} == ""
USES+=		xorg
.endif

CPE_VENDOR=	oracle

USE_GITHUB=	yes
GH_ACCOUNT=	freebsd

.if ${FLAVOR:M*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
.if ${FLAVOR:M*headless}
CONFIGURE_ARGS+=	--enable-headless-only
.endif

CONFIGURE_ENV=		ac_cv_path_SED=${LOCALBASE}/bin/gsed
CONFIGURE_TARGET=	${JDK_ARCH}-portbld-${OPSYS:tl}${OSREL}

# 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:Mjre*}
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:Mjre*}
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=	1
JDK_BUILD_NUMBER=	8
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>
