# Maintainer: Guillaume ALAUX # ALARM: Kevin Mihelich # - drop pandoc makedepend # - specify ARM _JARCH's # - use zero on ARMv5, adjusted _imgdir # - don't build docs, removed docs package; takes a day to build highmem=1 # 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') _majorver=9 _minorver=0 _securityver=4 _updatever=11 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') 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) sha256sums=('bd8f7d0a945cad70f6321300d1c67e1977104e5e55545cfa2bbac8dd1dc01af9' '27092712fa9058f5242e39cee1e7b094b63af14ff373ba432135c0e2ba2fd9cc' '50bbfdb27e2ec32cff994dfe2f5e0fca4af003c653ff64c894966ac1ee9864c4' '3a9445d9a7d771276095394d7fe5dbdb904c1f32892eb15b96033d51ab856e18' 'b708aefda1b4ad5f81740e76fc1467cd4f0faaab0c5e73febb46d96ac8f883af' 'c2c74b04638a98995397bbbd1e0e1f2a709d71ed3fe5188d1fa13bd425604e3d' '9e9f87c56af02682eb9426bf94487376090fcb431390e87cbf3a29036fc5cad8' 'c64c7c51fcca7c8f1dc4705842c1f2d8ad3479b78aa45b37f1dd6cd2ac39dd73' '85d32321fb59a89e4f9ab320060597d4ca9d5e23b995c61549a48b41ac908a67' 'bf197deb003879ed01adc6973a2430a41574f638667a5ecfbb1aad1403897ddc' '9394de47b5c38826ab837145816667d96b697998bafec5dd132d39d4846ac70e') case "$CARCH" in x86_64) _JARCH='x86_64';; i686) _JARCH='x86';; arm*) _JARCH='arm';; aarch64) _JARCH='aarch64';; esac _jdkdir=jdk${_majorver}u-$_hg_tag if [[ $CARCH == "arm" ]]; then _imgdir=$_jdkdir/build/linux-$_JARCH-normal-zero-release/images else _imgdir=$_jdkdir/build/linux-$_JARCH-normal-server-release/images fi _nonheadless=(lib/libawt_xawt.{so,diz} lib/libjawt.{so,diz} lib/libjsoundalsa.{so,diz} lib/libsplashscreen.{so,diz}) prepare() { cd $_jdkdir for subrepo in corba hotspot jdk jaxws jaxp langtools nashorn do ln -s ../$subrepo-$_hg_tag $subrepo done } 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 _CFLAGS=$CFLAGS _CXXFLAGS=$CXXFLAGS _LDFLAGS=$LDFLAGS if [[ $CARCH = i686 ]]; 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 # 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 if [[ $CARCH == "arm" ]]; then _variants='zero' else _variants='server' fi 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 \ --with-jvm-variants=$_variants \ $NUM_PROC_OPT #--disable-javac-server make images # 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" }