diff options
author | Eric Hameleers <alien@slackware.com> | 2022-08-09 12:21:52 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2022-08-09 12:21:52 +0000 |
commit | 1a4a9fe567c96c7c6402484b0de4c8127bd26ced (patch) | |
tree | a4402d65c6fbcc7741a248193791ce2e4e64b2a4 | |
parent | db5b93a8a13cb31c54673160c58ea41a2f543765 (diff) | |
download | asb-1a4a9fe567c96c7c6402484b0de4c8127bd26ced.tar.gz asb-1a4a9fe567c96c7c6402484b0de4c8127bd26ced.tar.xz |
Initial revision
-rwxr-xr-x | openjdk11/build/openjdk11.SlackBuild | 358 |
1 files changed, 358 insertions, 0 deletions
diff --git a/openjdk11/build/openjdk11.SlackBuild b/openjdk11/build/openjdk11.SlackBuild new file mode 100755 index 00000000..3bdf9a84 --- /dev/null +++ b/openjdk11/build/openjdk11.SlackBuild @@ -0,0 +1,358 @@ +#!/bin/sh +# $Id$ +# Copyright 2021, 2022 Lenard Spencer, Orlando, Florida, USA +# Copyright 2022 Eric Hameleers, Eindhoven, NL +# All rights reserved. +# +# Permission to use, copy, modify, and distribute this software for +# any purpose with or without fee is hereby granted, provided that +# the above copyright notice and this permission notice appear in all +# copies. +# +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# ----------------------------------------------------------------------------- +# This script takes inspiration from the OpenJDK11 SBo script by Lenard Spencer +# ----------------------------------------------------------------------------- +# +# Slackware SlackBuild script +# =========================== +# By: Eric Hameleers <alien@slackware.com> +# For: openjdk11 +# Descr: Java 11 Platform Standard Edition +# URL: https://openjdk.org/ +# Build needs: +# Needs: +# Changelog: +# 11.0.16_8-1: 08/aug/2022 by Eric Hameleers <alien@slackware.com> +# * Initial build. +# +# Run 'sh openjdk11.SlackBuild' to build a Slackware package. +# The package (.t?z) and .txt file as well as build logs are created in /tmp . +# Install the package using 'installpkg' or 'upgradepkg --install-new'. +# +# ----------------------------------------------------------------------------- + +PRGNAM=openjdk11 +VERSION=${VERSION:-11.0.16} +UPDVER=${UPDVER:-"8"} # used as "+number" or "-ga"! +PKGVER=${VERSION}_${UPDVER} +BOOTVER=${BOOTVER:-"10.0.2+13"} + +BUILD=${BUILD:-1} +NUMJOBS=${NUMJOBS:-"$(nproc)"} +NUMJOBS=${NUMJOBS#*j} # Remove "-j" in case NUMJOBS is defined as "-j8" +TAG=${TAG:-alien} + +# Do we bootstrap our Java11 using a binary Java10 or Java11 distribution? +BOOTSTRAP=${BOOTSTRAP:-"NO"} + +DOCS="ADDITIONAL_LICENSE_INFO ASSEMBLY_EXCEPTION LICENSE README" + +# Where do we look for sources? +SRCDIR=$(cd $(dirname $0); pwd) + +# Place to build (TMP) package (PKG) and output (OUTPUT) the program: +TMP=${TMP:-/tmp/build} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +# If you want debug symbols in your JVM library, set DEBUGBUILD to "YES"; +# this would inflate the libjvm.so file from 13 to 160 MB (estimate): +DEBUGBUILD=${DEBUGBUILD:-"NO"} + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$(uname -m)" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm; echo "$ARCH currently not supported, aborting."; exit 1 ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) ARCH=$(uname -m) ;; + esac + export ARCH +fi +# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX: +case "$ARCH" in + i?86) SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686" + SLKLDFLAGS=""; LIBDIRSUFFIX="" + BSARCH="i686" + ;; + x86_64) SLKCFLAGS="-O2 -fPIC" + SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64" + BSARCH="x86_64" + ;; + *) SLKCFLAGS=${SLKCFLAGS:-"-O2"} + SLKLDFLAGS=${SLKLDFLAGS:-""}; LIBDIRSUFFIX=${LIBDIRSUFFIX:-""} + ;; +esac + +case "$ARCH" in + arm*) TARGET=$ARCH-slackware-linux-gnueabi ;; + *) TARGET=$ARCH-slackware-linux ;; +esac + +# Sources: +# Take care of the '-' or '+' in the archive name: +[ "$UPDVER" == "ga" ] && EXTRAVER="-${UPDVER}" || EXTRAVER="+${UPDVER}" +SOURCE[0]="$SRCDIR/sources//jdk11u-jdk-${VERSION}${EXTRAVER}.tar.gz" +SRCURL[0]="https://github.com/openjdk/jdk11u/archive/jdk-${VERSION}${EXTRAVER}/jdk11u-jdk-${VERSION}${EXTRAVER}.tar.gz" + +if [ "${BOOTSTRAP}" != "NO" ]; then + SOURCE[1]="$SRCDIR/sources/OpenJDK-${BOOTVER}-${BSARCH}-bin.tar.xz" + SRCURL[1]="https://anduin.linuxfromscratch.org/BLFS/OpenJDK/OpenJDK-${BOOTVER%+*}/OpenJDK-${BOOTVER}-${BSARCH}-bin.tar.xz" +fi + +## +## --- with a little luck, you won't have to edit below this point --- ## +## + +# Exit the script on errors: +set -e +trap 'echo "$0 FAILED at line ${LINENO}" | tee $OUTPUT/error-${PRGNAM}.log' ERR +# Catch unitialized variables: +set -u +P1=${1:-1} + +# Save old umask and set to 0022: +_UMASK_=$(umask) +umask 0022 + +# Create working directories: +mkdir -p $OUTPUT # place for the package to be saved +mkdir -p $TMP/tmp-$PRGNAM # location to build the source +mkdir -p $PKG # place for the package to be built +rm -rf $PKG/* # always erase old package's contents +rm -rf $TMP/tmp-$PRGNAM/* # remove the remnants of previous build +rm -rf $OUTPUT/{configure,make,install,error,makepkg,patch}-$PRGNAM.log + # remove old log files + +# Source file availability: +for (( i = 0; i < ${#SOURCE[*]}; i++ )) ; do + if ! [ -f ${SOURCE[$i]} ]; then + echo "Source '$(basename ${SOURCE[$i]})' not available yet..." + # Check if the $SRCDIR is writable at all - if not, download to $OUTPUT + [ -w "$SRCDIR" ] || SOURCE[$i]="$OUTPUT/$(basename ${SOURCE[$i]})" + if [ -f ${SOURCE[$i]} ]; then echo "Ah, found it!"; continue; fi + if ! [ "x${SRCURL[$i]}" == "x" ]; then + echo "Will download file to $(dirname $SOURCE[$i])" + wget --no-check-certificate -nv -T 20 -O "${SOURCE[$i]}" "${SRCURL[$i]}" || true + if [ $? -ne 0 -o ! -s "${SOURCE[$i]}" ]; then + echo "Fail to download '$(basename ${SOURCE[$i]})'. Aborting the build." + mv -f "${SOURCE[$i]}" "${SOURCE[$i]}".FAIL + exit 1 + fi + fi + if [ ! -f "${SOURCE[$i]}" -o ! -s "${SOURCE[$i]}" ]; then + echo "File '$(basename ${SOURCE[$i]})' not available. Aborting the build." + exit 1 + fi + fi +done + +if [ "$P1" == "--download" ]; then + echo "Download complete." + exit 0 +fi + +# --- PACKAGE BUILDING --- + +echo "++" +echo "|| $PRGNAM-${PKGVER}" +echo "++" + +cd $TMP/tmp-$PRGNAM +echo "Extracting the source archive(s) for $PRGNAM..." +for (( i = 0; i < ${#SOURCE[*]}; i++ )) ; do + tar -xf ${SOURCE[$i]} +done +chown -R root:root * +chmod -R u+w,go+r-w,a+rX-st * +cd jdk11u-jdk-${VERSION}-${UPDVER} + +if [ "${BOOTSTRAP}" == "NO" ]; then + USE_BOOTSTRAP=" " +else + # Building openjdk from source requires bootstrapping from either a + # current or previous version of the (open)jdk binary installation. + # We use the BLFS binaries for OpenJDK10 to bootstrap: + export BOOT_JAVA=$TMP/tmp-$PRGNAM/OpenJDK-10.0.2+13-$BSARCH-bin + USE_BOOTSTRAP="--with-boot-jdk=${BOOT_JAVA}" +fi + +if [ "$DEBUGBUILD" = "NO" ]; then + USE_DEBUG="--with-native-debug-symbols=none" +else + USE_DEBUG="--enable-debug --with-native-debug-symbols=external" +fi + +# Recommended by upstream: +unset JAVA_HOME +unset CFLAGS +unset CXXFLAGS +unset LDFLAGS + +# Causes the build to fail if set: +unset MAKEFLAGS + +echo Building ... +sh configure \ + ${USE_BOOTSTRAP} \ + ${USE_DEBUG} \ + --with-vendor-name="AlienBOB Slackware" \ + --with-vendor-url="https://alien.slackbook.org/blog/wp-admin/edit.php?tag=openjdk" \ + --with-vendor-bug-url="https://alien.slackbook.org/blog/wp-admin/edit.php?tag=openjdk" \ + --with-vendor-vm-bug-url="https://bugs.openjdk.java.net" \ + --with-version-build="${UPDVER}" \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-${PKGVER} \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --with-harfbuzz=bundled \ + --with-zlib=bundled \ + --with-giflib=system \ + --with-lcms=system \ + --with-libjpeg=system \ + --with-libpng=system \ + --enable-libffi-bundling \ + --enable-unlimited-crypto \ + --disable-precompiled-headers \ + --disable-warnings-as-errors \ + --with-extra-cflags="$SLKCFLAGS" \ + --with-extra-cxxflags="$SLKCFLAGS" \ + --with-jobs=$NUMJOBS \ + 2>&1 | tee $OUTPUT/configure-${PRGNAM}.log + #--with-extra-ldflags="$SLKLDFLAGS" \ + #--openjdk-target=$TARGET \ + +# The 'bootcycle-images' target builds the target JDK using the pre-installed +# (bootstrap-) JDK and then rebuilds JDK using the just-compiled JDK. +make bootcycle-images 2>&1 | tee $OUTPUT/make-${PRGNAM}.log + +# Manually install the generated jdk image into the package directory: +mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/java +cp -a build/linux*/images/jdk/* $PKG/usr/lib${LIBDIRSUFFIX}/java/ + +# We do not need the demo materials: +rm -rf $PKG/usr/lib${LIBDIRSUFFIX}/java/demo + +# The configuration goes to /etc and we put a symlink in place: +mkdir -p $PKG/etc +mv $PKG/usr/lib${LIBDIRSUFFIX}/java/conf $PKG/etc/${PRGNAM} +ln -s /etc/${PRGNAM} $PKG/usr/lib${LIBDIRSUFFIX}/java/conf + +# Do not clobber user modifications to the configuration files: +mv ${PKG}/etc/${PRGNAM}/logging.properties{,.new} +mv ${PKG}/etc/${PRGNAM}/net.properties{,.new} +mv ${PKG}/etc/${PRGNAM}/sound.properties{,.new} +mv ${PKG}/etc/${PRGNAM}/management/jmxremote.access{,.new} +mv ${PKG}/etc/${PRGNAM}/management/jmxremote.password.template{,.new} +mv ${PKG}/etc/${PRGNAM}/management/management.properties{,.new} +mv ${PKG}/etc/${PRGNAM}/security/policy/unlimited/default_local.policy{,.new} +mv ${PKG}/etc/${PRGNAM}/security/policy/unlimited/default_US_export.policy{,.new} +mv ${PKG}/etc/${PRGNAM}/security/policy/limited/default_local.policy{,.new} +mv ${PKG}/etc/${PRGNAM}/security/policy/limited/default_US_export.policy{,.new} +mv ${PKG}/etc/${PRGNAM}/security/policy/limited/exempt_local.policy{,.new} +mv ${PKG}/etc/${PRGNAM}/security/java.security{,.new} +mv ${PKG}/etc/${PRGNAM}/security/java.policy{,.new} + +if [ "$DEBUGBUILD" = "NO" ]; then + # Strip debug symbols from the dynamic libraries but leave the symbol tables: + find $PKG -name "*.so" -exec strip --strip-debug {} \; +fi + +# Generate a cacerts file from the certificates installed by ca-certificates +# in Slackware - the "cacerts" in the OpenJDK sources may be outdated. +# This will only work if we already have a proper JDK/JRE installed: +if which keytool 1>/dev/null 2>&1 ; then + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/java/lib/security/cacerts + mkdir certgen + ( cd certgen + cp $SRCDIR/scripts/generate-cacerts.pl . + for cert in /usr/share/ca-certificates/*/*.crt; do + openssl x509 -text -in "${cert}" >> all.crt + done + perl generate-cacerts.pl keytool all.crt + install -p -m0644 cacerts $PKG/usr/lib${LIBDIRSUFFIX}/java/lib/security + ) +else + echo "** Not installing a fresh cacerts file !" + echo "** Missing keytool program (do you really have a Java installed?)" +fi + +# Symlinks are present in Slackware historically: +ln -sf java $PKG/usr/lib${LIBDIRSUFFIX}/jdk${VERSION%%.*} + +# Add the profile scripts: +mkdir -p $PKG/etc/profile.d +for file in $(ls $SRCDIR/profile.d/openjdk*) ; do + cat $file | sed -e "s#@LIB@/java#lib${LIBDIRSUFFIX}/java#" \ + > $PKG/etc/profile.d/$(basename $file) +done +chmod 755 $PKG/etc/profile.d/* + +# Add menu entries and icons: +for i in 16 24 32 48; do + install -D -m0644 src/java.desktop/unix/classes/sun/awt/X11/java-icon$i.png \ + $PKG/usr/share/icons/hicolor/${i}x${i}/apps/${PRGNAM}.png +done +# Add the desktop files: +mkdir -p ${PKG}/usr/share/applications +for DTFILE in java jconsole jshell ; do + cat $SRCDIR/desktop/openjdk11-${DTFILE}.desktop \ + | sed -e "s,@JPATH@,/usr/lib${LIBDIRSUFFIX}/java/bin/," \ + -e "s,@PRGNAM@,${PRGNAM}," \ + > ${PKG}/usr/share/applications/openjdk11-${DTFILE}.desktop +done + +# Add symlinks to the JVM and runtime libraries: +for JLIB in server/libjvm libawt_xawt libjava libjawt libjsound libsplashscreen +do + ln -sf java/lib/${JLIB}.so $PKG/usr/lib${LIBDIRSUFFIX}/ +done + +# Add documentation: +mkdir -p $PKG/usr/doc/$PRGNAM-$PKGVER +cp -a $DOCS $PKG/usr/doc/$PRGNAM-$PKGVER || true +cat $SRCDIR/$(basename $0) > $PKG/usr/doc/$PRGNAM-$PKGVER/$PRGNAM.SlackBuild +chown -R root:root $PKG/usr/doc/$PRGNAM-$PKGVER +find $PKG/usr/doc -type f -exec chmod 644 {} \; + +# Move the man pages to the system location and point a symlink to them: +mv $PKG/usr/lib${LIBDIRSUFFIX}/java/man $PKG/usr +ln -s /usr/man $PKG/usr/lib${LIBDIRSUFFIX}/java/ +# Slackware has 'ja' as the install location for Japanese man pages: +rm $PKG/usr/man/ja +mv $PKG/usr/man/{ja_JP.UTF-8,ja} + +# Compress man pages: +find $PKG/usr/man -type f -name "*.?" -exec gzip -9f {} \; +for i in $(find $PKG/usr/man -type l -name "*.?") ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +# Add a package description: +mkdir -p $PKG/install +cat $SRCDIR/slack-desc > $PKG/install/slack-desc +cat $SRCDIR/doinst.sh > $PKG/install/doinst.sh + +# Build the package: +cd $PKG +makepkg --linkadd y --chown n $OUTPUT/${PRGNAM}-${PKGVER}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz} 2>&1 | tee $OUTPUT/makepkg-${PRGNAM}.log +cd $OUTPUT +md5sum ${PRGNAM}-${PKGVER}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz} > ${PRGNAM}-${PKGVER}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz}.md5 +cd - +cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${PKGVER}-${ARCH}-${BUILD}${TAG}.txt + +# Restore the original umask: +umask ${_UMASK_} + |