]>
Commit | Line | Data |
---|---|---|
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 | # Set the prefix, unless it is overriden | |
11 | : ${RPM_LIBDIR=/usr/lib/rpm} | |
12 | ||
13 | # Enable debug: JAVADEPS_DEBUG=true | |
14 | : ${JAVADEPS_DEBUG=false} | |
15 | ||
16 | # xsltproc for eclipse feature.xml | |
17 | : ${xsltproc=/usr/bin/xsltproc} | |
18 | ||
19 | # save $- state, to enable in functions | |
20 | debug=$- | |
21 | ||
22 | javaclassversion() { | |
23 | set -$debug | |
24 | local mode=$1; shift | |
25 | [ $# -gt 0 ] || return 1 | |
26 | $JAVADEPS_DEBUG && echo >&2 ">> javaclassversion($mode): $*" | |
27 | ||
28 | # process only requires | |
29 | [ "$mode" = requires ] || return $ret | |
30 | ||
31 | local classver=$(echo "$@" | xargs -r file | grep -o 'compiled Java class data, version [0-9.]*' | awk '{print $NF}' | sort -u) | |
32 | if [ -z "$classver" ]; then | |
33 | return 1 | |
34 | fi | |
35 | ||
36 | local v | |
37 | for v in $classver; do | |
38 | echo "java(ClassDataVersion) >= $v" | |
39 | done | |
40 | return 0 | |
41 | } | |
42 | ||
43 | javajarversion() { | |
44 | set -$debug | |
45 | local mode=$1; shift | |
46 | local jar=$1 | |
47 | local tmp ret=0 | |
48 | $JAVADEPS_DEBUG && echo >&2 ">> javajarversion($mode): $jar" | |
49 | ||
50 | # check only files, symlinks could point outside buildroot | |
51 | [ -f "$jar" -a ! -L "$jar" ] || return $ret | |
52 | ||
53 | tmp=$(mktemp -d) | |
54 | unzip -q -d $tmp $jar >&2 | |
55 | # workaround for .jar files with stupid permissions | |
56 | chmod -R u+rwX $tmp | |
57 | ||
58 | # find .jar and .class files | |
59 | find_javadeps $mode $(find $tmp -type f -regextype posix-extended -regex '^.+\.(class|jar)$') || ret=1 | |
60 | rm -rf $tmp | |
61 | return $ret | |
62 | } | |
63 | ||
64 | eclipse_feature() { | |
65 | set -$debug | |
66 | local mode=$1; shift | |
67 | local file=$1 | |
68 | local ret=0 | |
69 | ||
70 | $JAVADEPS_DEBUG && echo >&2 ">> eclipse_feature($mode): $file" | |
71 | ||
72 | if [ ! -x $xsltproc ]; then | |
73 | return 0 | |
74 | fi | |
75 | ||
76 | $xsltproc --stringparam mode $mode ${RPM_LIBDIR}/eclipse-feature.xslt $file | |
77 | } | |
78 | ||
79 | find_javadeps() { | |
80 | set -$debug | |
81 | local mode=$1; shift | |
82 | local ret=0 | |
83 | ||
84 | $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): $*" | |
85 | for file in $@; do | |
86 | case $file in | |
87 | *.jar) | |
88 | javajarversion $mode "$file" || ret=1 | |
89 | ;; | |
90 | *.class) | |
91 | javaclassversion $mode "$file" || { | |
92 | echo >&2 "ERROR: Class version could not be extracted from $file" | |
93 | ret=1 | |
94 | } | |
95 | ;; | |
96 | */feature.xml) | |
97 | eclipse_feature $mode "$file" || ret=1 | |
98 | ;; | |
99 | *) | |
100 | $JAVADEPS_DEBUG && echo >&2 ">> find_javadeps($mode): no handle: $file" | |
101 | ;; | |
102 | esac | |
103 | done | |
104 | return $ret | |
105 | } | |
106 | ||
107 | ret=0 | |
108 | # default mode to requires for backward compat | |
109 | mode=requires | |
110 | case $1 in | |
111 | -P|--provides) | |
112 | mode=provides | |
113 | shift | |
114 | ;; | |
115 | -R|--requires) | |
116 | mode=requires | |
117 | shift | |
118 | ;; | |
119 | esac | |
120 | ||
121 | t=$(mktemp) | |
122 | find_javadeps $mode $(cat -) > $t || ret=1 | |
123 | sort -u $t | |
124 | rm -f $t | |
125 | ||
126 | exit $ret |