]> git.pld-linux.org Git - packages/rpm.git/blob - find-java-req.sh
- avoid syntax errors
[packages/rpm.git] / find-java-req.sh
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:/usr/X11R6/bin"
9
10 javaclassversion() {
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"
21
22         # check only files, symlinks could point outside buildroot
23         [ -f "$jar" -a ! -L "$jar" ] || return
24
25         tmp=$(mktemp -d)
26         unzip -q -d $tmp $jar >&2
27         javaclassversion $(find $tmp -type f -name '*.class')
28         rm -rf $tmp
29 }
30
31 FILES=$(cat -)
32
33 find_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 find_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 REQUIRES=$(find_requires)
62 PROVIDES=$(find_provides)
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
This page took 0.043197 seconds and 4 git commands to generate.