From 6660a95a204b0b572cb27c454c751fa849e9634d Mon Sep 17 00:00:00 2001 From: James Le Cuirot Date: Sun, 21 Jan 2018 11:33:50 +0000 Subject: [PATCH] dev-java/oracle-jdk-bin: Bring 8 ebuild in line with 9 and simplify I doubt the MacOS examples were working before. The pkg_nofetch stuff was needlessly complicated as ${A} already contains just the relevant files and the function is not called at all if all files are present. I noticed that all the demo files follow a pattern, except on MacOS for some bizarre reason. I doubt any demo files will disappear before Java 8 is EOL'd but this can easily be handled in the case statement. Package-Manager: Portage-2.3.19, Repoman-2.3.6 --- .../oracle-jdk-bin-1.8.0.162.ebuild | 217 +++++++----------- 1 file changed, 89 insertions(+), 128 deletions(-) diff --git a/dev-java/oracle-jdk-bin/oracle-jdk-bin-1.8.0.162.ebuild b/dev-java/oracle-jdk-bin/oracle-jdk-bin-1.8.0.162.ebuild index 27a83d9f89363..77a16f6c75a28 100644 --- a/dev-java/oracle-jdk-bin/oracle-jdk-bin-1.8.0.162.ebuild +++ b/dev-java/oracle-jdk-bin/oracle-jdk-bin-1.8.0.162.ebuild @@ -3,18 +3,9 @@ EAPI=6 -inherit eutils java-vm-2 prefix versionator +inherit desktop gnome2-utils java-vm-2 prefix versionator -# This URI needs to be updated when bumping! -JDK_URI="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" - -# This is a list of archs supported by this update. -# Currently arm comes and goes. -AT_AVAILABLE=( amd64 arm arm64 x86 x64-solaris sparc64-solaris x64-macos ) - -# Sometimes some or all of the demos are missing, this is to not have to rewrite half -# the ebuild when it happens. -DEMOS_AVAILABLE=( amd64 arm arm64 x86 x64-solaris sparc64-solaris x64-macos ) +KEYWORDS="-* ~amd64 ~arm ~arm64 ~x86 ~amd64-linux ~x86-linux ~x64-macos ~sparc64-solaris ~x64-solaris" if [[ "$(get_version_component_range 4)" == 0 ]] ; then S_PV="$(get_version_component_range 1-3)" @@ -25,39 +16,35 @@ fi MY_PV="$(get_version_component_range 2)${MY_PV_EXT}" -AT_amd64="jdk-${MY_PV}-linux-x64.tar.gz" -AT_arm="jdk-${MY_PV}-linux-arm32-vfp-hflt.tar.gz" -AT_arm64="jdk-${MY_PV}-linux-arm64-vfp-hflt.tar.gz" -AT_x86="jdk-${MY_PV}-linux-i586.tar.gz" -AT_x64_solaris="jdk-${MY_PV}-solaris-x64.tar.gz" -AT_sparc64_solaris="${AT_sparc_solaris} jdk-${MY_PV}-solaris-sparcv9.tar.gz" -AT_x64_macos="jdk-${MY_PV}-macosx-x64.dmg" - -DEMOS_amd64="jdk-${MY_PV}-linux-x64-demos.tar.gz" -DEMOS_arm="jdk-${MY_PV}-linux-arm32-vfp-hflt-demos.tar.gz" -DEMOS_arm64="jdk-${MY_PV}-linux-arm64-vfp-hflt-demos.tar.gz" -DEMOS_x86="jdk-${MY_PV}-linux-i586-demos.tar.gz" -DEMOS_x64_solaris="jdk-${MY_PV}-solaris-x64-demos.tar.gz" -DEMOS_sparc64_solaris="jdk-${MY_PV}-solaris-sparcv9-demos.tar.gz" -DEMOS_x64_macos="jdk-${MY_PV}-macosx-x86_64-demos.zip" +declare -A ARCH_FILES +ARCH_FILES[amd64]="jdk-${MY_PV}-linux-x64.tar.gz" +ARCH_FILES[arm]="jdk-${MY_PV}-linux-arm32-vfp-hflt.tar.gz" +ARCH_FILES[arm64]="jdk-${MY_PV}-linux-arm64-vfp-hflt.tar.gz" +ARCH_FILES[x86]="jdk-${MY_PV}-linux-i586.tar.gz" +ARCH_FILES[x64-macos]="jdk-${MY_PV}-macosx-x64.dmg" +ARCH_FILES[sparc64-solaris]="jdk-${MY_PV}-solaris-sparcv9.tar.gz" +ARCH_FILES[x64-solaris]="jdk-${MY_PV}-solaris-x64.tar.gz" + +for keyword in ${KEYWORDS//-\*} ; do + case "${keyword#\~}" in + *-linux) continue ;; + x64-macos) demo="jdk-${MY_PV}-macosx-x86_64-demos.zip" ;; + *) demo=${ARCH_FILES[${keyword#\~}]/./-demos.} ;; + esac -DESCRIPTION="Oracle's Java SE Development Kit" -HOMEPAGE="http://www.oracle.com/technetwork/java/javase/" -for d in "${AT_AVAILABLE[@]}"; do - SRC_URI+=" ${d}? ( $(eval "echo \${$(echo AT_${d/-/_})}")" - if has ${d} "${DEMOS_AVAILABLE[@]}"; then - SRC_URI+=" examples? ( $(eval "echo \${$(echo DEMOS_${d/-/_})}") )" - fi - SRC_URI+=" )" + SRC_URI+=" + ${keyword#\~}? ( + ${ARCH_FILES[${keyword#\~}]} + examples? ( ${demo} ) + )" done -unset d +DESCRIPTION="Oracle's Java SE Development Kit" +HOMEPAGE="http://www.oracle.com/technetwork/java/javase/" LICENSE="Oracle-BCLA-JavaSE examples? ( BSD )" SLOT="1.8" -KEYWORDS="~amd64 ~arm ~arm64 ~x86 ~amd64-linux ~x86-linux ~x64-macos ~sparc64-solaris ~x64-solaris" IUSE="alsa commercial cups derby doc examples +fontconfig headless-awt javafx jce nsplugin selinux source visualvm" REQUIRED_USE="javafx? ( alsa fontconfig )" - RESTRICT="fetch preserve-libs strip" QA_PREBUILT="*" @@ -104,66 +91,35 @@ RDEPEND="!x64-macos? ( DEPEND="app-arch/zip examples? ( x64-macos? ( app-arch/unzip ) )" -S="${WORKDIR}/jdk" - -check_tarballs_available() { - local uri=$1; shift - local dl= unavailable= - for dl in "${@}" ; do - [[ ! -f "${DISTDIR}/${dl}" ]] && unavailable+=" ${dl}" - done - - if [[ -n "${unavailable}" ]] ; then - if [[ -z ${_check_tarballs_available_once} ]] ; then - einfo - einfo "Oracle requires you to download the needed files manually after" - einfo "accepting their license through a javascript capable web browser." - einfo - _check_tarballs_available_once=1 - fi - einfo "Download the following files:" - for dl in ${unavailable}; do - einfo " ${dl}" - done - einfo "at '${uri}'" - einfo "and move them to '${DISTDIR}'" - einfo - einfo "If the above mentioned urls do not point to the correct version anymore," - einfo "please download the files from Oracle's java download archive:" - einfo - einfo " http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-${MY_PV}-oth-JPR" - einfo - fi -} +S="${WORKDIR}/jdk$(replace_version_separator 3 _ ${S_PV})" pkg_nofetch() { - local distfiles=( $(eval "echo \${$(echo AT_${ARCH/-/_})}") ) - if use examples && has ${ARCH} "${DEMOS_AVAILABLE[@]}"; then - distfiles+=( $(eval "echo \${$(echo DEMOS_${ARCH/-/_})}") ) - fi - check_tarballs_available "${JDK_URI}" "${distfiles[@]}" + local a + einfo "Please download these files and move them to ${DISTDIR}:" + einfo + for a in ${A} ; do + [[ ! -f ${DISTDIR}/${a} ]] && einfo " ${a}" + done + einfo + einfo " http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" + einfo + einfo "If the above mentioned URL does not point to the correct version anymore," + einfo "please download the file from Oracle's Java download archive:" + einfo + einfo " http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html" + einfo } src_unpack() { if use x64-macos ; then - pushd "${T}" > /dev/null || die - mkdir dmgmount || die - hdiutil attach "${DISTDIR}"/jdk-${MY_PV}-macosx-x64.dmg \ - -mountpoint "${T}"/dmgmount || die - printf -v update "%02d" $(get_version_component_range 4) || die - xar -xf dmgmount/JDK\ $(get_version_component_range 2)\ Update\ ${update}.pkg || die + mkdir -p "${T}"/dmgmount || die + hdiutil attach "${DISTDIR}"/jdk-${MY_PV}-macosx-x64.dmg -mountpoint "${T}"/dmgmount || die + xar -Oxf "${T}"/dmgmount/JDK\ $(get_version_component_range 2)\ Update\ ${update}.pkg jdk${PV//.}.pkg/Payload | zcat | cpio -idv || die hdiutil detach "${T}"/dmgmount || die - zcat jdk1${MY_PV%u*}0${update}.pkg/Payload | cpio -idv || die - mv Contents/Home "${WORKDIR}"/jdk${MY_PV} || die - popd > /dev/null || die - else - default + mv Contents/Home "${S}" || die fi - # Upstream is changing their versioning scheme every release around 1.8.0.*; - # to stop having to change it over and over again, just wildcard match and - # live a happy life instead of trying to get this new jdk1.8.0_05 to work. - mv "${WORKDIR}"/jdk* "${S}" || die + default } src_prepare() { @@ -198,7 +154,7 @@ src_install() { rm -vf jre/lib/*/libjsoundalsa.* || die fi - if ! use commercial; then + if ! use commercial ; then rm -vfr lib/missioncontrol jre/lib/jfr* || die fi @@ -218,15 +174,38 @@ src_install() { rm -vf jre/lib/*/libnpjp2.* || die else local nsplugin=$(echo jre/lib/*/libnpjp2.*) + local nsplugin_link=${nsplugin##*/} + nsplugin_link=${nsplugin_link/./-${PN}-${SLOT}.} + dosym "${dest}/${nsplugin}" "/usr/$(get_libdir)/nsbrowser/plugins/${nsplugin_link}" fi # Even though plugins linked against multiple ffmpeg versions are # provided, they generally lag behind what Gentoo has available. rm -vf jre/lib/*/libavplugin* || die + # Prune all fontconfig files so that libfontconfig will be used. + rm -v jre/lib/fontconfig.* || die + # Packaged as dev-util/visualvm but some users prefer this version. use visualvm || find -name "*visualvm*" -exec rm -vfr {} + || die + # Install desktop file for the Java Control Panel. Using + # ${PN}-${SLOT} to prevent file collision with JRE and other slots. + if [[ -d jre/lib/desktop/icons ]] ; then + local icon + pushd jre/lib/desktop/icons >/dev/null || die + for icon in */*/apps/sun-jcontrol.png ; do + insinto /usr/share/icons/"${icon%/*}" + newins "${icon}" sun-jcontrol-${PN}-${SLOT}.png + done + popd >/dev/null || die + make_desktop_entry \ + "${dest}"/bin/jcontrol \ + "Java Control Panel for Oracle JDK ${SLOT}" \ + sun-jcontrol-${PN}-${SLOT} \ + "Settings;Java;" + fi + dodoc COPYRIGHT dodir "${dest}" cp -pPR bin include jre lib man "${ddest}" || die @@ -235,19 +214,13 @@ src_install() { cp -pPR db "${ddest}" || die fi - if use examples && has ${ARCH} "${DEMOS_AVAILABLE[@]}" ; then + if use examples && [[ ${A} = *-demos.* ]] ; then cp -pPR demo sample "${ddest}" || die fi ln -s policy/$(usex jce unlimited limited)/{US_export,local}_policy.jar \ "${ddest}"/jre/lib/security/ || die - if use nsplugin ; then - local nsplugin_link=${nsplugin##*/} - nsplugin_link=${nsplugin_link/./-${PN}-${SLOT}.} - dosym "${dest}/${nsplugin}" "/usr/$(get_libdir)/nsbrowser/plugins/${nsplugin_link}" - fi - if use source ; then cp -v src.zip "${ddest}" || die @@ -256,38 +229,17 @@ src_install() { fi fi - if [[ -d jre/lib/desktop ]] ; then - # Install desktop file for the Java Control Panel. - # Using ${PN}-${SLOT} to prevent file collision with jre and or - # other slots. make_desktop_entry can't be used as ${P} would - # end up in filename. - newicon jre/lib/desktop/icons/hicolor/48x48/apps/sun-jcontrol.png \ - sun-jcontrol-${PN}-${SLOT}.png || die - sed -e "s#Name=.*#Name=Java Control Panel for Oracle JDK ${SLOT}#" \ - -e "s#Exec=.*#Exec=/opt/${P}/jre/bin/jcontrol#" \ - -e "s#Icon=.*#Icon=sun-jcontrol-${PN}-${SLOT}#" \ - -e "s#Application;##" \ - -e "/Encoding/d" \ - jre/lib/desktop/applications/sun_java.desktop \ - > "${T}"/jcontrol-${PN}-${SLOT}.desktop || die - domenu "${T}"/jcontrol-${PN}-${SLOT}.desktop - fi - - # Prune all fontconfig files so libfontconfig will be used and only install - # a Gentoo specific one if fontconfig is disabled. - # http://docs.oracle.com/javase/8/docs/technotes/guides/intl/fontconfig.html - rm "${ddest}"/jre/lib/fontconfig.* || die + # Only install Gentoo-specific fontconfig if flag is disabled. + # https://docs.oracle.com/javase/8/docs/technotes/guides/intl/fontconfig.html if ! use fontconfig ; then - cp "${FILESDIR}"/fontconfig.Gentoo.properties "${T}"/fontconfig.properties || die - eprefixify "${T}"/fontconfig.properties insinto "${dest}"/jre/lib/ - doins "${T}"/fontconfig.properties + doins "$(prefixify_ro "${FILESDIR}"/fontconfig.Gentoo.properties)" fi - # This needs to be done before CDS - #215225 + # Needs to be done before CDS, bug #215225. java-vm_set-pax-markings "${ddest}" - # see bug #207282 + # See bug #207282. einfo "Creating the Class Data Sharing archives" case ${ARCH} in arm|ia64) @@ -308,14 +260,13 @@ src_install() { find "${D}" -type d -empty -exec rmdir -v {} + || die if use x64-macos ; then - # Fix miscellaneous install_name issues. local lib - for lib in decora_sse glass prism_{common,es2,sw} ; do - lib=lib${lib}.dylib - einfo "Fixing self-reference of ${lib}" + for lib in lib{decora_sse,glass,prism_{common,es2,sw}}.dylib ; do + ebegin "Fixing self-reference of ${lib}" install_name_tool \ - -id "${EPREFIX}${dest}/jre/lib/${lib}" \ + -id "${EPREFIX}${dest}"/jre/lib/${lib} \ "${ddest}"/jre/lib/${lib} || die + eend $? done fi @@ -324,11 +275,21 @@ src_install() { java-vm_sandbox-predict /dev/random /proc/self/coredump_filter } +pkg_preinst() { + gnome2_icon_savelist +} + pkg_postinst() { + gnome2_icon_cache_update java-vm-2_pkg_postinst - if ! use headless-awt && ! use javafx; then + if ! use headless-awt && ! use javafx ; then ewarn "You have disabled the javafx flag. Some modern desktop Java applications" ewarn "require this and they may fail with a confusing error message." fi } + +pkg_postrm() { + gnome2_icon_cache_update + java-vm-2_pkg_postrm +}