X-Git-Url: http://git.pld-linux.org/?p=packages%2Frpm.git;a=blobdiff_plain;f=rpm-java-requires;h=8bbac6f2e53e91ded3f1eb08f3bf49a791ea269c;hp=7e9a7715007eb975f82e4bab7c7445a2362a9528;hb=e9576b98b1c166be5e164c20df8d8659bb0431be;hpb=6389a21673d5eb47447dd3dc735f35f97c673b97 diff --git a/rpm-java-requires b/rpm-java-requires old mode 100644 new mode 100755 index 7e9a771..8bbac6f --- a/rpm-java-requires +++ b/rpm-java-requires @@ -7,34 +7,56 @@ export PATH="/sbin:/usr/sbin:/bin:/usr/bin" +# Set the prefix, unless it is overriden +: ${RPM_LIBDIR=/usr/lib/rpm} + +# Enable debug: JAVADEPS_DEBUG=true +: ${JAVADEPS_DEBUG=false} + +# xsltproc for eclipse feature.xml +: ${xsltproc=/usr/bin/xsltproc} + +# "%define java_min_classdataversion 51.0" in spec to minimum version to be 51.0 +: ${MIN_CLASSDATAVERSION=} + # save $- state, to enable in functions debug=$- -# enable debug: FIND_JAVAREQ_DEBUG=true -FIND_JAVAREQ_DEBUG=${FIND_JAVAREQ_DEBUG:-false} +javaclassversionfilter() { + if [ "$MIN_CLASSDATAVERSION" ]; then + set -- $* "$MIN_CLASSDATAVERSION" + fi + + local v + for v in $*; do + echo "java(ClassDataVersion) >= $v" + done | sort -V | tail -n 1 +} javaclassversion() { set -$debug + local mode=$1; shift [ $# -gt 0 ] || return 1 - $FIND_JAVAREQ_DEBUG && echo >&2 ">> class: $*" + $JAVADEPS_DEBUG && echo >&2 ">> javaclassversion($mode): $*" + + # process only requires + [ "$mode" = requires ] || return $ret local classver=$(echo "$@" | xargs -r file | grep -o 'compiled Java class data, version [0-9.]*' | awk '{print $NF}' | sort -u) if [ -z "$classver" ]; then return 1 fi - local v - for v in $classver; do - echo "java(ClassDataVersion) >= $v" - done + javaclassversionfilter $classver return 0 } javajarversion() { set -$debug - local jar="$1" + local mode=$1; shift + local jar=$1 local tmp ret=0 - $FIND_JAVAREQ_DEBUG && echo >&2 ">> jar: $jar" + $JAVADEPS_DEBUG && echo >&2 ">> javajarversion($mode): $jar" # check only files, symlinks could point outside buildroot [ -f "$jar" -a ! -L "$jar" ] || return $ret @@ -45,38 +67,71 @@ javajarversion() { chmod -R u+rwX $tmp # find .jar and .class files - find_requires $(find $tmp -type f -regex '^.+\.(class|jar)$') || ret=1 + find_javadeps $mode $(find $tmp -type f -regextype posix-extended -regex '^.+\.(class|jar)$') || ret=1 rm -rf $tmp return $ret } -find_requires() { +eclipse_feature() { set -$debug + local mode=$1; shift + local file=$1 local ret=0 - $FIND_JAVAREQ_DEBUG && echo >&2 ">> find_requires: $*" + $JAVADEPS_DEBUG && echo >&2 ">> eclipse_feature($mode): $file" + + if [ ! -x $xsltproc ]; then + return 0 + fi + + $xsltproc --stringparam mode $mode ${RPM_LIBDIR}/eclipse-feature.xslt $file +} + +find_javadeps() { + set -$debug + local mode=$1; shift + local ret=0 + + $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): $*" for file in $@; do case $file in *.jar) - javajarversion "$file" || ret=1 + javajarversion $mode "$file" || ret=1 ;; *.class) - javaclassversion "$file" || { + javaclassversion $mode "$file" || { echo >&2 "ERROR: Class version could not be extracted from $file" ret=1 } ;; + */feature.xml) + eclipse_feature $mode "$file" || ret=1 + ;; *) - $FIND_JAVAREQ_DEBUG && echo >&2 ">> find_requires: no handle: $file" + $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): no handle: $file" ;; esac done return $ret } -t=$(mktemp) ret=0 -find_requires $(cat -) > $t || ret=1 +# default mode to requires for backward compat +mode=requires +case $1 in +-P|--provides) + mode=provides + shift + ;; +-R|--requires) + mode=requires + shift + ;; +esac + +t=$(mktemp) +find_javadeps $mode $(cat -) > $t || ret=1 sort -u $t rm -f $t + exit $ret