]>
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 | ||
94b6a080 | 33 | find_requires() { |
facae03a ER |
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 | |
94b6a080 | 46 | } |
facae03a | 47 | |
94b6a080 | 48 | find_provides() { |
facae03a ER |
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 | |
94b6a080 ER |
59 | } |
60 | ||
61 | REQUIRES=$(find_requires) | |
62 | PROVIDES=$(find_provides) | |
facae03a ER |
63 | |
64 | # This is a little magic trick to get all REQUIRES that are not | |
65 | # in PROVIDES. While RPM functions correctly when such deps exist, | |
66 | # they make the metadata a bit bloated. | |
67 | ||
68 | # Filter out dups from both lists | |
69 | REQUIRES=$(echo "$REQUIRES" | sort | uniq) | |
70 | PROVIDES=$(echo "$PROVIDES" | sort | uniq) | |
71 | ||
72 | # | |
73 | # Get a list of elements that exist in exactly one of PROVIDES or REQUIRES | |
74 | # | |
75 | UNIQ=$(echo "$PROVIDES | |
76 | $REQUIRES" | sort | uniq -u) | |
77 | ||
78 | # | |
79 | # Of those, only choose the ones that are in REQUIRES | |
80 | # | |
81 | echo "$UNIQ | |
82 | $REQUIRES" | sort | uniq -d |