# Maintainer: Guillaume ALAUX # TODO add test, see about packaging jtreg and using it here # TODO see about building with OpenJDK9 # TODO add javazi # TODO when IcedTea provides it, package icedtea-web and add it as optdepends # TODO package OpenJFX for OpenJDK9 and add it as optdepends ## EXPLORATIONS # TODO extract a jmods package from jdk9-openjdk? # TODO extract a jdk-headless package? # Now that `jconsole` and `policytool` belong to JDK, one could extract # these to their own package. # FYI, `jdk8-openjdk` already depends on `jre8-openjdk` and not `jre8-openjdk-headless` pkgname=('jre9-openjdk-headless' 'jre9-openjdk' 'jdk9-openjdk' 'openjdk9-src' 'openjdk9-doc') _majorver=9 _minorver=0 _securityver=4 _updatever=12 pkgbase=java$_majorver-openjdk pkgver=$_majorver.$_minorver.$_securityver.u$_updatever _hg_tag="jdk-$_majorver.$_minorver.$_securityver+$_updatever" _repo_ver=jdk$_java_ver.$_hg_tag pkgrel=1 _pkg_full_ver=$pkgver-$pkgrel arch=('x86_64' i486 i686 pentium4) url='http://openjdk.java.net/' license=('custom') makedepends=('jdk8-openjdk' 'cpio' 'unzip' 'zip' 'libelf' # required for AOT 'libcups' 'libx11' 'libxrender' 'libxtst' 'libxt' # 'libxext' already pulled by libxtst 'alsa-lib' 'graphviz') # to generate full docs (as said in output of configure) # 'freetype2' already pulled # 'libjpeg-turbo' 'giflib' 'libpng' 'lcms2' already pulled # 'bash' OpenJDK scripts are explicitly Bash checkdepends=() _url_src=http://hg.openjdk.java.net/jdk-updates/jdk9u source=("jdk9u-${_repo_ver}.tar.gz::$_url_src/archive/$_hg_tag.tar.gz" "corba-${_repo_ver}.tar.gz::$_url_src/corba/archive/$_hg_tag.tar.gz" "hotspot-${_repo_ver}.tar.gz::$_url_src/hotspot/archive/$_hg_tag.tar.gz" "jaxp-${_repo_ver}.tar.gz::$_url_src/jaxp/archive/$_hg_tag.tar.gz" "jaxws-${_repo_ver}.tar.gz::$_url_src/jaxws/archive/$_hg_tag.tar.gz" "jdk-${_repo_ver}.tar.gz::$_url_src/jdk/archive/$_hg_tag.tar.gz" "langtools-${_repo_ver}.tar.gz::$_url_src/langtools/archive/$_hg_tag.tar.gz" "nashorn-${_repo_ver}.tar.gz::$_url_src/nashorn/archive/$_hg_tag.tar.gz" freedesktop-java.desktop freedesktop-jconsole.desktop freedesktop-policytool.desktop jdk9u-jdk-9.0.4+12-make43.patch jdk-jdk-9.0.4+12-gcc10-default-no-fcommon.patch hotspot-jdk-9.0.4+12-bitmap-segv.patch hotspot-jdk-9.0.4+12-c1.patch ) sha256sums=('508ea8854da2260a5b5bf226533d1efdacc70df5b2061a8dc02ebfcee7cf161a' '13db0d5039757d67aa10f972a96019fad917af3080ed65f37fdf55a17f2ba890' '7ba43e5f328a4c83ac7cd7097db6779ab40c8c5689a9139cccd363419d6bad3c' 'b55350eef3dc9fc191373db4975b53f3bbed387e8634b37694db98c1e313da1a' 'f649a8dcdb42122212773b181ad8d2d7e8e7d1dd2e6b3517e0e46018d8d52ad4' '708cc3e5613a7341b0dad477d7fcfa1f70d38e2ac14484c1f13ff9f19a2ca998' 'b112d33f6e74387e34b0cd6f7da892538b67d70e0075d918f7e68e732cb6b89b' '0732a1c0379a5e0849c419e325d78e5636cc59a6122713e9f701c2f0f7a7d57c' '85d32321fb59a89e4f9ab320060597d4ca9d5e23b995c61549a48b41ac908a67' 'bf197deb003879ed01adc6973a2430a41574f638667a5ecfbb1aad1403897ddc' '9394de47b5c38826ab837145816667d96b697998bafec5dd132d39d4846ac70e' '4935390ee360b62dd059e8163ef598441c41471e79c76e212b01cdb32fe0e3b9' 'dccab9e9a30d838dcb76e799443c914f48677aa7a3c4e3549bb4190ffcbbd67e' 'becfe6b7dd08e4572f1ce62e1f1d37304b5e52ad6baa0be0e37f323249f2a003' 'c9b79eb1af2efd57c5e639b37774e12b2026a474d210a20f770e304e57a63c6b' ) case "$CARCH" in x86_64) _JARCH='x86_64';; i486|i686|pentium4) _JARCH='x86';; esac _jvmdir=/usr/lib/jvm/java-$_majorver-openjdk _jdkdir=jdk${_majorver}u-$_hg_tag _imgdir=$_jdkdir/build/linux-$_JARCH-normal-server-release/images _imgdir="${_imgdir//--/-${_JARCH}-}" _nonheadless=(lib/libawt_xawt.{so,diz} lib/libjawt.{so,diz} lib/libjsoundalsa.{so,diz} lib/libsplashscreen.{so,diz}) #_nonheadless=( # "${_nonheadless[@]/\/\///${_JARCH}/}" #) prepare() { cd $_jdkdir for subrepo in corba hotspot jdk jaxws jaxp langtools nashorn do ln -s ../$subrepo-$_hg_tag $subrepo done # see https://bugs.openjdk.java.net/browse/JDK-8237879 patch -Np1 < $srcdir/jdk9u-jdk-9.0.4+12-make43.patch # some gcc 10 issues and backports of known bugs pushd jdk patch -Np1 < $srcdir/jdk-jdk-9.0.4+12-gcc10-default-no-fcommon.patch popd pushd hotspot patch -Np1 < $srcdir/hotspot-jdk-9.0.4+12-bitmap-segv.patch patch -Np1 < $srcdir/hotspot-jdk-9.0.4+12-c1.patch popd } build() { cd $_jdkdir NUM_PROC_OPT='' MAKEFLAG_J=$(echo $MAKEFLAGS | sed -En 's/.*-j([0-9]+).*/\1/p') if [ -n $MAKEFLAG_J ]; then # http://hg.openjdk.java.net/jdk9/jdk9/file/85e6cb013b98/make/InitSupport.gmk#l105 echo "Removing '-j$MAKEFLAG_J' from MAKEFLAGS to prevent build fail. Passing it directly to ./configure." export MAKEFLAGS=${MAKEFLAGS/-j$MAKEFLAG_J/} NUM_PROC_OPT="--with-num-cores=$MAKEFLAG_J" fi local _CFLAGS="${CFLAGS//-O2/-O3} ${CPPFLAGS}" local _CXXFLAGS="${CXXFLAGS//-O2/-O3} ${CPPFLAGS}" local _LDFLAGS=${LDFLAGS} if [[ $CARCH = i486 || $CARCH = i686 || $CARCH = pentium4 ]]; then echo "Removing '-fno-plt' from CFLAGS and CXXFLAGS to prevent build fail with this architecture" _CFLAGS=${CFLAGS/-fno-plt/} _CXXFLAGS=${CXXFLAGS/-fno-plt/} fi # i486-specific if [ "${CARCH}" = "i486" ]; then _JARCH=i386 _DOC_ARCH=x86 fi # pentium4-specific if [ "${CARCH}" = "pentium4" ]; then _JARCH=i386 _DOC_ARCH=x86 # force 4-byte stack alignment on SSE aptimized systems, see FS32#75 _CFLAGS+=" -mincoming-stack-boundary=2" _CXXFLAGS+=" -mincoming-stack-boundary=2" fi # CFLAGS, CXXFLAGS and LDFLAGS are ignored as shown by a warning # in the output of ./configure unless used like such: # --with-extra-cflags="$CFLAGS" # --with-extra-cxxflags="$CXXFLAGS" # --with-extra-ldflags="$LDFLAGS" # See also paragraph "Configure Control Variables from "jdk$_majorver-$_hg_tag/common/doc/building.md unset CFLAGS unset CXXFLAGS unset LDFLAGS bash configure \ --with-version-build="$_updatever" \ --with-version-pre="" \ --with-version-opt="" \ --with-stdc++lib=dynamic \ --with-extra-cflags="$_CFLAGS" \ --with-extra-cxxflags="$_CXXFLAGS" \ --with-extra-ldflags="$_LDFLAGS" \ --with-libjpeg=system \ --with-giflib=system \ --with-libpng=system \ --with-lcms=system \ --with-zlib=system \ --enable-unlimited-crypto \ --disable-warnings-as-errors \ $NUM_PROC_OPT #--disable-javac-server make images docs # https://bugs.openjdk.java.net/browse/JDK-8173610 find "../$_imgdir" -iname '*.so' -exec chmod +x {} \; } # check() { # cd "$pkgname-$pkgver" # make -k check # } package_jre9-openjdk-headless() { pkgdesc="OpenJDK Java $_majorver headless runtime environment" depends=('java-runtime-common>=3' 'ca-certificates-utils' 'nss') optdepends=('java-rhino: for some JavaScript support') provides=("java-runtime-headless=$_majorver" "java-runtime-headless-openjdk=$_majorver") backup=(etc/$pkgbase/logging.properties etc/$pkgbase/management/jmxremote.access etc/$pkgbase/management/jmxremote.password.template etc/$pkgbase/management/management.properties etc/$pkgbase/net.properties etc/$pkgbase/security/java.policy etc/$pkgbase/security/java.security etc/$pkgbase/security/policy/README.txt etc/$pkgbase/security/policy/limited/default_US_export.policy etc/$pkgbase/security/policy/limited/default_local.policy etc/$pkgbase/security/policy/limited/exempt_local.policy etc/$pkgbase/security/policy/unlimited/default_US_export.policy etc/$pkgbase/security/policy/unlimited/default_local.policy etc/$pkgbase/sound.properties) install=install_jre9-openjdk-headless.sh cd $_imgdir/jre install -d -m 755 "$pkgdir$_jvmdir" cp -a bin lib \ "$pkgdir$_jvmdir" for f in ${_nonheadless[@]}; do rm "$pkgdir$_jvmdir/$f" done cp ../jdk/release "$pkgdir$_jvmdir" cp ../jdk/lib/modules "$pkgdir$_jvmdir/lib" # Conf install -d -m 755 "$pkgdir/etc" cp -r conf "$pkgdir/etc/$pkgbase" ln -s /etc/$pkgbase "$pkgdir/$_jvmdir/conf" # Legal install -d -m 755 "$pkgdir/usr/share/licenses" cp -r legal "$pkgdir/usr/share/licenses/$pkgbase" ln -s $pkgbase "$pkgdir/usr/share/licenses/$pkgname" ln -s /usr/share/licenses/$pkgbase "$pkgdir/$_jvmdir/legal" # Man pages for f in man/man1/* man/ja/man1/*; do install -D -m 644 $f "$pkgdir/usr/share/${f/\.1/-openjdk9.1}" done ln -s /usr/share/man "$pkgdir/$_jvmdir/man" # Link JKS keystore from ca-certificates-utils rm -f "$pkgdir$_jvmdir/lib/security/cacerts" ln -sf /etc/ssl/certs/java/cacerts "$pkgdir$_jvmdir/lib/security/cacerts" find "$pkgdir$_jvmdir" -iname '*.diz' -exec rm {} \; } package_jre9-openjdk() { pkgdesc="OpenJDK Java $_majorver full runtime environment" depends=("jre$_majorver-openjdk-headless=$_pkg_full_ver") optdepends=('alsa-lib: for basic sound support' 'gtk2: for the Gtk+ 2 look and feel - desktop usage' 'gtk3: for the Gtk+ 3 look and feel - desktop usage') provides=("java-runtime=$_majorver" "java-runtime-openjdk=$_majorver") install=install_jre9-openjdk.sh cd $_imgdir/jre install -d -m 755 "$pkgdir$_jvmdir" for f in ${_nonheadless[@]}; do install -D -m 644 $f "$pkgdir$_jvmdir/$f" done # Licenses install -d -m 755 "$pkgdir/usr/share/licenses" ln -s $pkgbase "$pkgdir/usr/share/licenses/$pkgname" find "$pkgdir$_jvmdir" -iname '*.diz' -exec rm {} \; } package_jdk9-openjdk() { pkgdesc="OpenJDK Java $_majorver development kit" depends=("jre$_majorver-openjdk=$_pkg_full_ver" 'java-environment-common=3' 'hicolor-icon-theme' 'libelf') provides=("java-environment=$_majorver" "java-environment-openjdk=$_majorver") install=install_jdk9-openjdk.sh cd $_imgdir/jdk install -d -m 755 "$pkgdir$_jvmdir" cp -a bin demo include jmods lib \ "$pkgdir$_jvmdir" rm "$pkgdir$_jvmdir/lib/src.zip" # Remove files held by JRE pushd ../jre for d in bin lib; do find $d ! -type d -exec rm "$pkgdir$_jvmdir/{}" \; done popd find "$pkgdir$_jvmdir/lib" -type d -empty -delete # Conf files all belong to JRE # Legal install -d -m 755 "$pkgdir/usr/share/licenses" cp -r legal "$pkgdir/usr/share/licenses/$pkgbase" pushd ../jre/legal find . ! -type d -exec rm "$pkgdir/usr/share/licenses/$pkgbase/{}" \; popd find "$pkgdir/usr/share/licenses" -type d -empty -delete ln -s $pkgbase "$pkgdir/usr/share/licenses/$pkgname" # Man pages for f in man/man1/* man/ja/man1/*; do if [ ! -e ../jre/$f ]; then install -D -m 644 $f "$pkgdir/usr/share/${f/\.1/-openjdk$_majorver.1}" fi done # Icons for s in 16 24 32 48; do install -D -m 644 \ $srcdir/jdk-$_hg_tag/src/java.desktop/unix/classes/sun/awt/X11/java-icon$s.png \ "$pkgdir/usr/share/icons/hicolor/$sx$s/apps/$pkgbase.png" done # Desktop files for f in jconsole policytool java; do install -D -m 644 \ "$srcdir/freedesktop-$f.desktop" \ "$pkgdir/usr/share/applications/$f-$pkgbase.desktop" done find "$pkgdir$_jvmdir" -iname '*.diz' -exec rm {} \; } package_openjdk9-src() { pkgdesc="OpenJDK Java $_majorver sources" # Depends on JDK to get license files depends=("jdk$_majorver-openjdk=$_pkg_full_ver") install -D -m 644 -t "$pkgdir$_jvmdir/lib" $_imgdir/jdk/lib/src.zip install -d -m 755 "$pkgdir/usr/share/licenses" ln -s $pkgbase "$pkgdir/usr/share/licenses/$pkgname" } package_openjdk9-doc() { pkgdesc="OpenJDK Java $_majorver documentation" # Depends on JDK to get license files depends=("jdk$_majorver-openjdk=$_pkg_full_ver") install -d -m 755 "$pkgdir/usr/share/doc" cp -r $_imgdir/docs "$pkgdir/usr/share/doc/$pkgbase" install -d -m 755 "$pkgdir/usr/share/licenses" ln -s $pkgbase "$pkgdir/usr/share/licenses/$pkgname" }