]>
Commit | Line | Data |
---|---|---|
95593bd3 | 1 | #!/bin/sh |
2d0c53d3 | 2 | # This script reads filenames from STDIN and outputs any relevant requires |
95593bd3 | 3 | # information that needs to be included in the package. |
2d0c53d3 ER |
4 | # |
5 | # Based on rpm-4.4.2/scripts/find-req.pl | |
6 | # Authors: Elan Ruusamäe <glen@pld-linux.org> | |
95593bd3 ER |
7 | |
8 | export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin" | |
95593bd3 | 9 | |
95593bd3 | 10 | javaclassversion() { |
b99bbf2b ER |
11 | local ver |
12 | classver=$(file "$@" | grep -o 'compiled Java class data, version [0-9.]*' | awk '{print $NF}' | sort -u) | |
13 | [ "$classver" ] || return | |
14 | for v in $classver; do | |
15 | echo "java(ClassDataVersion) >= $v" | |
16 | done | |
17 | } | |
18 | ||
19 | javajarversion() { | |
20 | local jar="$1" | |
95593bd3 | 21 | |
4e1562b5 | 22 | # check only files, symlinks could point outside buildroot |
b99bbf2b | 23 | [ -f "$jar" -a ! -L "$jar" ] || return |
4e1562b5 | 24 | |
95593bd3 | 25 | tmp=$(mktemp -d) |
b99bbf2b ER |
26 | unzip -q -d $tmp $jar >&2 |
27 | javaclassversion $(find $tmp -type f -name '*.class') | |
95593bd3 | 28 | rm -rf $tmp |
95593bd3 ER |
29 | } |
30 | ||
facae03a ER |
31 | FILES=$(cat -) |
32 | ||
33 | REQUIRES=$( | |
34 | for file in $FILES; do | |
35 | case $file in | |
36 | *.jar) | |
37 | javajarversion "$file" | |
38 | unzip -p $file | javadeps --requires --rpmformat --keywords - | |
39 | ;; | |
40 | *.class) | |
41 | javaclassversion "$file" | |
42 | javadeps --requires --rpmformat --keywords $file | |
43 | ;; | |
44 | esac | |
45 | done | sort -u | |
46 | ) | |
47 | ||
48 | PROVIDES=$( | |
49 | for file in $FILES; do | |
50 | case $file in | |
51 | *.jar) | |
52 | unzip -p $file | javadeps --provides --rpmformat --keywords --starprov - | |
53 | ;; | |
54 | *.class) | |
55 | javadeps --provides --rpmformat --keywords --starprov $file | |
56 | ;; | |
57 | esac | |
58 | done | sort -u | |
59 | ) | |
60 | ||
61 | # This is a little magic trick to get all REQUIRES that are not | |
62 | # in PROVIDES. While RPM functions correctly when such deps exist, | |
63 | # they make the metadata a bit bloated. | |
64 | ||
65 | # Filter out dups from both lists | |
66 | REQUIRES=$(echo "$REQUIRES" | sort | uniq) | |
67 | PROVIDES=$(echo "$PROVIDES" | sort | uniq) | |
68 | ||
69 | # | |
70 | # Get a list of elements that exist in exactly one of PROVIDES or REQUIRES | |
71 | # | |
72 | UNIQ=$(echo "$PROVIDES | |
73 | $REQUIRES" | sort | uniq -u) | |
74 | ||
75 | # | |
76 | # Of those, only choose the ones that are in REQUIRES | |
77 | # | |
78 | echo "$UNIQ | |
79 | $REQUIRES" | sort | uniq -d |