summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Le Cuirot <chewi@gentoo.org>2018-11-04 15:10:39 +0000
committerJames Le Cuirot <chewi@gentoo.org>2018-11-08 23:11:09 +0000
commit369063cc1474a9a6bc49b2012e8fe08469a477cc (patch)
tree437991274b00217d96eb08f5bb0e5cc23fca7e30
parentprofiles: Unmask dev-java/openjdk(-bin) on little-endian ppc64 (diff)
downloadgentoo-369063cc1474a9a6bc49b2012e8fe08469a477cc.tar.gz
gentoo-369063cc1474a9a6bc49b2012e8fe08469a477cc.tar.bz2
gentoo-369063cc1474a9a6bc49b2012e8fe08469a477cc.zip
dev-java/openjdk: New package to provide Java 11 from source
I'm not sure if this will build on hardened. There used to be an upstream mechanism to handle PaX markings but this disappeared in an earlier version. It might build with USE=-jbootstrap though. Please let us know. Thanks to Alex Dubov for the initial ebuild attempt. Closes: https://github.com/gentoo/gentoo/pull/9835 Signed-off-by: James Le Cuirot <chewi@gentoo.org> Package-Manager: Portage-2.3.51, Repoman-2.3.11
-rw-r--r--dev-java/openjdk/Manifest1
-rw-r--r--dev-java/openjdk/files/openjdk-11.env.sh16
-rw-r--r--dev-java/openjdk/metadata.xml16
-rw-r--r--dev-java/openjdk/openjdk-11.0.1_p13.ebuild234
4 files changed, 267 insertions, 0 deletions
diff --git a/dev-java/openjdk/Manifest b/dev-java/openjdk/Manifest
new file mode 100644
index 000000000000..351991ab4ea9
--- /dev/null
+++ b/dev-java/openjdk/Manifest
@@ -0,0 +1 @@
+DIST jdk-11.0.1+13.tar.bz2 90134818 BLAKE2B c79f32dc5b531a06317afb87ef15495267e914b9b292a1d434514a90298d8234e7e0ba92659416b15d9392c7513d976a0c81411953cb6706a27ee57c965e36fb SHA512 c534c2fa8dcd4fdebef6f00473d5ceaae4a33bd1e1a417846508e25f154b1ded649a73468c8c71ac0c1e27bab5f641a3b480a264b532a0c30be2869c3d11a15d
diff --git a/dev-java/openjdk/files/openjdk-11.env.sh b/dev-java/openjdk/files/openjdk-11.env.sh
new file mode 100644
index 000000000000..96c4be79c33f
--- /dev/null
+++ b/dev-java/openjdk/files/openjdk-11.env.sh
@@ -0,0 +1,16 @@
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+VERSION="OpenJDK ${PV}"
+JAVA_HOME="${EPREFIX}/usr/$(get_libdir)/${PN}-${SLOT}"
+JDK_HOME="${EPREFIX}/usr/$(get_libdir)/${PN}-${SLOT}"
+JAVAC="\${JAVA_HOME}/bin/javac"
+PATH="\${JAVA_HOME}/bin"
+ROOTPATH="\${JAVA_HOME}/bin"
+LDPATH="\${JAVA_HOME}/lib/:\${JAVA_HOME}/lib/server/"
+MANPATH=""
+PROVIDES_TYPE="JDK JRE"
+PROVIDES_VERSION="${SLOT}"
+BOOTCLASSPATH=""
+GENERATION="2"
+ENV_VARS="JAVA_HOME JDK_HOME JAVAC PATH ROOTPATH LDPATH MANPATH"
diff --git a/dev-java/openjdk/metadata.xml b/dev-java/openjdk/metadata.xml
new file mode 100644
index 000000000000..c76b9ca5d45e
--- /dev/null
+++ b/dev-java/openjdk/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>java@gentoo.org</email>
+ <name>Java</name>
+ </maintainer>
+ <longdescription>Java™ is the world's leading programming language and platform. The code for Java is open source and available at OpenJDK™.</longdescription>
+ <use>
+ <flag name="headless-awt">Don't install the X backend for AWT, needed by some GUIs</flag>
+ <flag name="gentoo-vm">Allow this JDK to be recognised by Gentoo (package manager, eselect, java-config, EXPERIMENTAL!)</flag>
+ <flag name="jbootstrap">Build OpenJDK twice, the second time using the result of the first</flag>
+ <flag name="source">Install JVM sources</flag>
+ <flag name="webstart">Provide javaws command through symlink to icedtea-web</flag>
+ </use>
+</pkgmetadata>
diff --git a/dev-java/openjdk/openjdk-11.0.1_p13.ebuild b/dev-java/openjdk/openjdk-11.0.1_p13.ebuild
new file mode 100644
index 000000000000..8bc5d1fa01e9
--- /dev/null
+++ b/dev-java/openjdk/openjdk-11.0.1_p13.ebuild
@@ -0,0 +1,234 @@
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit autotools check-reqs flag-o-matic java-pkg-2 java-vm-2 multiprocessing pax-utils toolchain-funcs
+
+MY_PV=${PV/_p/+}
+SLOT=${MY_PV%%[.+]*}
+
+DESCRIPTION="Open source implementation of the Java programming language"
+HOMEPAGE="https://openjdk.java.net"
+SRC_URI="https://hg.${PN}.java.net/jdk-updates/jdk${SLOT}u/archive/jdk-${MY_PV}.tar.bz2"
+LICENSE="GPL-2"
+KEYWORDS="~amd64 ~arm64 ~ppc64"
+
+# Default variant must be first!
+# The rest do not matter.
+JVM_VARIANTS="
+ server
+ client
+ core
+ minimal
+ zero
+"
+
+IUSE=+$(printf "jvm_variant_%s " ${JVM_VARIANTS})
+IUSE+="alsa debug doc examples gentoo-vm headless-awt +jbootstrap nsplugin +pch selinux source +webstart"
+
+REQUIRED_USE="
+ ^^ (
+ || ( jvm_variant_server jvm_variant_client jvm_variant_minimal )
+ jvm_variant_core
+ jvm_variant_zero
+ )
+"
+
+CDEPEND="
+ media-libs/freetype:2=
+ net-print/cups
+ sys-libs/zlib
+ !headless-awt? (
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXi
+ x11-libs/libXrender
+ x11-libs/libXt
+ x11-libs/libXtst
+ )
+"
+
+RDEPEND="
+ ${CDEPEND}
+ alsa? ( media-libs/alsa-lib )
+ selinux? ( sec-policy/selinux-java )
+"
+
+DEPEND="
+ ${CDEPEND}
+ app-arch/zip
+ media-libs/alsa-lib
+ !headless-awt? (
+ x11-base/xorg-proto
+ )
+ || (
+ dev-java/openjdk-bin:${SLOT}
+ dev-java/openjdk:${SLOT}
+ )
+"
+
+PDEPEND="webstart? ( >=dev-java/icedtea-web-1.6.1:0 )
+ nsplugin? ( >=dev-java/icedtea-web-1.6.1:0[nsplugin] )"
+
+S="${WORKDIR}/jdk${SLOT}u-jdk-${MY_PV}"
+
+# The space required to build varies wildly depending on USE flags,
+# ranging from 2GB to 24GB. This function is certainly not exact but
+# should be close enough to be useful.
+openjdk_check_requirements() {
+ local M variant count=0
+
+ for variant in ${JVM_VARIANTS}; do
+ use jvm_variant_${variant} &&
+ count=$(( $count + 1 ))
+ done
+
+ M=$(usex debug 2600 875)
+ M=$(( $(usex debug 2900 375) * $count + $M ))
+ M=$(( $(usex jbootstrap 2 1) * $M ))
+ M=$(( $(usex doc 300 0) + $(usex source 120 0) + 820 + $M ))
+
+ CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
+}
+
+pkg_pretend() {
+ openjdk_check_requirements
+}
+
+pkg_setup() {
+ openjdk_check_requirements
+ java-vm-2_pkg_setup
+
+ JAVA_PKG_WANT_BUILD_VM="openjdk-${SLOT} openjdk-bin-${SLOT}"
+ JAVA_PKG_WANT_SOURCE="${SLOT}"
+ JAVA_PKG_WANT_TARGET="${SLOT}"
+
+ # The nastiness below is necessary while the gentoo-vm USE flag is
+ # masked. First we call java-pkg-2_pkg_setup if it looks like the
+ # flag was unmasked against one of the possible build VMs. If not,
+ # we try finding one of them in their expected locations. This would
+ # have been slightly less messy if openjdk-bin had been installed to
+ # /opt/${PN}-${SLOT} or if there was a mechanism to install a VM env
+ # file but disable it so that it would not normally be selectable.
+
+ local vm
+ for vm in ${JAVA_PKG_WANT_BUILD_VM}; do
+ if [[ -d ${EPREFIX}/usr/$(get_libdir)/jvm/${vm} ]]; then
+ java-pkg-2_pkg_setup
+ return
+ fi
+ done
+
+ if has_version --host-root dev-java/openjdk:${SLOT}; then
+ export JDK_HOME=${EPREFIX}/usr/$(get_libdir)/openjdk-${SLOT}
+ else
+ JDK_HOME=$(best_version --host-root dev-java/openjdk-bin:${SLOT})
+ [[ -n ${JDK_HOME} ]] || die "Build VM not found!"
+ JDK_HOME=${JDK_HOME#*/}
+ JDK_HOME=${EPREFIX}/opt/${JDK_HOME%-r*}
+ export JDK_HOME
+ fi
+}
+
+src_configure() {
+ # Work around stack alignment issue, bug #647954.
+ use x86 && append-flags -mincoming-stack-boundary=2
+
+ chmod +x configure || die
+
+ local variant build_variants
+ for variant in ${JVM_VARIANTS}; do
+ use jvm_variant_${variant} &&
+ build_variants+=${variant},
+ done
+
+ local myconf=()
+
+ # PaX breaks pch, bug #601016
+ if use pch && ! host-is-pax; then
+ myconf+=( --enable-precompiled-headers )
+ else
+ myconf+=( --disable-precompiled-headers )
+ fi
+
+ # Enabling full docs appears to break doc building. If not
+ # explicitly disabled, the flag will get auto-enabled if pandoc and
+ # graphviz are detected. pandoc has loads of dependencies anyway.
+
+ (
+ unset JAVA JAVAC XARGS
+ CFLAGS= CXXFLAGS= LDFLAGS= \
+ CONFIG_SITE=/dev/null \
+ econf \
+ --with-boot-jdk="${JDK_HOME}" \
+ --with-extra-cflags="${CFLAGS}" \
+ --with-extra-cxxflags="${CXXFLAGS}" \
+ --with-extra-ldflags="${LDFLAGS}" \
+ --with-jvm-variants=${build_variants%,} \
+ --with-native-debug-symbols=$(usex debug internal none) \
+ --with-version-pre=gentoo \
+ --with-version-string=${MY_PV%+*} \
+ --with-version-build=${MY_PV#*+} \
+ --enable-headless-only=$(usex headless-awt yes no) \
+ --enable-full-docs=no \
+ --disable-ccache \
+ "${myconf[@]}"
+ )
+}
+
+src_compile() {
+ emake -j1 \
+ $(usex jbootstrap bootcycle-images product-images) $(usex doc docs '') \
+ JOBS=$(makeopts_jobs) LOG=debug CFLAGS_WARNINGS_ARE_ERRORS= # No -Werror
+}
+
+src_install() {
+ local dest="/usr/$(get_libdir)/${PN}-${SLOT}"
+ local ddest="${ED}${dest#/}"
+
+ cd "${S}"/build/*-release/images/jdk || die
+
+ # Oracle and IcedTea have libjsoundalsa.so depending on
+ # libasound.so.2 but OpenJDK only has libjsound.so. Weird.
+ if ! use alsa ; then
+ rm -v lib/libjsound.* || die
+ fi
+
+ if ! use examples ; then
+ rm -vr demo/ || die
+ fi
+
+ if ! use source ; then
+ rm -v lib/src.zip || die
+ fi
+
+ dodir "${dest}"
+ cp -pPR * "${ddest}" || die
+
+ use gentoo-vm && java-vm_install-env "${FILESDIR}"/${PN}-${SLOT}.env.sh
+ java-vm_set-pax-markings "${ddest}"
+ java-vm_revdep-mask
+ java-vm_sandbox-predict /dev/random /proc/self/coredump_filter
+
+ if use doc ; then
+ insinto /usr/share/doc/${PF}/html
+ doins -r "${S}"/build/*-release/images/docs/*
+ dosym ${PF} /usr/share/doc/${PN}-${SLOT}
+ fi
+}
+
+pkg_postinst() {
+ java-vm-2_pkg_postinst
+
+ if use gentoo-vm ; then
+ ewarn "WARNING! You have enabled the gentoo-vm USE flag, making this JDK"
+ ewarn "recognised by the system. This will almost certainly break things."
+ else
+ ewarn "The experimental gentoo-vm USE flag has not been enabled so this JDK"
+ ewarn "will not be recognised by the system. For example, simply calling"
+ ewarn "\"java\" will launch a different JVM. This is necessary until Gentoo"
+ ewarn "fully supports Java ${SLOT}. This JDK must therefore be invoked using its"
+ ewarn "absolute location under ${EPREFIX}/usr/$(get_libdir)/${PN}-${SLOT}."
+ fi
+}