]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-java-requires
- print out rpm requires/provides from eclipse feature.xml
[packages/rpm.git] / rpm-java-requires
1 #!/bin/sh
2 # This script reads filenames from STDIN and outputs any relevant requires
3 # information that needs to be included in the package.
4 #
5 # Based on rpm-4.4.2/scripts/find-req.pl
6 # Authors: Elan Ruusamäe <glen@pld-linux.org>
7
8 export PATH="/sbin:/usr/sbin:/bin:/usr/bin"
9
10 # save $- state, to enable in functions
11 debug=$-
12
13 # enable debug: FIND_JAVAREQ_DEBUG=true
14 FIND_JAVAREQ_DEBUG=${FIND_JAVAREQ_DEBUG:-false}
15
16 javaclassversion() {
17         set -$debug
18         [ $# -gt 0 ] || return 1
19         $FIND_JAVAREQ_DEBUG && echo >&2 ">> class: $*"
20
21         local classver=$(echo "$@" | xargs -r file | grep -o 'compiled Java class data, version [0-9.]*' | awk '{print $NF}' | sort -u)
22         if [ -z "$classver" ]; then
23                 return 1
24         fi
25
26         local v
27         for v in $classver; do
28                 echo "java(ClassDataVersion) >= $v"
29         done
30         return 0
31 }
32
33 javajarversion() {
34         set -$debug
35         local jar="$1"
36         local tmp ret=0
37         $FIND_JAVAREQ_DEBUG && echo >&2 ">> jar: $jar"
38
39         # check only files, symlinks could point outside buildroot
40         [ -f "$jar" -a ! -L "$jar" ] || return $ret
41
42         tmp=$(mktemp -d)
43         unzip -q -d $tmp $jar >&2
44         # workaround for .jar files with stupid permissions
45         chmod -R u+rwX $tmp
46
47         # find .jar and .class files
48         for file in $(find $tmp -type f '(' -name '*.class' -o -name '*.jar' ')'); do
49                 case "$file" in
50                 *.jar)
51                         # recursion!
52                         javajarversion "$file" || ret=1
53                 ;;
54                 *.class)
55                         javaclassversion "$file" || {
56                                 echo >&2 "ERROR: Class version could not be extracted from $file"
57                                 ret=1
58                         }
59                 ;;
60                 esac
61         done
62         rm -rf $tmp
63
64         return $ret
65 }
66
67 find_requires() {
68         set -$debug
69         local ret=0
70         for file in $FILES; do
71                 case $file in
72                 *.jar)
73                         javajarversion "$file" || ret=1
74                 ;;
75                 *.class)
76                         javaclassversion "$file" || {
77                                 echo >&2 "ERROR: Class version could not be extracted from $file"
78                                 ret=1
79                         }
80                 ;;
81                 esac
82         done
83         return $ret
84 }
85
86 FILES=$(cat -)
87
88 t=$(mktemp)
89 ret=0
90 find_requires > $t || ret=1
91 sort -u $t
92 rm -f $t
93 exit $ret
This page took 0.037217 seconds and 3 git commands to generate.