X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=rpm-java-requires;h=dc069c83d384be9f36e50fbb2ba75e45db65284f;hb=38dbbab952f147ab4614acb7bbaa7de0c21eac40;hp=03987b2df7a092ee4de164a32607f03d87809ef8;hpb=ffe7903e0b8736c7f8b7e52bc9d382578ff94f4a;p=packages%2Frpm.git diff --git a/rpm-java-requires b/rpm-java-requires index 03987b2..dc069c8 100644 --- a/rpm-java-requires +++ b/rpm-java-requires @@ -7,8 +7,26 @@ 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} + +# save $- state, to enable in functions +debug=$- + javaclassversion() { + set -$debug + local mode=$1; shift [ $# -gt 0 ] || return 1 + $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 @@ -23,46 +41,86 @@ javaclassversion() { } javajarversion() { - local jar="$1" - local ret=0 + set -$debug + local mode=$1; shift + local jar=$1 + local tmp ret=0 + $JAVADEPS_DEBUG && echo >&2 ">> javajarversion($mode): $jar" # check only files, symlinks could point outside buildroot [ -f "$jar" -a ! -L "$jar" ] || return $ret tmp=$(mktemp -d) unzip -q -d $tmp $jar >&2 - javaclassversion $(find $tmp -type f -name '*.class') || { - echo >&2 "ERROR: Class version could not be extracted from $jar" - ret=1 - } - rm -rf $tmp + # workaround for .jar files with stupid permissions + chmod -R u+rwX $tmp + # find .jar and .class files + 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 - for file in $FILES; do + + $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 + ;; + *) + $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): no handle: $file" + ;; esac done return $ret } -FILES=$(cat -) +ret=0 +# 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) -ret=0 -find_requires > $t || ret=1 -cat $t +find_javadeps $mode $(cat -) > $t || ret=1 +sort -u $t rm -f $t + exit $ret