]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-java-requires
- do not output tag, wasn't needed before
[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 # Enable debug: JAVADEPS_DEBUG=true
11 : ${JAVADEPS_DEBUG=false}
12
13 # save $- state, to enable in functions
14 debug=$-
15
16 javaclassversion() {
17         set -$debug
18         local mode=$1; shift
19         [ $# -gt 0 ] || return 1
20         $JAVADEPS_DEBUG && echo >&2 ">> javaclassversion($mode): $*"
21
22         # process only requires
23         [ "$mode" = requires ] || return $ret
24
25         local classver=$(echo "$@" | xargs -r file | grep -o 'compiled Java class data, version [0-9.]*' | awk '{print $NF}' | sort -u)
26         if [ -z "$classver" ]; then
27                 return 1
28         fi
29
30         local v
31         for v in $classver; do
32                 echo "java(ClassDataVersion) >= $v"
33         done
34         return 0
35 }
36
37 javajarversion() {
38         set -$debug
39         local mode=$1; shift
40         local jar=$1
41         local tmp ret=0
42         $JAVADEPS_DEBUG && echo >&2 ">> javajarversion($mode): $jar"
43
44         # check only files, symlinks could point outside buildroot
45         [ -f "$jar" -a ! -L "$jar" ] || return $ret
46
47         tmp=$(mktemp -d)
48         unzip -q -d $tmp $jar >&2
49         # workaround for .jar files with stupid permissions
50         chmod -R u+rwX $tmp
51
52         # find .jar and .class files
53         find_javadeps $mode $(find $tmp -type f -regextype posix-extended  -regex '^.+\.(class|jar)$') || ret=1
54         rm -rf $tmp
55         return $ret
56 }
57
58 find_javadeps() {
59         set -$debug
60         local mode=$1; shift
61         local ret=0
62
63         $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): $*"
64         for file in $@; do
65                 case $file in
66                 *.jar)
67                         javajarversion $mode "$file" || ret=1
68                 ;;
69                 *.class)
70                         javaclassversion $mode "$file" || {
71                                 echo >&2 "ERROR: Class version could not be extracted from $file"
72                                 ret=1
73                         }
74                 ;;
75                 *)
76                         $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): no handle: $file"
77                 ;;
78                 esac
79         done
80         return $ret
81 }
82
83 ret=0
84 # default mode to requires for backward compat
85 mode=requires
86 case $1 in
87 -P|--provides)
88         mode=provides
89         shift
90         ;;
91 -R|--requires)
92         mode=requires
93         shift
94         ;;
95 esac
96
97 t=$(mktemp)
98 find_javadeps $mode $(cat -) > $t || ret=1
99 sort -u $t
100 rm -f $t
101
102 exit $ret
This page took 0.038248 seconds and 4 git commands to generate.