]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-java-requires
drop ruby macros here, duplicate. provided by rpm-build-macros
[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 # 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
This page took 0.042743 seconds and 3 git commands to generate.