]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-java-requires
- workaround for .jar files with stupid permissions inside
[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 javaclassversion() {
11         [ $# -gt 0 ] || return 1
12
13         local classver=$(echo "$@" | xargs -r file | grep -o 'compiled Java class data, version [0-9.]*' | awk '{print $NF}' | sort -u)
14         if [ -z "$classver" ]; then
15                 return 1
16         fi
17
18         local v
19         for v in $classver; do
20                 echo "java(ClassDataVersion) >= $v"
21         done
22         return 0
23 }
24
25 javajarversion() {
26         local jar="$1"
27         local ret=0
28
29         # check only files, symlinks could point outside buildroot
30         [ -f "$jar" -a ! -L "$jar" ] || return $ret
31
32         tmp=$(mktemp -d)
33         unzip -q -d $tmp $jar >&2
34         # workaround for .jar files with stupid permissions
35         chmod -R u+rwX $tmp
36         javaclassversion $(find $tmp -type f -name '*.class') || {
37                 echo >&2 "ERROR: Class version could not be extracted from $jar"
38                 ret=1
39         }
40         rm -rf $tmp
41
42         return $ret
43 }
44
45 find_requires() {
46         local ret=0
47         for file in $FILES; do
48                 case $file in
49                 *.jar)
50                         javajarversion "$file" || ret=1
51                 ;;
52                 *.class)
53                         javaclassversion "$file" || {
54                                 echo >&2 "ERROR: Class version could not be extracted from $file"
55                                 ret=1
56                         }
57                 ;;
58                 esac
59         done
60         return $ret
61 }
62
63 FILES=$(cat -)
64
65 t=$(mktemp)
66 ret=0
67 find_requires > $t || ret=1
68 cat $t
69 rm -f $t
70 exit $ret
This page took 0.030677 seconds and 4 git commands to generate.