]>
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 | # | |
62e972e1 | 7 | # needs 'pear' for 'pear makerpm' command, ./builder for fetching sources. |
6f7ba2b5 | 8 | # You should have all PEAR packages installed to get best results (needed for epoch autodetection) |
dd7e9d0e ER |
9 | # |
10 | # todo: adjust similiarily noautoreqdeps | |
c4bf44d2 ER |
11 | # bugs: the beta portions in version deps could be wrong (php-4.3.0b1 and alike) |
12 | # see php-pear-DBA_Relational.spec | |
62e972e1 | 13 | # Something strange: Requires: php-common < 4:3:5.1 |
dd7e9d0e | 14 | # |
62e972e1 ER |
15 | # NOTE: old version of this script which was used to convert to new package format is in CVS branch MIGRATE. |
16 | # | |
17 | # Send blames and beer\b\b\b\bideas to glen@pld-linux.org | |
dd7e9d0e | 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 | 30 | |
ea573965 ER |
31 | if [[ "$(rpm -q php-pear-PEAR_Command_Packaging)" = *is*not* ]]; then |
32 | echo >&2 "Please install php-pear-PEAR_Command_Packaging package" | |
33 | fi | |
34 | ||
390d2e8f ER |
35 | getsource() { |
36 | local spec="$1" | |
37 | local NR="$2" | |
38 | rpmbuild --nodigest --nosignature -bp --define 'prep %dump' $spec 2>&1 | awk "/SOURCE$NR\t/ {print \$3}" | |
39 | } | |
40 | ||
41 | tarball=$(getsource $spec 0) | |
cb64a2ce ER |
42 | if [ -z "$tarball" ]; then |
43 | echo >&2 "Spec is missing Source0!" | |
44 | exit 1 | |
45 | fi | |
70f6b6a6 | 46 | |
c5ad552d ER |
47 | if [ ! -f $tarball ]; then |
48 | ./builder -g "$spec" | |
49 | fi | |
50 | ||
4188dbdf ER |
51 | stmp=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
52 | cat > $stmp <<'EOF' | |
53 | @extra_headers@ | |
54 | Optional: @optional@ | |
d5150240 ER |
55 | @optional-pkg@ |
56 | @optional-ext@ | |
5e551ed7 ER |
57 | License: @release_license@ |
58 | State: @release_state@ | |
4188dbdf | 59 | EOF |
cb64a2ce | 60 | pear make-rpm-spec --spec-template=$stmp --output=pearize.spec $tarball |
95c0e2f7 | 61 | template=pearize.spec |
0c79d776 ER |
62 | rm -f $stmp |
63 | ||
5e241fea ER |
64 | mv $template .$template~ |
65 | template=.$template~ | |
19133cbd | 66 | |
dd7e9d0e ER |
67 | # take as argument dependency in form NAME EQUALITY VERSION |
68 | # adds rpm epoch to VERSION if the package is installed and has epoch bigger than zero. | |
69 | add_epoch() { | |
70 | local dep="$@" | |
71 | local pkg="$1" | |
a36710cb ER |
72 | local ver="$3" |
73 | ||
74 | # already have epoch | |
75 | if [[ "$ver" = *:* ]]; then | |
76 | echo "$dep" | |
77 | return | |
78 | fi | |
79 | ||
dd7e9d0e ER |
80 | query=$(rpm -q --qf '%{epoch}\n' $pkg || :) |
81 | epoch=$(echo "$query" | grep -v 'installed' || :) | |
82 | if [ "$epoch" ] && [ "$epoch" -gt 0 ]; then | |
63dd75f0 | 83 | echo "$dep" | sed -e "s, [<>=]\+ ,&$epoch:," |
dd7e9d0e ER |
84 | else |
85 | echo "$dep" | |
86 | fi | |
19133cbd ER |
87 | } |
88 | ||
5e551ed7 ER |
89 | preamble=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
90 | # take just main package preamble, preamble of tests (and other) subpackage(s) just confuses things. | |
91 | sed -ne '/^Name:/,/^BuildRoot/p' $spec > $preamble | |
92 | ||
dd7e9d0e ER |
93 | # create backup |
94 | bak=$(cp -fbv $spec $spec | awk '{print $NF}' | tr -d "['\`]" ) | |
19133cbd | 95 | |
5e551ed7 ER |
96 | # parse requires |
97 | requires=$(grep '^Requires:' $template || :) | |
dd7e9d0e ER |
98 | if [ -n "$requires" ]; then |
99 | echo "$requires" | while read tag dep; do | |
100 | dep=$(add_epoch $dep) | |
101 | if ! grep -q "^Requires:.*$dep" $preamble; then | |
102 | sed -i -e "/^BuildRoot/iRequires:\t$dep" $spec | |
103 | fi | |
104 | done | |
c9f81079 ER |
105 | fi |
106 | ||
5e551ed7 ER |
107 | # parse conflicts |
108 | conflicts=$(grep '^Conflicts:' $template || :) | |
dd7e9d0e | 109 | if [ -n "$conflicts" ]; then |
df07ff19 | 110 | echo "$conflicts" | while read tag dep; do |
dd7e9d0e ER |
111 | dep=$(add_epoch $dep) |
112 | if ! grep -q "^Conflicts:.*$req" $preamble; then | |
113 | sed -i -e "/^BuildRoot/iConflicts:\t$dep" $spec | |
114 | fi | |
115 | done | |
05779902 ER |
116 | fi |
117 | ||
cb4369bd ER |
118 | # parse optional deps |
119 | optional=$(grep '^Optional:' $template || :) | |
120 | if [ -n "$optional" ]; then | |
121 | echo "$optional" | while read tag dep; do | |
122 | for req in $dep; do | |
bae3c76f | 123 | m=$(grep "^%define.*_noautoreq" $spec || :) |
cb4369bd | 124 | if [ -z "$m" ]; then |
bae3c76f ER |
125 | sed -i -e "/^BuildRoot:/{ |
126 | a | |
127 | a# exclude optional dependencies | |
128 | a%define\ \ _noautoreq\ $req | |
129 | } | |
130 | " $spec | |
131 | else | |
132 | m=$(echo "$m" | grep -o "$req" || :) | |
133 | if [ -z "$m" ]; then | |
134 | sed -i -e "/^%define.*_noautoreq/s,$, $req," $spec | |
135 | fi | |
cb4369bd ER |
136 | fi |
137 | done | |
138 | done | |
139 | fi | |
a12e7b76 | 140 | has_opt=$(egrep -c '^Optional-(pkg|ext):' $template || :) |
b299cb78 | 141 | if [ "$has_opt" -gt 0 ]; then |
07dbc9c8 | 142 | if ! grep -q '%{_docdir}/.*/optional-packages.txt' $spec; then |
b299cb78 | 143 | sed -i -e ' |
20aec7a3 | 144 | /^%files$/{ |
b299cb78 ER |
145 | i%post |
146 | iif [ -f %{_docdir}/%{name}-%{version}/optional-packages.txt ]; then | |
147 | i\ cat %{_docdir}/%{name}-%{version}/optional-packages.txt | |
148 | ifi | |
149 | i | |
150 | } | |
07dbc9c8 ER |
151 | ' $spec |
152 | fi | |
153 | if ! grep -q '%doc.*optional-packages.txt' $spec; then | |
154 | sed -i -e ' | |
b299cb78 ER |
155 | /^%doc install.log/{ |
156 | s/$/ optional-packages.txt/ | |
157 | } | |
158 | ' $spec | |
159 | fi | |
160 | fi | |
cb4369bd | 161 | |
5e551ed7 ER |
162 | # parse state |
163 | state=$(awk '/^State:/{print $2}' $template) | |
164 | sed -i -e "/^%define.*_status/{ | |
165 | /%define.*_status.*$state/!s/.*/%define\t\t_status\t\t$state/ | |
166 | }" $spec | |
167 | ||
dd7e9d0e | 168 | rm -f $preamble |
4d240bd1 | 169 | |
dd7e9d0e ER |
170 | diff=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
171 | if ! diff -u $bak $spec > $diff; then | |
172 | vim -o $spec $diff | |
173 | rm -f $diff | |
174 | else | |
175 | echo "$spec: No diffs" | |
4d240bd1 | 176 | fi |
c4bf44d2 | 177 | #exit 1 |