]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-java-requires
- pass -regextype for find
[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         find_requires $(find $tmp -type f -regextype posix-extended -regex '^.+\.(class|jar)$') || ret=1
49         rm -rf $tmp
50         return $ret
51 }
52
53 find_requires() {
54         set -$debug
55         local ret=0
56
57         $FIND_JAVAREQ_DEBUG && echo >&2 ">> find_requires: $*"
58         for file in $@; do
59                 case $file in
60                 *.jar)
61                         javajarversion "$file" || ret=1
62                 ;;
63                 *.class)
64                         javaclassversion "$file" || {
65                                 echo >&2 "ERROR: Class version could not be extracted from $file"
66                                 ret=1
67                         }
68                 ;;
69                 *)
70                         $FIND_JAVAREQ_DEBUG && echo >&2 ">> find_requires: no handle: $file"
71                 ;;
72                 esac
73         done
74         return $ret
75 }
76
77 t=$(mktemp)
78 ret=0
79 find_requires $(cat -) > $t || ret=1
80 sort -u $t
81 rm -f $t
82 exit $ret
This page took 0.038863 seconds and 4 git commands to generate.