freebsd-ports/java/openjfx14/Makefile
Muhammad Moinur Rahman ac7a7d6fe1
Mk/Uses/java.mk: Runtime fix with USES=java:ant
USES=java:ant does not imply USES=java:run so we need to add the run arg
seperately when we are using USES=java:ant. Not all ports require the
the argument so it is better to address the ports individually instead
of handling it automatically by implying run for ant.

Thanks to vvd for carefully going through this.

Reported by:	vvd
Approved by:	portmgr (blanket)
2024-12-31 15:39:30 +01:00

175 lines
7 KiB
Makefile

PORTNAME= openjfx
DISTVERSION= 14.0.2.1+1
PORTREVISION= 15
CATEGORIES= java x11-toolkits devel
MASTER_SITES= https://repo.maven.apache.org/maven2/org/apache/lucene/lucene-core/7.7.1/:core \
https://repo.maven.apache.org/maven2/org/apache/lucene/lucene-grouping/7.7.1/:grouping \
https://repo.maven.apache.org/maven2/org/apache/lucene/lucene-queries/7.7.1/:queries \
https://repo.maven.apache.org/maven2/org/apache/lucene/lucene-queryparser/7.7.1/:queryparser \
https://repo.maven.apache.org/maven2/org/apache/lucene/lucene-sandbox/7.7.1/:sandbox \
https://repo1.maven.org/maven2/org/antlr/antlr4/4.7.2/:antlr
PKGNAMESUFFIX= 14
DISTFILES= lucene-core-7.7.1.jar:core \
lucene-grouping-7.7.1.jar:grouping \
lucene-queries-7.7.1.jar:queries \
lucene-queryparser-7.7.1.jar:queryparser \
lucene-sandbox-7.7.1.jar:sandbox \
antlr4-4.7.2-complete.jar:antlr
MAINTAINER= ports@FreeBSD.org
COMMENT= JavaFX SDK overlay for OpenJDK 11
WWW= https://openjdk.java.net/projects/openjfx/
LICENSE= GPLv2
LICENSE_FILE= ${WRKSRC}/LICENSE
ONLY_FOR_ARCHS= aarch64 amd64 i386 powerpc64 powerpc64le
BUILD_DEPENDS= zip:archivers/zip \
apache-ant>0:devel/apache-ant \
gradle62>=6.2:devel/gradle62 \
${JAVALIBDIR}/junit.jar:java/junit
LIB_DEPENDS= libasound.so:audio/alsa-lib \
libfontconfig.so:x11-fonts/fontconfig \
libfreetype.so:print/freetype2
USES= gettext-runtime gl gnome java jpeg localbase:ldflags ninja pkgconfig \
sqlite xorg
USE_GITHUB= yes
GH_ACCOUNT= openjdk
GH_PROJECT= jfx
USE_GL= gl
USE_GNOME= atk cairo gdkpixbuf2 glib20 gtk20 gtk30 pango
JAVA_VERSION= 11
USE_LDCONFIG= yes
USE_XORG= x11 xtst xxf86vm
CFLAGS+= -Wno-unused-command-line-argument \
-Wno-int-conversion
PLIST_SUB= INSTALLDIR=${_INSTALLDIR}
OPTIONS_DEFINE= MEDIA SWT TEST WEBKIT
OPTIONS_DEFAULT= MEDIA WEBKIT
OPTIONS_SUB= yes
MEDIA_DESC= Media module
SWT_DESC= SWT support
MEDIA_LIB_DEPENDS= libavcodec.so.58:multimedia/ffmpeg4 \
libsndio.so:audio/sndio
MEDIA_USES= gmake
MEDIA_VARS= COMPILE_MEDIA=true
SWT_BUILD_DEPENDS= swt>0:x11-toolkits/swt
SWT_RUN_DEPENDS= swt>0:x11-toolkits/swt
SWT_VARS= COMPILE_SWT=true
TEST_USES= display:test
TEST_VARS= AWT_TEST=true FULL_TEST=true
# Gradle calls CMake during the build
WEBKIT_IMPLIES= MEDIA
WEBKIT_LIB_DEPENDS= libicui18n.so:devel/icu
WEBKIT_USES= bison cmake:indirect gmake gperf perl5 python:build ruby:build
WEBKIT_USE= GNOME=libxslt,libxml2 \
PERL5=build \
XORG=xcomposite,xdamage,xfixes,xrender,xt
WEBKIT_VARS= COMPILE_WEBKIT=true
# Move Gradle's home below ${WRKDIR} instead of using ${HOME}/.gradle
_GRADLE_ENV= CC=${WRKDIR}/bin/ccwrapper \
CXX=${WRKDIR}/bin/cxxwrapper \
GRADLE_USER_HOME=${WRKDIR}/gradle-home \
JAVA_VERSION=${JAVA_VERSION}
_GRADLE_RUN= ${SETENV} ${_GRADLE_ENV} gradle62 --no-daemon
_INSTALLDIR= ${PREFIX}/${PKGBASE}
.include <bsd.port.options.mk>
.if ${OPSYS} == FreeBSD
CFLAGS+= -Wno-error=incompatible-function-pointer-types
.endif
# Suppress errors with lld >= 17 due to undefined symbols.
LDFLAGS+= -Wl,--undefined-version
post-extract:
${MKDIR} ${WRKDIR}/jars
.for f in core grouping queries queryparser sandbox
${CP} ${DISTDIR}/lucene-${f}-7.7.1.jar ${WRKDIR}/jars
.endfor
${CP} ${DISTDIR}/antlr4-4.7.2-complete.jar ${WRKDIR}/jars
# The BSD Makefiles for GStreamer-lite and Jfxmedia are based on the
# Linux versions. Prepare the tree, so that we only see the changes
# from Linux's Makefile in our own patches.
pre-patch:
@${CP} -r ${WRKSRC}/modules/javafx.media/src/main/native/jfxmedia/projects/linux \
${WRKSRC}/modules/javafx.media/src/main/native/jfxmedia/projects/bsd
@${CP} -r ${WRKSRC}/modules/javafx.media/src/main/native/gstreamer/projects/linux \
${WRKSRC}/modules/javafx.media/src/main/native/gstreamer/projects/bsd
post-patch:
@${MKDIR} ${WRKDIR}/bin
@${PRINTF} '#!/bin/sh\nexport CCACHE_DIR=${CCACHE_DIR}\nexec ${CCACHE_BIN} ${CC} ${CFLAGS} ${LDFLAGS} "$$@"\n' > ${WRKDIR}/bin/ccwrapper
@${PRINTF} '#!/bin/sh\nexport CCACHE_DIR=${CCACHE_DIR}\nexec ${CCACHE_BIN} ${CXX} ${CXXFLAGS} ${LDFLAGS} "$$@"\n' > ${WRKDIR}/bin/cxxwrapper
@${CHMOD} +x ${WRKDIR}/bin/ccwrapper ${WRKDIR}/bin/cxxwrapper
@${REINPLACE_CMD} -e 's|gcc|${WRKDIR}/bin/ccwrapper|g' \
-e 's|g\+\+|${WRKDIR}/bin/cxxwrapper|g' \
${WRKSRC}/buildSrc/bsd.gradle
# Add a *BSD native audio sink to GStreamer-lite instead of using the
# bundled ALSA sink. Currently we add an sndio sink, but this is an extension
# point for eventually adding an OSS backend (or others) as an option as well.
# If you add a new one make sure it registers itself as "bsdaudiosink" as defined
# in modules/media/src/main/native/jfxmedia/platform/gstreamer/GstPipelineFactory.cpp
@${MKDIR} ${WRKSRC}/modules/javafx.media/src/main/native/gstreamer/gstreamer-lite/gst-plugins-base/ext/bsdaudio
@${CP} ${FILESDIR}/gstsndio.* ${FILESDIR}/sndiosink.* \
${WRKSRC}/modules/javafx.media/src/main/native/gstreamer/gstreamer-lite/gst-plugins-base/ext/bsdaudio
@cd ${WRKSRC}/modules/javafx.media/src/main/native/gstreamer/gstreamer-lite/gst-plugins-base/ext/bsdaudio && \
${LN} -s gstsndio.c gstbsdaudio.c && \
${LN} -s sndiosink.c bsdaudiosink.c
# Pull Java dependencies from LOCALBASE
@${REINPLACE_CMD} 's|/usr/local|${LOCALBASE}|g' \
${WRKSRC}/build.gradle ${WRKSRC}/buildSrc/build.gradle
# Remove bundled libraries. We use the system's versions instead.
@cd ${WRKSRC}/modules/javafx.web/src/main/native/Source/ThirdParty && \
${RM} -r icu libxml libxslt sqlite
@${RM} -r ${WRKSRC}/modules/javafx.web/src/main/native/Source/WTF/icu
@cd ${WRKSRC}/modules/javafx.media/src/main/native/gstreamer/3rd_party && \
${RM} -r glib libffi
# Environment variables gets lost so hardcode where we can find FFmpeg 4.x
@${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
${PATCH_WRKSRC}/modules/javafx.media/src/main/native/gstreamer/projects/linux/avplugin/Makefile
do-configure:
@${MKDIR} ${WRKDIR}/gradle-home
@${ECHO_CMD} "NUM_COMPILE_THREADS = ${MAKE_JOBS_NUMBER}" > ${WRKSRC}/gradle.properties
@${ECHO_CMD} "JFX_DEPS_URL = ${WRKDIR}/jars" > ${WRKSRC}/gradle.properties
.for prop in COMPILE_MEDIA COMPILE_WEBKIT AWT_TEST FULL_TEST
@${ECHO_CMD} "${prop} = ${${prop}:Ufalse}" >> ${WRKSRC}/gradle.properties
.endfor
@${ECHO_CMD} "BSD.compileSWT = ${COMPILE_SWT:Ufalse};" >> ${WRKSRC}/buildSrc/bsd.gradle
# the java doc are not installed on FreeBSD so exclude the javadoc task
# as it'll fail otherwise
do-build:
@cd ${WRKSRC} && ${_GRADLE_RUN} zips --exclude-task javadoc
# it's not recommended to install openjfx inside openjdk directory
do-install:
@${MKDIR} ${STAGEDIR}${_INSTALLDIR} \
${STAGEDIR}${_INSTALLDIR}/lib \
${STAGEDIR}${_INSTALLDIR}/jmods
${INSTALL_DATA} ${WRKSRC}/build/javafx-exports.zip ${STAGEDIR}${_INSTALLDIR}
(cd ${WRKSRC}/build/artifacts/javafx-sdk-14.0.2.1/lib && ${COPYTREE_SHARE} . ${STAGEDIR}${_INSTALLDIR}/lib)
@${MV} ${STAGEDIR}${_INSTALLDIR}/lib/src.zip ${STAGEDIR}${_INSTALLDIR}/lib/javafx-src.zip
(cd ${WRKSRC}/build/artifacts/javafx-jmods-14.0.2.1 && ${COPYTREE_SHARE} . ${STAGEDIR}${_INSTALLDIR}/jmods)
@${FIND} ${STAGEDIR}${_INSTALLDIR}/lib -name '*.so' -exec ${STRIP_CMD} \{\} \;
do-test-TEST-on:
@cd ${WRKSRC} && ${_GRADLE_RUN} check test
.include <bsd.port.mk>