]>
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 | # | |
269cad96 | 7 | # needs 'pear' for 'pear make-rpm-spec' command, ./builder for fetching sources. |
6f7ba2b5 | 8 | # You should have all PEAR packages installed to get best results (needed for epoch autodetection) |
dd7e9d0e | 9 | # |
269cad96 ER |
10 | # To create completely new PEAR package spec, follow something like this: |
11 | # $ pear download RDF-alpha | |
12 | # File RDF-0.1.0alpha1.tgz downloaded | |
13 | # $ pear make-rpm-spec RDF-0.1.0alpha1.tgz | |
14 | # Wrote RPM spec file php-pear-RDF.spec | |
15 | # $ | |
16 | # | |
17 | # TODO: adjust similiarily noautoreqdeps | |
18 | # BUGS: the beta portions in version deps could be wrong (php-4.3.0b1 and alike) | |
c4bf44d2 | 19 | # see php-pear-DBA_Relational.spec |
62e972e1 | 20 | # Something strange: Requires: php-common < 4:3:5.1 |
dd7e9d0e | 21 | # |
62e972e1 ER |
22 | # NOTE: old version of this script which was used to convert to new package format is in CVS branch MIGRATE. |
23 | # | |
24 | # Send blames and beer\b\b\b\bideas to glen@pld-linux.org | |
dd7e9d0e | 25 | |
70f6b6a6 ER |
26 | set -e |
27 | spec="$1" | |
dd7e9d0e ER |
28 | if [ -z "$spec" ]; then |
29 | echo >&2 "Usage: $0 SPECFILE" | |
30 | exit 0 | |
31 | fi | |
32 | if [ ! -f "$spec" ]; then | |
33 | echo >&2 "$spec doesn't exist?" | |
34 | exit 1 | |
35 | fi | |
c4bf44d2 | 36 | |
15cbfeac ER |
37 | if [[ "$(rpm -q php-pear-PEAR_Command_Packaging)" == *is?not* ]]; then |
38 | echo >&2 "Please install php-pear-PEAR_Command_Packaging" | |
39 | exit 1 | |
ea573965 | 40 | fi |
15cbfeac | 41 | echo "Processing $spec" |
ea573965 | 42 | |
390d2e8f ER |
43 | getsource() { |
44 | local spec="$1" | |
45 | local NR="$2" | |
46 | rpmbuild --nodigest --nosignature -bp --define 'prep %dump' $spec 2>&1 | awk "/SOURCE$NR\t/ {print \$3}" | |
47 | } | |
48 | ||
49 | tarball=$(getsource $spec 0) | |
cb64a2ce ER |
50 | if [ -z "$tarball" ]; then |
51 | echo >&2 "Spec is missing Source0!" | |
52 | exit 1 | |
53 | fi | |
70f6b6a6 | 54 | |
c5ad552d ER |
55 | if [ ! -f $tarball ]; then |
56 | ./builder -g "$spec" | |
57 | fi | |
58 | ||
4188dbdf | 59 | stmp=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
e1b244a6 | 60 | template=pearize.spec |
4188dbdf ER |
61 | cat > $stmp <<'EOF' |
62 | @extra_headers@ | |
5e551ed7 ER |
63 | License: @release_license@ |
64 | State: @release_state@ | |
4188dbdf | 65 | EOF |
e1b244a6 | 66 | pear make-rpm-spec --spec-template=$stmp --output=$template $tarball |
0c79d776 ER |
67 | rm -f $stmp |
68 | ||
5e241fea ER |
69 | mv $template .$template~ |
70 | template=.$template~ | |
19133cbd | 71 | |
dd7e9d0e ER |
72 | # take as argument dependency in form NAME EQUALITY VERSION |
73 | # adds rpm epoch to VERSION if the package is installed and has epoch bigger than zero. | |
74 | add_epoch() { | |
75 | local dep="$@" | |
76 | local pkg="$1" | |
a52e6b27 | 77 | local qual="$2" |
a36710cb ER |
78 | local ver="$3" |
79 | ||
a52e6b27 ER |
80 | if [ "$pkg" == "php-pear-PEAR" ]; then |
81 | pkg="php-pear-PEAR-core" | |
82 | fi | |
83 | ||
84 | case "$pkg" in | |
85 | php-pear-PEAR-core) | |
86 | ver=$(echo "$ver" | sed -e 's,1.4.0b1,1.4.0-0.b1,') | |
87 | ;; | |
88 | esac | |
89 | ||
90 | dep="$pkg $qual $ver" | |
91 | ||
a36710cb ER |
92 | # already have epoch |
93 | if [[ "$ver" = *:* ]]; then | |
94 | echo "$dep" | |
95 | return | |
96 | fi | |
97 | ||
dd7e9d0e ER |
98 | query=$(rpm -q --qf '%{epoch}\n' $pkg || :) |
99 | epoch=$(echo "$query" | grep -v 'installed' || :) | |
100 | if [ "$epoch" ] && [ "$epoch" -gt 0 ]; then | |
63dd75f0 | 101 | echo "$dep" | sed -e "s, [<>=]\+ ,&$epoch:," |
dd7e9d0e ER |
102 | else |
103 | echo "$dep" | |
104 | fi | |
19133cbd ER |
105 | } |
106 | ||
5e551ed7 ER |
107 | preamble=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
108 | # take just main package preamble, preamble of tests (and other) subpackage(s) just confuses things. | |
109 | sed -ne '/^Name:/,/^BuildRoot/p' $spec > $preamble | |
110 | ||
dd7e9d0e ER |
111 | # create backup |
112 | bak=$(cp -fbv $spec $spec | awk '{print $NF}' | tr -d "['\`]" ) | |
19133cbd | 113 | |
5e551ed7 | 114 | # parse requires |
0b6459e9 ER |
115 | requires=$(grep '^BuildRequires:' $template || :) |
116 | if [ -n "$requires" ]; then | |
117 | echo "$requires" | while read tag dep; do | |
118 | dep=$(add_epoch $dep) | |
119 | if ! grep -q "^BuildRequires:.*$dep" $preamble; then | |
120 | sed -i -e "/^BuildRoot/iBuildRequires:\t$dep" $spec | |
121 | fi | |
122 | done | |
123 | fi | |
124 | ||
5e551ed7 | 125 | requires=$(grep '^Requires:' $template || :) |
dd7e9d0e ER |
126 | if [ -n "$requires" ]; then |
127 | echo "$requires" | while read tag dep; do | |
128 | dep=$(add_epoch $dep) | |
129 | if ! grep -q "^Requires:.*$dep" $preamble; then | |
130 | sed -i -e "/^BuildRoot/iRequires:\t$dep" $spec | |
131 | fi | |
132 | done | |
c9f81079 ER |
133 | fi |
134 | ||
5e551ed7 ER |
135 | # parse conflicts |
136 | conflicts=$(grep '^Conflicts:' $template || :) | |
dd7e9d0e | 137 | if [ -n "$conflicts" ]; then |
df07ff19 | 138 | echo "$conflicts" | while read tag dep; do |
dd7e9d0e ER |
139 | dep=$(add_epoch $dep) |
140 | if ! grep -q "^Conflicts:.*$req" $preamble; then | |
141 | sed -i -e "/^BuildRoot/iConflicts:\t$dep" $spec | |
142 | fi | |
143 | done | |
05779902 ER |
144 | fi |
145 | ||
cb4369bd | 146 | # parse optional deps |
0b6459e9 | 147 | optional=$(grep '^Suggests:' $template || :) |
cb4369bd ER |
148 | if [ -n "$optional" ]; then |
149 | echo "$optional" | while read tag dep; do | |
150 | for req in $dep; do | |
a673f50f ER |
151 | # strip single quotes that default template includes in @optional@ expand |
152 | # TODO: remove in php-pear-PEAR_Command_Packaging package | |
153 | req=${req#\'} req=${req%\'} | |
bae3c76f | 154 | m=$(grep "^%define.*_noautoreq" $spec || :) |
cb4369bd | 155 | if [ -z "$m" ]; then |
bae3c76f ER |
156 | sed -i -e "/^BuildRoot:/{ |
157 | a | |
158 | a# exclude optional dependencies | |
159 | a%define\ \ _noautoreq\ $req | |
160 | } | |
161 | " $spec | |
162 | else | |
163 | m=$(echo "$m" | grep -o "$req" || :) | |
164 | if [ -z "$m" ]; then | |
165 | sed -i -e "/^%define.*_noautoreq/s,$, $req," $spec | |
166 | fi | |
cb4369bd ER |
167 | fi |
168 | done | |
169 | done | |
170 | fi | |
e1b244a6 ER |
171 | |
172 | optional=$(grep '^Optional-ext:' $template || :) | |
173 | if [ -n "$optional" ]; then | |
174 | tmp=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") | |
175 | echo "$optional" | while read tag ext; do | |
176 | grep -q "PHP extension .$ext" && continue | |
177 | cat > $tmp <<-EOF | |
178 | echo '%{name} can optionally use PHP extension "$ext"' >> optional-packages.txt | |
179 | EOF | |
180 | sed -i -e " | |
181 | /%pear_package_setup/ { | |
182 | r $tmp | |
183 | } | |
184 | " $spec | |
185 | done | |
186 | rm -f .ext.tmp | |
187 | fi | |
188 | ||
887577bd | 189 | has_opt=$(grep -Ec '^Optional-(pkg|ext):' $template || :) |
b299cb78 | 190 | if [ "$has_opt" -gt 0 ]; then |
5e4ba850 ER |
191 | if ! grep -q 'rpmbuild(macros)' $spec; then |
192 | sed -i -e ' | |
193 | /rpm-php-pearprov/{ | |
194 | aBuildRequires: rpmbuild(macros) >= 1.300 | |
195 | } | |
196 | ' $spec | |
197 | fi | |
198 | if ! grep -Eq '%{_docdir}/.*/optional-packages.txt|%pear_package_print_optionalpackages' $spec; then | |
b299cb78 | 199 | sed -i -e ' |
20aec7a3 | 200 | /^%files$/{ |
5e4ba850 ER |
201 | i%post -p <lua> |
202 | i%pear_package_print_optionalpackages | |
b299cb78 ER |
203 | i |
204 | } | |
5e4ba850 ER |
205 | /rpmbuild(macros)/{ |
206 | s/>=.*/>= 1.571/ | |
207 | } | |
07dbc9c8 ER |
208 | ' $spec |
209 | fi | |
210 | if ! grep -q '%doc.*optional-packages.txt' $spec; then | |
211 | sed -i -e ' | |
b299cb78 ER |
212 | /^%doc install.log/{ |
213 | s/$/ optional-packages.txt/ | |
214 | } | |
215 | ' $spec | |
216 | fi | |
217 | fi | |
cb4369bd | 218 | |
5e551ed7 ER |
219 | # parse state |
220 | state=$(awk '/^State:/{print $2}' $template) | |
221 | sed -i -e "/^%define.*_status/{ | |
222 | /%define.*_status.*$state/!s/.*/%define\t\t_status\t\t$state/ | |
223 | }" $spec | |
224 | ||
dd7e9d0e | 225 | rm -f $preamble |
4d240bd1 | 226 | |
dd7e9d0e ER |
227 | diff=$(mktemp "${TMPDIR:-/tmp}/fragXXXXXX") |
228 | if ! diff -u $bak $spec > $diff; then | |
229 | vim -o $spec $diff | |
230 | rm -f $diff | |
231 | else | |
232 | echo "$spec: No diffs" | |
4d240bd1 | 233 | fi |
c4bf44d2 | 234 | #exit 1 |