]> git.pld-linux.org Git - packages/rpm.git/blame - find-java-req.sh
- enable __java_provides
[packages/rpm.git] / find-java-req.sh
CommitLineData
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
8export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
95593bd3 9
95593bd3 10javaclassversion() {
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
19javajarversion() {
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
31FILES=$(cat -)
32
33REQUIRES=$(
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
48PROVIDES=$(
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
66REQUIRES=$(echo "$REQUIRES" | sort | uniq)
67PROVIDES=$(echo "$PROVIDES" | sort | uniq)
68
69#
70# Get a list of elements that exist in exactly one of PROVIDES or REQUIRES
71#
72UNIQ=$(echo "$PROVIDES
73$REQUIRES" | sort | uniq -u)
74
75#
76# Of those, only choose the ones that are in REQUIRES
77#
78echo "$UNIQ
79$REQUIRES" | sort | uniq -d
This page took 0.031898 seconds and 4 git commands to generate.