]>
Commit | Line | Data |
---|---|---|
70f6b6a6 | 1 | #!/bin/sh |
dd7e9d0e ER |
2 | # updates php-pear .spec with Requires/Conflicts lines. |
3 | # the items are added randomly to the preamble, but once added their order is left intact. | |
4 | # it is still better than nothing. if somebody wishes to add sorting in this | |
5 | # script. i'd be just glad :) | |
6 | # | |
7 | # needs pear makerpm command. | |
70f6b6a6 | 8 | # requires tarball to exist in ../SOURCES. |
c4bf44d2 | 9 | # you should have all pear packages installed to get best results |
dd7e9d0e ER |
10 | # |
11 | # todo: adjust similiarily noautoreqdeps | |
c4bf44d2 ER |
12 | # bugs: the beta portions in version deps could be wrong (php-4.3.0b1 and alike) |
13 | # see php-pear-DBA_Relational.spec | |
14 | # SOmething strange: Requires: php-common < 4:3:5.1 | |
dd7e9d0e ER |
15 | # |
16 | # note: old version pf this script which was used to convert to new package format is in CVS branch MIGRATE | |
17 | # send blames and beer\b\b\b\bideas to glen@pld-linux.org | |
18 | ||
70f6b6a6 ER |
19 | set -e |
20 | spec="$1" | |
dd7e9d0e ER |
21 | if [ -z "$spec" ]; then |
22 | echo >&2 "Usage: $0 SPECFILE" | |
23 | exit 0 | |
24 | fi | |
25 | if [ ! -f "$spec" ]; then | |
26 | echo >&2 "$spec doesn't exist?" | |
27 | exit 1 | |
28 | fi | |
ae02a056 | 29 | echo "Processing $spec" |
c4bf44d2 ER |
30 | |
31 | rc=$(awk '/^%define.*_rc/{print $NF}' $spec) | |
32 | pre=$(awk '/^%define.*_pre/{print $NF}' $spec) | |
33 | beta=$(awk '/^%define.*_beta/{print $NF}' $spec) | |
34 | tarball=$(rpm -q --qf "../SOURCES/%{name}-%{version}$rc$pre$beta.tgz\n" --specfile "$spec" | head -n 1 | sed -e 's,php-pear-,,') | |
70f6b6a6 | 35 | |
4188dbdf ER |
36 | stmp=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
37 | cat > $stmp <<'EOF' | |
38 | @extra_headers@ | |
39 | Optional: @optional@ | |
d5150240 ER |
40 | @optional-pkg@ |
41 | @optional-ext@ | |
5e551ed7 ER |
42 | License: @release_license@ |
43 | State: @release_state@ | |
4188dbdf | 44 | EOF |
bbbc8380 | 45 | template=$(pear makerpm --spec-template=$stmp $tarball | awk '/Wrote RPM spec file/{print $NF}{print $0 > "/dev/stderr"}') |
0c79d776 ER |
46 | rm -f $stmp |
47 | ||
5e241fea ER |
48 | mv $template .$template~ |
49 | template=.$template~ | |
19133cbd | 50 | |
dd7e9d0e ER |
51 | # take as argument dependency in form NAME EQUALITY VERSION |
52 | # adds rpm epoch to VERSION if the package is installed and has epoch bigger than zero. | |
53 | add_epoch() { | |
54 | local dep="$@" | |
55 | local pkg="$1" | |
a36710cb ER |
56 | local ver="$3" |
57 | ||
58 | # already have epoch | |
59 | if [[ "$ver" = *:* ]]; then | |
60 | echo "$dep" | |
61 | return | |
62 | fi | |
63 | ||
dd7e9d0e ER |
64 | query=$(rpm -q --qf '%{epoch}\n' $pkg || :) |
65 | epoch=$(echo "$query" | grep -v 'installed' || :) | |
66 | if [ "$epoch" ] && [ "$epoch" -gt 0 ]; then | |
63dd75f0 | 67 | echo "$dep" | sed -e "s, [<>=]\+ ,&$epoch:," |
dd7e9d0e ER |
68 | else |
69 | echo "$dep" | |
70 | fi | |
19133cbd ER |
71 | } |
72 | ||
5e551ed7 ER |
73 | preamble=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
74 | # take just main package preamble, preamble of tests (and other) subpackage(s) just confuses things. | |
75 | sed -ne '/^Name:/,/^BuildRoot/p' $spec > $preamble | |
76 | ||
dd7e9d0e ER |
77 | # create backup |
78 | bak=$(cp -fbv $spec $spec | awk '{print $NF}' | tr -d "['\`]" ) | |
19133cbd | 79 | |
5e551ed7 ER |
80 | # parse requires |
81 | requires=$(grep '^Requires:' $template || :) | |
dd7e9d0e ER |
82 | if [ -n "$requires" ]; then |
83 | echo "$requires" | while read tag dep; do | |
84 | dep=$(add_epoch $dep) | |
85 | if ! grep -q "^Requires:.*$dep" $preamble; then | |
86 | sed -i -e "/^BuildRoot/iRequires:\t$dep" $spec | |
87 | fi | |
88 | done | |
c9f81079 ER |
89 | fi |
90 | ||
5e551ed7 ER |
91 | # parse conflicts |
92 | conflicts=$(grep '^Conflicts:' $template || :) | |
dd7e9d0e | 93 | if [ -n "$conflicts" ]; then |
df07ff19 | 94 | echo "$conflicts" | while read tag dep; do |
dd7e9d0e ER |
95 | dep=$(add_epoch $dep) |
96 | if ! grep -q "^Conflicts:.*$req" $preamble; then | |
97 | sed -i -e "/^BuildRoot/iConflicts:\t$dep" $spec | |
98 | fi | |
99 | done | |
05779902 ER |
100 | fi |
101 | ||
cb4369bd ER |
102 | # parse optional deps |
103 | optional=$(grep '^Optional:' $template || :) | |
104 | if [ -n "$optional" ]; then | |
105 | echo "$optional" | while read tag dep; do | |
106 | for req in $dep; do | |
961c2719 | 107 | m=$(grep "^%define.*_noautoreq" $spec | grep -o "$req" || :) |
cb4369bd | 108 | if [ -z "$m" ]; then |
961c2719 | 109 | sed -i -e "/^%define.*_noautoreq/s,$, $req," $spec |
cb4369bd ER |
110 | fi |
111 | done | |
112 | done | |
113 | fi | |
114 | ||
5e551ed7 ER |
115 | # parse state |
116 | state=$(awk '/^State:/{print $2}' $template) | |
117 | sed -i -e "/^%define.*_status/{ | |
118 | /%define.*_status.*$state/!s/.*/%define\t\t_status\t\t$state/ | |
119 | }" $spec | |
120 | ||
dd7e9d0e | 121 | rm -f $preamble |
4d240bd1 | 122 | |
dd7e9d0e ER |
123 | diff=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
124 | if ! diff -u $bak $spec > $diff; then | |
125 | vim -o $spec $diff | |
126 | rm -f $diff | |
127 | else | |
128 | echo "$spec: No diffs" | |
4d240bd1 | 129 | fi |
c4bf44d2 | 130 | #exit 1 |