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
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