]> git.pld-linux.org Git - packages/rpm-build-tools.git/blame - adapter.sh
- reverted (mistake)
[packages/rpm-build-tools.git] / adapter.sh
CommitLineData
efd28552 1#!/bin/sh
d5f65bb3 2#
d5f65bb3 3# Authors:
d3da6a6e 4# Michał Kuratczyk <kura@pld.org.pl>
d5f65bb3 5# Sebastian Zagrodzki <s.zagrodzki@mimuw.edu.pl>
d3da6a6e 6# Tomasz Kłoczko <kloczek@rudy.mif.pg.gda.pl>
d5f65bb3
ER
7# Artur Frysiak <wiget@pld-linux.org>
8# Michal Kochanowicz <mkochano@pld.org.pl>
d3da6a6e 9# Elan Ruusamäe <glen@pld-linux.org>
d5f65bb3
ER
10#
11# See cvs log adapter{,.awk} for list of contributors
12#
13# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
3c92ff73 14
b8f9e95a
ER
15RCSID='$Id$'
16r=${RCSID#* * }
17rev=${r%% *}
18VERSION="v0.31/$rev"
19VERSIONSTRING="\
20Adapter adapts .spec files for PLD Linux.
21$VERSION (C) 1999-2008 Free Penguins".
22
5dcb40f6 23self=$(basename "$0")
cc0b76cd 24adapter=$(dirname "$0")/adapter.awk
0de62947
ER
25usage="Usage: $self [FLAGS] SPECFILE
26
27-s|--no-sort|--skip-sort
28 skip BuildRequires, Requires sorting
29-m|--no-macros|--skip-macros
30 skip use_macros() substitutions
31-d|--skip-desc
32 skip desc wrapping
33-a|--skip-defattr
34 skip %defattr corrections
35
36"
2ce02c4e 37
cb71b7bb 38if [ ! -x /usr/bin/getopt ]; then
2ce02c4e
ER
39 echo >&1 "You need to install util-linux to use adapter"
40 exit 1
cb71b7bb 41fi
2ce02c4e 42
434dadba
ER
43if [ ! -x /usr/bin/patch ]; then
44 echo >&1 "You need to install patch to use adapter"
45 exit 1
46fi
47
b8f9e95a 48t=$(getopt -o hsmdaV --long help,version,sort,sort-br,no-macros,skip-macros,skip-desc,skip-defattr -n "$self" -- "$@") || exit $?
5dcb40f6
ER
49eval set -- "$t"
50
51while true; do
52 case "$1" in
53 -h|--help)
54 echo 2>&1 "$usage"
55 exit 1
56 ;;
0de62947
ER
57 -s|--no-sort|--skip-sort)
58 export SKIP_SORTBR=1
5dcb40f6 59 ;;
ff9e2987
ER
60 -m|--no-macros|--skip-macros)
61 export SKIP_MACROS=1
62 ;;
63 -d|--skip-desc)
64 export SKIP_DESC=1
65 ;;
66 -a|--skip-defattr)
67 export SKIP_DEFATTR=1
68 ;;
b8f9e95a
ER
69 -V|--version)
70 echo "$VERSIONSTRING"
71 exit 0
72 ;;
5dcb40f6
ER
73 --)
74 shift
8afece54 75 break
5dcb40f6
ER
76 ;;
77 *)
78 echo 2>&1 "$self: Internal error: [$1] not recognized!"
79 exit 1
8afece54 80 ;;
5dcb40f6
ER
81 esac
82 shift
83done
84
d5f65bb3
ER
85diffcol()
86{
87 # vim like diff colourization
88 sed -e '
89 s,\e,\e[44m^[\e[49m,g;
90 s,\a,\e[44m^G\e[49m,g;
91 s,^\(Index:\|diff\|---\|+++\) .*$,\e[32m&,;
92 s,^@@ ,\e[33m&,g;
93 s,^-,\e[35m&,;
94 s,^+,\e[36m&,;
65b4350a 95 s,\r,\e[44m^M\e[49m,g;
d5f65bb3
ER
96 s, , ,g;
97 s,\([^[:space:]]\)\([[:space:]]\+\)$,\1\e[41m\2\e[49m,g;
98 s,$,\e[0m,
99 ' "$@"
100}
101
102diff2hunks()
103{
104 # diff2hunks orignally by dig
105 perl -e '
106#! /usr/bin/perl -w
107
108use strict;
109
110for my $filename (@ARGV) {
8afece54
ER
111 my $counter = 1;
112 my $fh;
113 open $fh, "<", $filename or die "$filename: open for reading: $!";
114 my @lines = <$fh>;
115 my @hunks;
116 my @curheader;
117 for my $i (0 ... $#lines) {
118 next unless $lines[$i] =~ m/^\@\@ /;
119 if ($i >= 2 and $lines[$i - 2] =~ m/^--- / and $lines[$i - 1] =~ m/^\+\+\+ /) {
120 @curheader = @lines[$i - 2 ... $i - 1];
121 }
122 next unless @curheader;
123 my $j = $i + 1;
124 while ($j < @lines and $lines[$j] !~ m/^\@\@ /) {$j++}
125 $j -= 2
126 if $j >= 3 and $j < @lines
127 and $lines[$j - 2] =~ m/^--- /
128 and $lines[$j - 1] =~ m/^\+\+\+ /;
129 $j--;
130 $j-- until $lines[$j] =~ m/^[ @+-]/;
131 my $hunkfilename = $filename;
132 $hunkfilename =~ s/((\.(pat(ch)?|diff?))?)$/"-".sprintf("%03i",$counter++).$1/ei;
133 my $ofh;
134 open $ofh, ">", $hunkfilename or die "$hunkfilename: open for writing: $!";
135 print $ofh @curheader, @lines[$i ... $j];
136 close $ofh;
137 }
d5f65bb3
ER
138}
139' "$@"
140}
141
dfff3476
ER
142# import selected macros for adapter.awk
143# you should update the list also in adapter.awk when making changes here
144import_rpm_macros() {
145 macros="
146 _sourcedir
147 _prefix
148 _bindir
149 _sbindir
150 _libdir
151 _sysconfdir
152 _datadir
153 _includedir
154 _mandir
155 _infodir
156 _examplesdir
157 _defaultdocdir
158 _kdedocdir
159 _gtkdocdir
160 _desktopdir
161 _pixmapsdir
162 _javadir
163
164 perl_sitearch
165 perl_archlib
166 perl_privlib
167 perl_vendorlib
168 perl_vendorarch
169 perl_sitelib
170
171 py_sitescriptdir
172 py_sitedir
173 py_scriptdir
174 py_ver
175
176 ruby_archdir
177 ruby_ridir
178 ruby_rubylibdir
179 ruby_sitearchdir
180 ruby_sitelibdir
181
182 php_pear_dir
183 php_data_dir
184 tmpdir
185"
186 eval_expr=""
187 for macro in $macros; do
188 eval_expr="$eval_expr\nexport $macro='%{$macro}'"
189 done
190
191
192 # get cvsaddress for changelog section
193 # using rpm macros as too lazy to add ~/.adapterrc parsing support.
194 eval_expr="$eval_expr
195 export _cvsmaildomain='%{?_cvsmaildomain}%{!?_cvsmaildomain:@pld-linux.org}'
196 export _cvsmailfeedback='%{?_cvsmailfeedback}%{!?_cvsmailfeedback:PLD Team <feedback@pld-linux.org>}'
197 "
198
199 eval $(rpm --eval "$(echo -e $eval_expr)")
200}
201
202adapterize() {
203 local workdir
204 workdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit
8afece54
ER
205 if grep -q '\.UTF-8' $SPECFILE; then
206 awk=gawk
207 else
208 awk=awk
209 fi
8afece54 210
dfff3476
ER
211 local tmp=$workdir/$(basename $SPECFILE) || exit
212
213 import_rpm_macros
214
2864da1a
ER
215 $awk -f $adapter $SPECFILE > $tmp || exit
216
217 if [ "$(diff --brief $SPECFILE $tmp)" ]; then
218 diff -u $SPECFILE $tmp > $tmp.diff
8afece54 219 if [ -t 1 ]; then
2864da1a 220 diffcol $tmp.diff | less -r
d5f65bb3 221 while : ; do
8afece54
ER
222 echo -n "Accept? (Yes, No, Confirm each chunk)? "
223 read ans
224 case "$ans" in
225 [yYoO]) # y0 mama
2864da1a 226 mv -f $tmp $SPECFILE
8afece54
ER
227 echo "Ok, adapterized."
228 break
229 ;;
230 [cC]) # confirm each chunk
2864da1a
ER
231 diff2hunks $tmp.diff
232 for t in $(ls $tmp-*.diff); do
d5f65bb3 233 diffcol $t | less -r
4f4ec912 234 echo -n "Accept? (Yes, [N]o, Quit)? "
d5f65bb3
ER
235 read ans
236 case "$ans" in
237 [yYoO]) # y0 mama
238 patch < $t
239 ;;
8afece54 240 [Q]) # Abort
4f4ec912
ER
241 break
242 ;;
d5f65bb3 243 esac
8afece54
ER
244 done
245 break
246 ;;
247 [QqnNsS])
248 echo "Ok, exiting."
249 break
250 ;;
251 esac
d5f65bb3 252 done
8afece54 253 else
2864da1a 254 cat $tmp.diff
8afece54
ER
255 fi
256 else
257 echo "The SPEC is perfect ;)"
258 fi
d5f65bb3 259
dfff3476 260 rm -rf $workdir
d5f65bb3
ER
261}
262
9ec85f5b
AG
263SPECFILE="$1"
264[ -f "$SPECFILE" ] || SPECFILE="$(basename $SPECFILE .spec).spec"
265
266if [ $# -ne 1 -o ! -f "$SPECFILE" ]; then
5dcb40f6
ER
267 echo "$usage"
268 exit 1
3c92ff73 269fi
270
d5f65bb3 271adapterize
This page took 0.057334 seconds and 4 git commands to generate.