From fff786419bc38e2dea86215f44c13713175e7d58 Mon Sep 17 00:00:00 2001 From: hedongbo Date: Mon, 25 May 2020 12:05:24 +0800 Subject: [PATCH] Support nss, systemtap and desktop --- icedtea_sync.sh | 97 +++++++ java-11-openjdk.spec | 267 ++++++++---------- jconsole.desktop.in | 10 + nss.cfg.in | 5 + ...ut_nss_cfg_provider_to_java_security.patch | 11 + tapsets-icedtea-3.15.0.tar.xz | Bin 0 -> 23036 bytes 6 files changed, 244 insertions(+), 146 deletions(-) create mode 100755 icedtea_sync.sh create mode 100644 jconsole.desktop.in create mode 100644 nss.cfg.in create mode 100644 rh1648249-add_commented_out_nss_cfg_provider_to_java_security.patch create mode 100644 tapsets-icedtea-3.15.0.tar.xz diff --git a/icedtea_sync.sh b/icedtea_sync.sh new file mode 100755 index 0000000..c3fd5e6 --- /dev/null +++ b/icedtea_sync.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# Copyright (C) 2019 Red Hat, Inc. +# Written by Andrew John Hughes . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +ICEDTEA_VERSION=3.15.0 +ICEDTEA_URL=https://icedtea.classpath.org/download/source +ICEDTEA_SIGNING_KEY=CFDA0F9B35964222 + +set -e + +if test "x${WGET}" = "x"; then + WGET=$(which wget); + if test "x${WGET}" = "x"; then + echo "wget not found"; + exit 1; + fi +fi + +if test "x${CHECKSUM}" = "x"; then + CHECKSUM=$(which sha256sum) + if test "x${CHECKSUM}" = "x"; then + echo "sha256sum not found"; + exit 2; + fi +fi + +if test "x${PGP}" = "x"; then + PGP=$(which gpg) + if test "x${PGP}" = "x"; then + echo "gpg not found"; + exit 3; + fi +fi + +if test "x${TAR}" = "x"; then + TAR=$(which tar) + if test "x${TAR}" = "x"; then + echo "tar not found"; + exit 4; + fi +fi + +echo "Dependencies:"; +echo -e "\tWGET: ${WGET}"; +echo -e "\tCHECKSUM: ${CHECKSUM}"; +echo -e "\tPGP: ${PGP}\n"; +echo -e "\tTAR: ${TAR}\n"; + +echo "Checking for IcedTea signing key ${ICEDTEA_SIGNING_KEY}..."; +if ! gpg --list-keys ${ICEDTEA_SIGNING_KEY}; then + echo "IcedTea signing key ${ICEDTEA_SIGNING_KEY} not installed."; + exit 5; +fi + +echo "Downloading IcedTea release tarball..."; +${WGET} -v ${ICEDTEA_URL}/icedtea-${ICEDTEA_VERSION}.tar.xz +echo "Downloading IcedTea tarball signature..."; +${WGET} -v ${ICEDTEA_URL}/icedtea-${ICEDTEA_VERSION}.tar.xz.sig +echo "Downloading IcedTea tarball checksums..."; +${WGET} -v ${ICEDTEA_URL}/icedtea-${ICEDTEA_VERSION}.sha256 + +echo "Verifying checksums..."; +${CHECKSUM} --check --ignore-missing icedtea-${ICEDTEA_VERSION}.sha256 + +echo "Checking signature..."; +${PGP} --verify icedtea-${ICEDTEA_VERSION}.tar.xz.sig + +echo "Extracting files..."; +${TAR} xJf icedtea-${ICEDTEA_VERSION}.tar.xz \ + icedtea-${ICEDTEA_VERSION}/tapset \ + icedtea-${ICEDTEA_VERSION}/jconsole.desktop.in + +echo "Replacing desktop files..."; +mv -v icedtea-${ICEDTEA_VERSION}/jconsole.desktop.in . + +echo "Creating new tapset tarball..."; +mv -v icedtea-${ICEDTEA_VERSION} openjdk +${TAR} cJf tapsets-icedtea-${ICEDTEA_VERSION}.tar.xz openjdk + +rm -rvf openjdk +rm -vf icedtea-${ICEDTEA_VERSION}.tar.xz +rm -vf icedtea-${ICEDTEA_VERSION}.tar.xz.sig +rm -vf icedtea-${ICEDTEA_VERSION}.sha256 diff --git a/java-11-openjdk.spec b/java-11-openjdk.spec index 2b70304..2c2ce21 100644 --- a/java-11-openjdk.spec +++ b/java-11-openjdk.spec @@ -22,7 +22,10 @@ # Enable release builds by default on relevant arches. %bcond_without release -%define _unpackaged_files_terminate_build 0 +# The -g flag says to use strip -g instead of full strip on DSOs or EXEs. +# This fixes detailed NMT and other tools which need minimal debug info. +# See: https://bugzilla.redhat.com/show_bug.cgi?id=1520879 +%global _find_debuginfo_opts -g # note: parametrized macros are order-sensitive (unlike not-parametrized) even with normal macros # also necessary when passing it as parameter to other macros. If not macro, then it is considered a switch @@ -50,28 +53,14 @@ %global build_loop1 %{nil} %endif -%global aarch64 aarch64 arm64 armv8 -# we need to distinguish between big and little endian PPC64 -%global ppc64le ppc64le -%global ppc64be ppc64 ppc64p7 -%global multilib_arches %{power64} sparc64 x86_64 -%global jit_arches %{ix86} x86_64 sparcv9 sparc64 %{aarch64} %{power64} %{arm} s390x -%global aot_arches x86_64 %{aarch64} +%global aarch64 aarch64 # By default, we build a debug build during main build on JIT architectures %if %{with slowdebug} -%ifarch %{jit_arches} -%ifnarch %{arm} %global include_debug_build 1 %else %global include_debug_build 0 %endif -%else -%global include_debug_build 0 -%endif -%else -%global include_debug_build 0 -%endif %if %{include_debug_build} %global build_loop2 %{debug_suffix} @@ -85,18 +74,9 @@ # is expected in one single case at the end of the build %global rev_build_loop %{build_loop2} %{build_loop1} -%ifarch %{jit_arches} -%global bootstrap_build 1 -%else -%global bootstrap_build 1 -%endif - -%if %{bootstrap_build} -%global targets bootcycle-images all docs -%else -%global targets all docs -%endif - +%global release_targets images docs-zip +# No docs nor bootcycle for debug builds +%global debug_targets images # Filter out flags from the optflags macro that cause problems with the OpenJDK build # We filter out -O flags so that the optimization of HotSpot is not lowered from O3 to O2 @@ -107,10 +87,11 @@ %global ourcppflags %(echo %ourflags | sed -e 's|-fexceptions||') %global ourldflags %{__global_ldflags} -%global _privatelibs libsplashscreen[.]so.*|libawt_xawt[.]so.*|libjli[.]so.*|libattach[.]so.*|libawt[.]so.*|libextnet[.]so.*|libawt_headless[.]so.*|libdt_socket[.]so.*|libfontmanager[.]so.*|libinstrument[.]so.*|libj2gss[.]so.*|libj2pcsc[.]so.*|libj2pkcs11[.]so.*|libjaas[.]so.*|libjavajpeg[.]so.*|libjdwp[.]so.*|libjimage[.]so.*|libjsound[.]so.*|liblcms[.]so.*|libmanagement[.]so.*|libmanagement_agent[.]so.*|libmanagement_ext[.]so.*|libmlib_image[.]so.*|libnet[.]so.*|libnio[.]so.*|libprefs[.]so.*|librmi[.]so.*|libsaproc[.]so.*|libsctp[.]so.*|libsunec[.]so.*|libunpack[.]so.*|libzip[.]so.* - -%global __provides_exclude ^(%{_privatelibs})$ -%global __requires_exclude ^(%{_privatelibs})$ +# With disabled nss is NSS deactivated, so NSS_LIBDIR can contain the wrong path +# the initialization must be here. Later the pkg-config have buggy behavior +# looks like openjdk RPM specific bug +# Always set this so the nss.cfg file is not broken +%global NSS_LIBDIR %(pkg-config --variable=libdir nss) # In some cases, the arch used by the JDK does # not match _arch. @@ -119,56 +100,18 @@ %ifarch x86_64 %global archinstall amd64 %endif -%ifarch ppc -%global archinstall ppc -%endif -%ifarch %{ppc64be} -%global archinstall ppc64 -%endif -%ifarch %{ppc64le} -%global archinstall ppc64le -%endif -%ifarch %{ix86} -%global archinstall i686 -%endif -%ifarch ia64 -%global archinstall ia64 -%endif -%ifarch s390 -%global archinstall s390 -%endif -%ifarch s390x -%global archinstall s390x -%endif -%ifarch %{arm} -%global archinstall arm -%endif %ifarch %{aarch64} %global archinstall aarch64 %endif -# 32 bit sparc, optimized for v9 -%ifarch sparcv9 -%global archinstall sparc -%endif -# 64 bit sparc -%ifarch sparc64 -%global archinstall sparcv9 -%endif -%ifnarch %{jit_arches} -%global archinstall %{_arch} -%endif - - -%ifarch %{jit_arches} -%global with_systemtap 0 -%else -%global with_systemtap 0 -%endif +%global with_systemtap 1 # New Version-String scheme-style defines %global majorver 11 +# Define IcedTea version used for SystemTap tapsets and desktop file +%global icedteaver 3.15.0 + # Standard JPackage naming and versioning defines %global origin openjdk %global origin_nice OpenJDK @@ -207,7 +150,6 @@ %global rpm_state_dir %{_localstatedir}/lib/rpm-state/ -%if %{with_systemtap} # Where to install systemtap tapset (links) # We would like these to be in a package specific sub-dir, # but currently systemtap doesn't support that, so we have to @@ -219,7 +161,6 @@ %global tapsetroot /usr/share/systemtap %global tapsetdirttapset %{tapsetroot}/tapset/ %global tapsetdir %{tapsetdirttapset}/%{_build_cpu} -%endif # not-duplicated scriptlets for normal/debug packages %global update_desktop_icons /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : @@ -233,12 +174,8 @@ exit 0 %define post_headless() %{expand: -%ifarch %{jit_arches} # MetaspaceShared::generate_vtable_methods not implemented for PPC JIT -%ifnarch %{ppc64le} %{jrebindir -- %{?1}}/java -Xshare:dump >/dev/null 2>/dev/null -%endif -%endif PRIORITY=%{priority} if [ "%{?1}" == %{debug_suffix} ]; then @@ -323,9 +260,7 @@ ext=.gz alternatives \\ --install %{_bindir}/javac javac %{sdkbindir -- %{?1}}/javac $PRIORITY --family %{name}.%{_arch} \\ --slave %{_jvmdir}/java java_sdk %{_jvmdir}/%{sdkdir -- %{?1}} \\ -%ifarch %{aot_arches} --slave %{_bindir}/jaotc jaotc %{sdkbindir -- %{?1}}/jaotc \\ -%endif --slave %{_bindir}/jlink jlink %{sdkbindir -- %{?1}}/jlink \\ --slave %{_bindir}/jmod jmod %{sdkbindir -- %{?1}}/jmod \\ --slave %{_bindir}/jhsdb jhsdb %{sdkbindir -- %{?1}}/jhsdb \\ @@ -338,6 +273,7 @@ alternatives \\ --slave %{_bindir}/jdb jdb %{sdkbindir -- %{?1}}/jdb \\ --slave %{_bindir}/jdeps jdeps %{sdkbindir -- %{?1}}/jdeps \\ --slave %{_bindir}/jdeprscan jdeprscan %{sdkbindir -- %{?1}}/jdeprscan \\ + --slave %{_bindir}/jfr jfr %{sdkbindir -- %{?1}}/jfr \\ --slave %{_bindir}/jimage jimage %{sdkbindir -- %{?1}}/jimage \\ --slave %{_bindir}/jinfo jinfo %{sdkbindir -- %{?1}}/jinfo \\ --slave %{_bindir}/jmap jmap %{sdkbindir -- %{?1}}/jmap \\ @@ -478,10 +414,9 @@ exit 0 %{_jvmdir}/%{sdkdir -- %{?1}}/bin/rmiregistry %{_jvmdir}/%{sdkdir -- %{?1}}/bin/unpack200 %dir %{_jvmdir}/%{sdkdir -- %{?1}}/lib -%ifarch %{jit_arches} %{_jvmdir}/%{sdkdir -- %{?1}}/lib/classlist -%endif %{_jvmdir}/%{sdkdir -- %{?1}}/lib/jexec +%{_jvmdir}/%{sdkdir -- %{?1}}/lib/jspawnhelper %{_jvmdir}/%{sdkdir -- %{?1}}/lib/jrt-fs.jar %{_jvmdir}/%{sdkdir -- %{?1}}/lib/modules %{_jvmdir}/%{sdkdir -- %{?1}}/lib/psfont.properties.ja @@ -516,12 +451,7 @@ exit 0 %{_jvmdir}/%{sdkdir -- %{?1}}/lib/libnio.so %{_jvmdir}/%{sdkdir -- %{?1}}/lib/libprefs.so %{_jvmdir}/%{sdkdir -- %{?1}}/lib/librmi.so -# Zero and S390x don't have SA -%ifarch %{jit_arches} -%ifnarch s390x %{_jvmdir}/%{sdkdir -- %{?1}}/lib/libsaproc.so -%endif -%endif %{_jvmdir}/%{sdkdir -- %{?1}}/lib/libsctp.so %{_jvmdir}/%{sdkdir -- %{?1}}/lib/libsunec.so %{_jvmdir}/%{sdkdir -- %{?1}}/lib/libunpack.so @@ -538,13 +468,8 @@ exit 0 %{_mandir}/man1/rmiregistry-%{uniquesuffix -- %{?1}}.1* %{_mandir}/man1/unpack200-%{uniquesuffix -- %{?1}}.1* %{_jvmdir}/%{sdkdir -- %{?1}}/lib/server/ -%{_jvmdir}/%{sdkdir -- %{?1}}/lib/client/ -%ifarch %{jit_arches} -%ifnarch %{power64} %attr(444, root, root) %ghost %{_jvmdir}/%{sdkdir -- %{?1}}/lib/server/classes.jsa %attr(444, root, root) %ghost %{_jvmdir}/%{sdkdir -- %{?1}}/lib/client/classes.jsa -%endif -%endif %dir %{etcjavasubdir} %dir %{etcjavadir -- %{?1}} %dir %{etcjavadir -- %{?1}}/lib @@ -568,6 +493,7 @@ exit 0 %config(noreplace) %{etcjavadir -- %{?1}}/conf/security/java.policy %config(noreplace) %{etcjavadir -- %{?1}}/conf/security/java.security %config(noreplace) %{etcjavadir -- %{?1}}/conf/logging.properties +%config(noreplace) %{etcjavadir -- %{?1}}/conf/security/nss.cfg %config(noreplace) %{etcjavadir -- %{?1}}/conf/management/jmxremote.access # this is conifg template, thus not config-noreplace %config %{etcjavadir -- %{?1}}/conf/management/jmxremote.password.template @@ -590,13 +516,9 @@ exit 0 %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jdb %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jdeps %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jdeprscan +%{_jvmdir}/%{sdkdir -- %{?1}}/bin/jfr %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jimage -# Zero and S390x don't have SA -%ifarch %{jit_arches} -%ifnarch s390x %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jhsdb -%endif -%endif %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jinfo %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jlink %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jmap @@ -609,14 +531,11 @@ exit 0 %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jstatd %{_jvmdir}/%{sdkdir -- %{?1}}/bin/rmic %{_jvmdir}/%{sdkdir -- %{?1}}/bin/serialver -%ifarch %{aot_arches} %{_jvmdir}/%{sdkdir -- %{?1}}/bin/jaotc -%endif %{_jvmdir}/%{sdkdir -- %{?1}}/include %{_jvmdir}/%{sdkdir -- %{?1}}/lib/ct.sym -%if %{with_systemtap} %{_jvmdir}/%{sdkdir -- %{?1}}/tapset -%endif +%{_datadir}/applications/*jconsole%{?1}.desktop %{_mandir}/man1/jar-%{uniquesuffix -- %{?1}}.1* %{_mandir}/man1/jarsigner-%{uniquesuffix -- %{?1}}.1* %{_mandir}/man1/javac-%{uniquesuffix -- %{?1}}.1* @@ -635,6 +554,10 @@ exit 0 %{_mandir}/man1/jstatd-%{uniquesuffix -- %{?1}}.1* %{_mandir}/man1/rmic-%{uniquesuffix -- %{?1}}.1* %{_mandir}/man1/serialver-%{uniquesuffix -- %{?1}}.1* +%dir %{tapsetroot} +%dir %{tapsetdirttapset} +%dir %{tapsetdir} +%{tapsetdir}/*%{_arch}%{?1}.stp } %define files_jmods() %{expand: @@ -796,12 +719,9 @@ Provides: java-%{javaver}-src%{?1} = %{epoch}:%{version}-%{release} Provides: java-%{javaver}-%{origin}-src%{?1} = %{epoch}:%{version}-%{release} } -# Prevent brp-java-repack-jars from being run -%global __jar_repack 0 - Name: java-%{javaver}-%{origin} Version: %{fulljavaver} -Release: 3 +Release: 4 # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons # and this change was brought into RHEL-4. java-1.5.0-ibm packages # also included the epoch in their virtual provides. This created a @@ -836,11 +756,25 @@ URL: http://openjdk.java.net/ Source0: openjdk-%{fulljavaver}-ga.tar.xz +# Use 'icedtea_sync.sh' to update the following +# They are based on code contained in the IcedTea project (3.x). +# Systemtap tapsets. Zipped up to keep it small. +Source8: tapsets-icedtea-%{icedteaver}.tar.xz + +# Desktop files. Adapted from IcedTea +Source9: jconsole.desktop.in + +# nss configuration file +Source11: nss.cfg.in + ############################################ # # RPM/distribution specific patches # ############################################ +# NSS via SunPKCS11 Provider (disabled comment +# due to memory leak). +Patch1000: rh1648249-add_commented_out_nss_cfg_provider_to_java_security.patch ############################################# # @@ -869,14 +803,12 @@ Patch25: 8212933-Thread-SMR-requesting-a-VM-operation-whilst-.patch Patch26: ZGC-aarch64-fix-system-call-number-of-memfd_create.patch BuildRequires: autoconf -BuildRequires: automake BuildRequires: alsa-lib-devel BuildRequires: binutils BuildRequires: cups-devel BuildRequires: desktop-file-utils # elfutils only are OK for build without AOT BuildRequires: elfutils-devel -BuildRequires: fontconfig BuildRequires: freetype-devel BuildRequires: giflib-devel BuildRequires: gcc-c++ @@ -888,27 +820,21 @@ BuildRequires: libpng-devel BuildRequires: libxslt BuildRequires: libX11-devel BuildRequires: libXi-devel -BuildRequires: libXinerama-devel BuildRequires: libXt-devel BuildRequires: libXtst-devel +# Requirements for setting up the nss.cfg +BuildRequires: nss-devel BuildRequires: pkgconfig BuildRequires: xorg-x11-proto-devel BuildRequires: zip -BuildRequires: javapackages-filesystem BuildRequires: java-11-openjdk-devel -# Zero-assembler build requirement -%ifnarch %{jit_arches} -BuildRequires: libffi-devel -%endif BuildRequires: tzdata-java >= 2015d # Earlier versions have a bug in tree vectorization on PPC BuildRequires: gcc >= 4.8.3-8 # Build requirements for SunEC system NSS support BuildRequires: nss-softokn-freebl-devel >= 3.16.1 -%if %{with_systemtap} BuildRequires: systemtap-sdt-devel -%endif # this is always built, also during debug-only build # when it is built in debug-only this package is just placeholder @@ -1139,6 +1065,56 @@ pushd %{top_level_dir_name} %patch24 -p1 %patch25 -p1 %patch26 -p1 +popd # openjdk + +%patch1000 + +# Extract systemtap tapsets +%if %{with_systemtap} +tar --strip-components=1 -x -I xz -f %{SOURCE8} +%if %{include_debug_build} +cp -r tapset tapset%{debug_suffix} +%endif + + +for suffix in %{build_loop} ; do + for file in "tapset"$suffix/*.in; do + OUTPUT_FILE=`echo $file | sed -e "s:\.stp\.in$:-%{version}-%{release}.%{_arch}.stp:g"` + sed -e "s:@ABS_SERVER_LIBJVM_SO@:%{_jvmdir}/%{sdkdir -- $suffix}/lib/server/libjvm.so:g" $file > $file.1 +# TODO find out which architectures other than i686 have a client vm +%ifarch %{ix86} + sed -e "s:@ABS_CLIENT_LIBJVM_SO@:%{_jvmdir}/%{sdkdir -- $suffix}/lib/client/libjvm.so:g" $file.1 > $OUTPUT_FILE +%else + sed -e "/@ABS_CLIENT_LIBJVM_SO@/d" $file.1 > $OUTPUT_FILE +%endif + sed -i -e "s:@ABS_JAVA_HOME_DIR@:%{_jvmdir}/%{sdkdir -- $suffix}:g" $OUTPUT_FILE + sed -i -e "s:@INSTALL_ARCH_DIR@:%{archinstall}:g" $OUTPUT_FILE + sed -i -e "s:@prefix@:%{_jvmdir}/%{sdkdir -- $suffix}/:g" $OUTPUT_FILE + done +done +# systemtap tapsets ends +%endif + +# Prepare desktop files +# The _X_ syntax indicates variables that are replaced by make upstream +# The @X@ syntax indicates variables that are replaced by configure upstream +for suffix in %{build_loop} ; do +for file in %{SOURCE9}; do + FILE=`basename $file | sed -e s:\.in$::g` + EXT="${FILE##*.}" + NAME="${FILE%.*}" + OUTPUT_FILE=$NAME$suffix.$EXT + sed -e "s:_SDKBINDIR_:%{sdkbindir -- $suffix}:g" $file > $OUTPUT_FILE + sed -i -e "s:@target_cpu@:%{_arch}:g" $OUTPUT_FILE + sed -i -e "s:@OPENJDK_VER@:%{version}-%{release}.%{_arch}$suffix:g" $OUTPUT_FILE + sed -i -e "s:@JAVA_VER@:%{javaver}:g" $OUTPUT_FILE + sed -i -e "s:@JAVA_VENDOR@:%{origin}:g" $OUTPUT_FILE +done +done + +# Setup nss.cfg +sed -e "s:@NSS_LIBDIR@:%{NSS_LIBDIR}:g" %{SOURCE11} > nss.cfg + %build # How many CPU's do we have? @@ -1149,12 +1125,9 @@ export NUM_PROC=${NUM_PROC:-1} [ ${NUM_PROC} -gt %{?_smp_ncpus_max} ] && export NUM_PROC=%{?_smp_ncpus_max} %endif -%ifarch s390x sparc64 alpha %{power64} %{aarch64} +%ifarch %{aarch64} export ARCH_DATA_MODEL=64 %endif -%ifarch alpha -export CFLAGS="$CFLAGS -mieee" -%endif # We use ourcppflags because the OpenJDK build seems to # pass EXTRA_CFLAGS to the HotSpot C++ compiler... @@ -1162,10 +1135,6 @@ export CFLAGS="$CFLAGS -mieee" EXTRA_CFLAGS="%ourcppflags -Wno-error -fno-delete-null-pointer-checks -fno-lifetime-dse" EXTRA_CPP_FLAGS="%ourcppflags -std=gnu++98 -Wno-error -fno-delete-null-pointer-checks -fno-lifetime-dse" -%ifarch %{power64} ppc -# fix rpmlint warnings -EXTRA_CFLAGS="$EXTRA_CFLAGS -fno-strict-aliasing" -%endif export EXTRA_CFLAGS for suffix in %{build_loop} ; do @@ -1183,12 +1152,6 @@ mkdir -p %{buildoutputdir -- $suffix} pushd %{buildoutputdir -- $suffix} bash ../configure \ -%ifnarch %{jit_arches} - --with-jvm-variants=zero \ -%endif -%ifarch %{ppc64le} - --with-jobs=1 \ -%endif --with-version-pre="" \ --with-version-opt="" \ --with-version-build=%{buildver} \ @@ -1211,14 +1174,19 @@ bash ../configure \ --disable-warnings-as-errors \ --with-boot-jdk-jvmargs=-XX:-UsePerfData +# Debug builds don't need same targets as release for +# build speed-up +maketargets="%{release_targets}" +if echo $debugbuild | grep -q "debug" ; then + maketargets="%{debug_targets}" +fi + make \ JAVAC_FLAGS=-g \ LOG=trace \ WARNINGS_ARE_ERRORS="-Wno-error" \ CFLAGS_WARNINGS_ARE_ERRORS="-Wno-error" \ - %{targets} || ( pwd; find $top_dir_abs_path -name "hs_err_pid*.log" | xargs cat && false ) - -make docs-zip + $maketargets || ( pwd; find $top_dir_abs_path -name "hs_err_pid*.log" | xargs cat && false ) # the build (erroneously) removes read permissions from some jars # this is a regression in OpenJDK 7 (our compiler): @@ -1234,6 +1202,9 @@ popd >& /dev/null # Install nss.cfg right away as we will be using the JRE above export JAVA_HOME=$(pwd)/%{buildoutputdir -- $suffix}/images/%{jdkimage} +# Install nss.cfg right away as we will be using the JRE above +install -m 644 nss.cfg $JAVA_HOME/conf/security/ + # Use system-wide tzdata rm $JAVA_HOME/lib/tzdb.dat ln -s %{_datadir}/javazi-1.8/tzdb.dat $JAVA_HOME/lib/tzdb.dat @@ -1335,14 +1306,8 @@ mkdir -p $RPM_BUILD_ROOT%{_jvmdir} cp -a %{buildoutputdir -- $suffix}/images/%{jdkimage} \ $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir -- $suffix} -# Install jsa directories so we can owe them -mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir -- $suffix}/lib/%{archinstall}/server/ -mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir -- $suffix}/lib/%{archinstall}/client/ -mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir -- $suffix}/lib/client/ || true ; # sometimes is here, sometimes not, ifout it or || true it out - pushd %{buildoutputdir $suffix}/images/%{jdkimage} -%if %{with_systemtap} # Install systemtap support files install -dm 755 $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir -- $suffix}/tapset # note, that uniquesuffix is in BUILD dir in this case @@ -1355,7 +1320,6 @@ pushd %{buildoutputdir $suffix}/images/%{jdkimage} targetName=`echo $name | sed "s/.stp/$suffix.stp/"` ln -sf %{_jvmdir}/%{sdkdir -- $suffix}/tapset/$name $RPM_BUILD_ROOT%{tapsetdir}/$targetName done -%endif # Remove empty cacerts database rm -f $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir -- $suffix}/lib/security/cacerts @@ -1385,11 +1349,12 @@ pushd %{buildoutputdir $suffix}/images/%{jdkimage} popd - -# Install Javadoc documentation -install -d -m 755 $RPM_BUILD_ROOT%{_javadocdir} -cp -a %{buildoutputdir -- $suffix}/images/docs $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir -- $suffix} -cp -a %{buildoutputdir -- $suffix}/bundles/jdk-%{majorver}.0.%{updatever}+%{buildver}-docs.zip $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir -- $suffix}.zip +if ! echo $suffix | grep -q "debug" ; then + # Install Javadoc documentation + install -d -m 755 $RPM_BUILD_ROOT%{_javadocdir} + cp -a %{buildoutputdir -- $suffix}/images/docs $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir -- $suffix} + cp -a %{buildoutputdir -- $suffix}/bundles/jdk-%{majorver}.0.%{updatever}+%{buildver}-docs.zip $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir -- $suffix}.zip +fi # Install icons and menu entries for s in 16 24 32 48 ; do @@ -1398,6 +1363,13 @@ for s in 16 24 32 48 ; do $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${s}x${s}/apps/java-%{javaver}-%{origin}.png done +# Install desktop files +install -d -m 755 $RPM_BUILD_ROOT%{_datadir}/{applications,pixmaps} +for e in jconsole$suffix ; do + desktop-file-install --vendor=%{uniquesuffix -- $suffix} --mode=644 \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications $e.desktop +done + # Install /etc/.java/.systemPrefs/ directory mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/.java/.systemPrefs @@ -1608,6 +1580,9 @@ require "copy_jdk_configs.lua" %changelog +* Thu May 25 2020 Noah - 1:11.0.7.10-4 +- Support nss, systemtap and desktop + * Thu May 21 2020 jdkboy - 1:11.0.7.10-3 - Update to 11.0.7+10 (GA) diff --git a/jconsole.desktop.in b/jconsole.desktop.in new file mode 100644 index 0000000..8a3b04d --- /dev/null +++ b/jconsole.desktop.in @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=OpenJDK @JAVA_VER@ for @target_cpu@ Monitoring & Management Console (@OPENJDK_VER@) +Comment=Monitor and manage OpenJDK applications +Exec=_SDKBINDIR_/jconsole +Icon=java-@JAVA_VER@-@JAVA_VENDOR@ +Terminal=false +Type=Application +StartupWMClass=sun-tools-jconsole-JConsole +Categories=Development;Profiling;Java; +Version=1.0 diff --git a/nss.cfg.in b/nss.cfg.in new file mode 100644 index 0000000..377a39c --- /dev/null +++ b/nss.cfg.in @@ -0,0 +1,5 @@ +name = NSS +nssLibraryDirectory = @NSS_LIBDIR@ +nssDbMode = noDb +attributes = compatibility +handleStartupErrors = ignoreMultipleInitialisation diff --git a/rh1648249-add_commented_out_nss_cfg_provider_to_java_security.patch b/rh1648249-add_commented_out_nss_cfg_provider_to_java_security.patch new file mode 100644 index 0000000..1b92ddc --- /dev/null +++ b/rh1648249-add_commented_out_nss_cfg_provider_to_java_security.patch @@ -0,0 +1,11 @@ +diff -r 5b86f66575b7 src/share/lib/security/java.security-linux +--- openjdk/src/java.base/share/conf/security/java.security Tue May 16 13:29:05 2017 -0700 ++++ openjdk/src/java.base/share/conf/security/java.security Tue Jun 06 14:05:12 2017 +0200 +@@ -83,6 +83,7 @@ + #ifndef solaris + security.provider.tbd=SunPKCS11 + #endif ++#security.provider.tbd=SunPKCS11 ${java.home}/lib/security/nss.cfg + + # + # A list of preferred providers for specific algorithms. These providers will diff --git a/tapsets-icedtea-3.15.0.tar.xz b/tapsets-icedtea-3.15.0.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..a1caa915d63db0a14120fae8afc087ebc8d8f5bd GIT binary patch literal 23036 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 PvBYQl0ssI200dcDX-vSE literal 0 HcmV?d00001 -- Gitee