Date: Wednesday, July 9, 2014 @ 21:22:07 Author: guillaume Revision: 216754
Add new package java-meta Added: java-meta/ java-meta/repos/ java-meta/trunk/ java-meta/trunk/PKGBUILD java-meta/trunk/TODO.md java-meta/trunk/bin_archlinux-java java-meta/trunk/bin_java-wrapper java-meta/trunk/profile_jre.csh java-meta/trunk/profile_jre.sh --------------------+ PKGBUILD | 65 +++++++++++++++++++++ TODO.md | 60 +++++++++++++++++++ bin_archlinux-java | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++ bin_java-wrapper | 2 profile_jre.csh | 4 + profile_jre.sh | 4 + 6 files changed, 291 insertions(+) Added: java-meta/trunk/PKGBUILD =================================================================== --- java-meta/trunk/PKGBUILD (rev 0) +++ java-meta/trunk/PKGBUILD 2014-07-09 19:22:07 UTC (rev 216754) @@ -0,0 +1,65 @@ +# Maintainer: Guillaume ALAUX <[email protected]> +pkgname=('java-runtime-headless-meta' 'java-runtime-meta' 'java-environment-meta') +pkgbase=java-meta +pkgver=2 +pkgrel=3 +arch=('any') +url='www.archlinux.org' +license=('GPL') +source=(profile_jre.csh + profile_jre.sh + bin_archlinux-java + bin_java-wrapper) +sha256sums=('9f0032e47705ce55a615ab3b942720b8447f490d1ff430b214038b81c3019ac2' + '8dbafa311f34d23c5bbef71fa942b97b224ebeb330b36195f22a1836285bbb83' + '2b6095359fc437836027408f105b0be2eb2f2cbba8dbd5b01a452046f465da92' + '622927af9ec374140a878993936f7fdd4206fe069dddfcefc6d4e15fa6d67f39') + +package_java-runtime-headless-meta() { + pkgdesc='Meta files for headless Java Runtime Environments' + backup=(etc/profile.d/jre.sh + etc/profile.d/jre.csh) + + cd "${srcdir}" + + install -d -m 755 "${pkgdir}/etc/profile.d" + install -m 644 profile_jre.sh "${pkgdir}/etc/profile.d/jre.sh" + install -m 644 profile_jre.csh "${pkgdir}/etc/profile.d/jre.csh" + + install -D -m 755 bin_java-wrapper "${pkgdir}/usr/bin/java" + # Official list of supplementary binaries that Java headless runtime packages MUST provide + # This list is based on Arch Linux' default Java implementation: "OpenJDK 7 Icedtea" + for bin in keytool orbd pack200 rmid rmiregistry servertool tnameserv unpack200; do + ln -s java "${pkgdir}/usr/bin/${bin}" + done + + install -D bin_archlinux-java "${pkgdir}/usr/bin/archlinux-java" +} + +package_java-runtime-meta() { + pkgdesc='Meta files for full Java Runtime Environments' + + cd "${srcdir}" + + install -d m 755 "${pkgdir}/usr/bin/" + # Official list of supplementary binaries that Java runtime packages MUST provide + # This list is based on Arch Linux' default Java implementation: "OpenJDK 7 Icedtea" + ln -s java "${pkgdir}/usr/bin/policytool" +} + +package_java-environment-meta() { + pkgdesc='Meta files for Java Development Kits' + + cd "${srcdir}" + + install -d m 755 "${pkgdir}/usr/bin/" + # Official list of supplementary binaries that Java environment packages MUST provide + # This list is based on Arch Linux' default Java implementation: "OpenJDK 7 Icedtea" + for bin in \ + appletviewer extcheck idlj jar jarsigner javac javadoc javah javap jcmd \ + jconsole jdb jdeps jhat jinfo jmap jps jrunscript jsadebugd jstack jstat \ + jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc; + do + ln -s java "${pkgdir}/usr/bin/${bin}" + done +} Property changes on: java-meta/trunk/PKGBUILD ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +Id \ No newline at end of property Added: java-meta/trunk/TODO.md =================================================================== --- java-meta/trunk/TODO.md (rev 0) +++ java-meta/trunk/TODO.md 2014-07-09 19:22:07 UTC (rev 216754) @@ -0,0 +1,60 @@ +The idea would be to be able to use `pacman -S java-runtime-headless-meta` as a kind of *fix* to Archers problem with JDKs + +Find list of jdk installed + (by looking at /usr/lib/jvm directories – very important because packages can provide java-runtime but not be in this dir. It is assumed that package that put files in these dirs do comply to the meta super package thing) + if there are more than one jdk installed let user know and give him usage for changing this + +# meta + +## When installing java-runtime-headless-meta + +- link 'default' does not exist + - no jdk is installed + - do not say a word, we might just be installing for the first time + - let this case be handled by next JDK to be installed? + - one jdk is installed + - link to that jdk and let user know + - multiple jdk are installed + - if one is the official AL one then link it and let user know + - give usage to user + +- link 'default' exists + - no jdk is installed + - remove link and let user know + - one jdk is installed + - check/fix link points at this jdk and let user know + - multiple jdk are installed + - check link points at a valid jdk and let user know if trouble + +## When removing java-runtime-headless-meta + +- remove 'default' link + - do not test if any other jdk is installed or warn user (he should have already been warned by pacman) + + +# JDK + +## When installing a JDK + +- link 'default' does not exist + - this jdk is the only one installed + - link to this jdk + - at least one other jdk is installed + - ling to this jdk + - give usage to user + +- link 'default' exists + - this jdk is the only one installed + - check link points at this jdk + - at least one other jdk is installed + - check link points at a valid jdk and let user know if trouble + +## When removing a JDK + +- give user usage + + +# usage + +- list installed jdk +- give `ln` example command Added: java-meta/trunk/bin_archlinux-java =================================================================== --- java-meta/trunk/bin_archlinux-java (rev 0) +++ java-meta/trunk/bin_archlinux-java 2014-07-09 19:22:07 UTC (rev 216754) @@ -0,0 +1,156 @@ +#! /bin/bash + +# Arch Linux helper script to set/unset/check the enabled Java environment +# See '-h' or '--help' for usage + +JVM_DIR=/usr/lib/jvm +DEFAULT_NAME=java-default-runtime +DEFAULT_PATH=${JVM_DIR}/${DEFAULT_NAME} + + +# Utility functions + +check_root() { + if [ $(id -u) -ne 0 ]; then + echo 'This script must be run as root' + exit 1 + fi +} + +# $1: parameter count given to this script for this option +# $2: expected parameter count for this option +check_param_count() { + if [ $1 -ne $2 ]; then + echo 'Wrong parameter count' + exit 2 + fi +} + +# Second level functions + +get_default_java() { + path=$(readlink -e ${DEFAULT_PATH}) + echo ${path/${JVM_DIR}\/} +} + +get_installed_javas() { + javas=() + for dir in $(find ${JVM_DIR} -mindepth 1 -maxdepth 1 -type d | sort); do + if [ -x ${dir}/bin/javac ]; then + javas+=(${dir/${JVM_DIR}\/}) + else + if [ -x ${dir}/jre/bin/java ]; then + javas+=(${dir/${JVM_DIR}\/}/jre) + fi + fi + done + echo ${javas[@]} +} + +# $1: Java environment name to test +is_java_valid() { + test "x$1" != "x${DEFAULT_NAME}" && test -x ${JVM_DIR}/$1/bin/java +} + +# $1: Java environment name to set as default +set_default_to() { + check_root + echo "Setting Java environment '$1' as default" + ln -s $1 ${DEFAULT_PATH} +} + +unset_default() { + check_root + unlink ${DEFAULT_PATH} 2>/dev/null +} + +# First level functions + +give_status() { + installed_java=$(get_installed_javas) + default_java=$(get_default_java) + if [ ${#installed_java[@]} -eq 0 ]; then + echo 'No compatible Java environment installed' + else + echo 'Available Java environments:' + for java in ${installed_java[@]}; do + if [ ${java} = "${default_java}" ]; then + echo -e " ${java} (default)" + else + echo " ${java}" + fi + done + fi + if [ -z ${default_java} ]; then + echo "No Java environment set as default" + fi +} + +# $1: Java environment name to try to set +try_set_default() { + default_java=$(get_default_java) + if is_java_valid ${default_java}; then + echo "The default Java environment is already set (${default_java})" + else + force_set_default $1 + fi +} + +# $1: Java environment name to set as default +force_set_default() { + check_root + if is_java_valid $1; then + unset_default + set_default_to $1 + else + echo "'${JVM_DIR}/$1' is not a valid Java environment path" + exit 3 + fi +} + +# $1: Java environment name to try to unset +try_unset_default() { + default=$(get_default_java) + if [ "x${default}" = "x" -o "x${default}" = "x$1" ]; then + unset_default + echo 'Done. No Java environment is set as default any more.' + else + echo "'$1' is not set as Java environment default" + fi +} + +fix_default() { + default=$(get_default_java) + if is_java_valid ${default}; then + echo "Current default Java environment is valid: '${default}'" + else + unset_default + installed_javas=$(get_installed_javas) + javas=('java-7-openjdk' 'java-7-openjdk/jre' ${installed_javas[@]}) + for java in ${javas[@]}; do + if ! is_java_valid $(get_default_java) && is_java_valid ${java}; then + set_default_to ${java} + fi + done + fi +} + +usage() { + echo "$0 [ --status | --try-set <JAVA_ENV> | --force-set <JAVA_ENV> | --try-unset <JAVA_ENV> ]" + echo -e "\n\t<JAVA_ENV> must be the name of a Java environment directory available in ${JVM_DIR}\n" + echo -e '\t--status\t\tList installed Java environments and enabled one' + echo -e '\t--try-set <JAVA_ENV>\tIf no Java environments is already set as default, set this one' + echo -e '\t--force-set <JAVA_ENV>\tForce <JAVA_ENV> as default' + echo -e '\t--try-unset <JAVA_ENV>\tIf <JAVA_ENV> is set as default, unset it' + echo -e '\t--fix\t\t\tFix an invalid default Java environment' +} + +## Main +case $1 in + '--status') give_status;; + '--try-set') check_param_count $# 2; try_set_default $2;; + '--force-set') check_param_count $# 2; force_set_default $2;; + '--try-unset') check_param_count $# 2; try_unset_default $2;; + '--fix') fix_default;; + *) usage;; +esac Property changes on: java-meta/trunk/bin_archlinux-java ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: java-meta/trunk/bin_java-wrapper =================================================================== --- java-meta/trunk/bin_java-wrapper (rev 0) +++ java-meta/trunk/bin_java-wrapper 2014-07-09 19:22:07 UTC (rev 216754) @@ -0,0 +1,2 @@ +#!/bin/bash +exec "${JAVA_HOME:-/usr/lib/jvm/java-default-runtime}/bin/${0##*/}" "$@" Property changes on: java-meta/trunk/bin_java-wrapper ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: java-meta/trunk/profile_jre.csh =================================================================== --- java-meta/trunk/profile_jre.csh (rev 0) +++ java-meta/trunk/profile_jre.csh 2014-07-09 19:22:07 UTC (rev 216754) @@ -0,0 +1,4 @@ +# Do not change this unless you want to completely by-pass Arch Linux' way +# of handling Java versions and vendors. Instead, please use script `archlinux-java` +# to change what /usr/lib/jvm/java-default-runtime points at. +setenv JAVA_HOME "/usr/lib/jvm/java-default-runtime" Added: java-meta/trunk/profile_jre.sh =================================================================== --- java-meta/trunk/profile_jre.sh (rev 0) +++ java-meta/trunk/profile_jre.sh 2014-07-09 19:22:07 UTC (rev 216754) @@ -0,0 +1,4 @@ +# Do not change this unless you want to completely by-pass Arch Linux' way +# of handling Java versions and vendors. Instead, please use script `archlinux-java` +# to change what /usr/lib/jvm/java-default-runtime points at. +export JAVA_HOME=/usr/lib/jvm/java-default-runtime
