]> git.pld-linux.org Git - packages/rpm.git/blob - find-java-req.sh
- workaround for huge filelist
[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         [ $# -gt 0 ] || return
12
13         local ver
14         classver=$(echo "$@" | xargs -r file | grep -o 'compiled Java class data, version [0-9.]*' | awk '{print $NF}' | sort -u)
15         [ "$classver" ] || return
16         for v in $classver; do
17                 echo "java(ClassDataVersion) >= $v"
18         done
19 }
20
21 javajarversion() {
22         local jar="$1"
23
24         # check only files, symlinks could point outside buildroot
25         [ -f "$jar" -a ! -L "$jar" ] || return
26
27         tmp=$(mktemp -d)
28         unzip -q -d $tmp $jar >&2
29         javaclassversion $(find $tmp -type f -name '*.class')
30         rm -rf $tmp
31 }
32
33 FILES=$(cat -)
34
35 find_requires() {
36         for file in $FILES; do
37                 case $file in
38                 *.jar)
39                         javajarversion "$file"
40                         unzip -p $file | javadeps --requires --rpmformat --keywords -
41                 ;;
42                 *.class)
43                         javaclassversion "$file"
44                         javadeps --requires --rpmformat --keywords $file
45                 ;;
46                 esac
47         done | sort -u
48 }
49
50 find_provides() {
51         for file in $FILES; do
52                 case $file in
53                 *.jar)
54                         unzip -p $file | javadeps --provides --rpmformat --keywords --starprov -
55                 ;;
56                 *.class)
57                         javadeps --provides --rpmformat --keywords --starprov $file
58                 ;;
59                 esac
60         done | sort -u
61 }
62
63 REQUIRES=$(find_requires)
64 PROVIDES=$(find_provides)
65
66 # This is a little magic trick to get all REQUIRES that are not
67 # in PROVIDES. While RPM functions correctly when such deps exist,
68 # they make the metadata a bit bloated.
69
70 # Filter out dups from both lists
71 REQUIRES=$(echo "$REQUIRES" | sort | uniq)
72 PROVIDES=$(echo "$PROVIDES" | sort | uniq)
73
74 #
75 # Get a list of elements that exist in exactly one of PROVIDES or REQUIRES
76 #
77 UNIQ=$(echo "$PROVIDES
78 $REQUIRES" | sort | uniq -u)
79
80 #
81 # Of those, only choose the ones that are in REQUIRES
82 #
83 echo "$UNIQ
84 $REQUIRES" | sort | uniq -d
This page took 0.217735 seconds and 3 git commands to generate.