]> git.pld-linux.org Git - packages/adapter.git/blame - adapter.sh
- print out more info which version was expected and what we got
[packages/adapter.git] / adapter.sh
CommitLineData
d1c51977 1#!/bin/sh
115a3045 2#
115a3045 3# Authors:
b4e337d9 4# Michał Kuratczyk <kura@pld.org.pl>
115a3045 5# Sebastian Zagrodzki <s.zagrodzki@mimuw.edu.pl>
b4e337d9 6# Tomasz Kłoczko <kloczek@rudy.mif.pg.gda.pl>
115a3045
ER
7# Artur Frysiak <wiget@pld-linux.org>
8# Michal Kochanowicz <mkochano@pld.org.pl>
b4e337d9 9# Elan Ruusamäe <glen@pld-linux.org>
115a3045
ER
10#
11# See cvs log adapter{,.awk} for list of contributors
12#
13# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
de8cc9a2 14
18f95017 15RCSID='$Id$'
a4de4386
ER
16REVISION=${RCSID#* * } REVISION=${REVISION%% *}
17VERSION="v0.35/$REVISION"
18f95017
ER
18VERSIONSTRING="\
19Adapter adapts .spec files for PLD Linux.
a4de4386 20$VERSION (C) 1999-2010 Free Penguins".
18f95017 21
ebbb01a1 22PROGRAM=${0##*/}
0709317a 23dir=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
ebbb01a1
ER
24adapter=$dir/adapter.awk
25usage="Usage: $PROGRAM [FLAGS] SPECFILE
bd6bff92
ER
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
deb09aaa
ER
35-o
36 do not do any diffing, just dump the output
bd6bff92 37"
af0e64d6 38
6668d124 39if [ ! -x /usr/bin/getopt ]; then
937febc5 40 echo >&2 "You need to install util-linux to use adapter"
af0e64d6 41 exit 1
6668d124 42fi
af0e64d6 43
d26e80ce 44if [ ! -x /usr/bin/patch ]; then
937febc5 45 echo >&2 "You need to install patch to use adapter"
d26e80ce
ER
46 exit 1
47fi
48
2d894d6b 49[ -n "$PAGER" ] || PAGER="/usr/bin/less -r"
50
51if [ -n "$CONFIG_DIR" ]; then
52 USER_CFG="$CONFIG_DIR/.adapterrc"
53elif [ -n "$HOME_ETC" ]; then
54 USER_CFG="$HOME_ETC/.adapterrc"
55else
56 USER_CFG=~/.adapterrc
57fi
58
59[ -f $USER_CFG ] && . $USER_CFG
60
ebbb01a1 61t=$(getopt -o hsomdaV --long help,version,sort,sort-br,no-macros,skip-macros,skip-desc,skip-defattr -n "$PROGRAM" -- "$@") || exit $?
ea91b16c
ER
62eval set -- "$t"
63
64while true; do
65 case "$1" in
66 -h|--help)
2445505a 67 echo 2>&1 "$usage"
ea91b16c
ER
68 exit 1
69 ;;
bd6bff92
ER
70 -s|--no-sort|--skip-sort)
71 export SKIP_SORTBR=1
ea91b16c 72 ;;
13b24a87
ER
73 -m|--no-macros|--skip-macros)
74 export SKIP_MACROS=1
75 ;;
76 -d|--skip-desc)
77 export SKIP_DESC=1
78 ;;
79 -a|--skip-defattr)
80 export SKIP_DEFATTR=1
81 ;;
18f95017
ER
82 -V|--version)
83 echo "$VERSIONSTRING"
84 exit 0
deb09aaa
ER
85 ;;
86 -o)
87 outputonly=1
18f95017 88 ;;
ea91b16c
ER
89 --)
90 shift
c6185e54 91 break
ea91b16c
ER
92 ;;
93 *)
ebbb01a1 94 echo >&2 "$PROGRAM: Internal error: \`$1' not recognized!"
ea91b16c 95 exit 1
c6185e54 96 ;;
ea91b16c
ER
97 esac
98 shift
99done
100
115a3045
ER
101diffcol()
102{
2445505a 103 # vim like diff colourization
104LC_ALL=en_US.UTF-8 gawk ' {
105 split( $0, S, /\t/ );
106 $0 = S[ 1 ];
107 for ( i = 2; i in S; i++ ) {
108 spaces = 7 - ( (length( $0 ) - 1) % 8 );
109 $0 = $0 "\xE2\x9E\x94";
110 for ( y = 0; y < spaces; y++ )
111 $0 = $0 "\xE2\x87\xBE";
112 $0 = $0 S[ i ];
113 }
114 gsub( /\033/, "\033[44m^[\033[49m" );
115 cmd = "";
116 if ( sub( /^ /, "" ) )
117 cmd = " ";
118 sub( /(\xE2\x9E\x94(\xE2\x87\xBE)*| )+$/, "\033[31;41m&\033[39;49m" );
119 gsub( /\xE2\x9E\x94(\xE2\x87\xBE)*/, "\033[7m&\033[27m" );
120 gsub( /\xE2\x87\xBE/, " " );
121 # uncomment if you do not like utf-8 arrow
122 # gsub( /\xE2\x9E\x94/, ">" );
123 $0 = cmd $0;
124 gsub( /\007/, "\033[44m^G\033[49m" );
125 gsub( /\r/, "\033[44m^M\033[49m" );
126}
127/^(Index:|diff|---|\+\+\+) / { $0 = "\033[32m" $0 }
128/^@@ / { $0 = "\033[33m" $0 }
129/^-/ { $0 = "\033[35m" $0 }
130/^+/ { $0 = "\033[36m" $0 }
131{ $0 = $0 "\033[0m"; print }
132' "$@"
115a3045
ER
133}
134
135diff2hunks()
136{
2445505a 137 # diff2hunks orignally by dig
138 perl -e '
115a3045
ER
139#! /usr/bin/perl -w
140
141use strict;
142
143for my $filename (@ARGV) {
c6185e54
ER
144 my $counter = 1;
145 my $fh;
146 open $fh, "<", $filename or die "$filename: open for reading: $!";
147 my @lines = <$fh>;
148 my @hunks;
149 my @curheader;
150 for my $i (0 ... $#lines) {
151 next unless $lines[$i] =~ m/^\@\@ /;
152 if ($i >= 2 and $lines[$i - 2] =~ m/^--- / and $lines[$i - 1] =~ m/^\+\+\+ /) {
153 @curheader = @lines[$i - 2 ... $i - 1];
154 }
155 next unless @curheader;
156 my $j = $i + 1;
157 while ($j < @lines and $lines[$j] !~ m/^\@\@ /) {$j++}
158 $j -= 2
159 if $j >= 3 and $j < @lines
160 and $lines[$j - 2] =~ m/^--- /
161 and $lines[$j - 1] =~ m/^\+\+\+ /;
162 $j--;
163 $j-- until $lines[$j] =~ m/^[ @+-]/;
164 my $hunkfilename = $filename;
165 $hunkfilename =~ s/((\.(pat(ch)?|diff?))?)$/"-".sprintf("%03i",$counter++).$1/ei;
166 my $ofh;
167 open $ofh, ">", $hunkfilename or die "$hunkfilename: open for writing: $!";
168 print $ofh @curheader, @lines[$i ... $j];
169 close $ofh;
170 }
115a3045
ER
171}
172' "$@"
173}
174
683ce9e3
ER
175# import selected macros for adapter.awk
176# you should update the list also in adapter.awk when making changes here
177import_rpm_macros() {
178 macros="
a877f3a5 179 _topdir
683ce9e3
ER
180 _prefix
181 _bindir
182 _sbindir
183 _libdir
184 _sysconfdir
185 _datadir
186 _includedir
187 _mandir
188 _infodir
189 _examplesdir
190 _defaultdocdir
191 _kdedocdir
192 _gtkdocdir
193 _desktopdir
194 _pixmapsdir
195 _javadir
a4de4386 196 _pkgconfigdir
fd73d323 197 _npkgconfigdir
4efeac87 198 _localedir
683ce9e3
ER
199
200 perl_sitearch
201 perl_archlib
202 perl_privlib
203 perl_vendorlib
204 perl_vendorarch
205 perl_sitelib
206
207 py_sitescriptdir
208 py_sitedir
209 py_scriptdir
210 py_ver
211
8fc7c329
ER
212 py3_sitescriptdir
213 py3_sitedir
214 py3_scriptdir
215 py3_ver
216
683ce9e3
ER
217 ruby_archdir
218 ruby_ridir
219 ruby_rubylibdir
220 ruby_sitearchdir
221 ruby_sitelibdir
51847161 222 ruby_rdocdir
683ce9e3
ER
223
224 php_pear_dir
225 php_data_dir
226 tmpdir
df79d912
JR
227
228 systemdunitdir
229 systemdtmpfilesdir
683ce9e3
ER
230"
231 eval_expr=""
232 for macro in $macros; do
233 eval_expr="$eval_expr\nexport $macro='%{$macro}'"
234 done
235
236
237 # get cvsaddress for changelog section
238 # using rpm macros as too lazy to add ~/.adapterrc parsing support.
239 eval_expr="$eval_expr
240 export _cvsmaildomain='%{?_cvsmaildomain}%{!?_cvsmaildomain:@pld-linux.org}'
241 export _cvsmailfeedback='%{?_cvsmailfeedback}%{!?_cvsmailfeedback:PLD Team <feedback@pld-linux.org>}'
242 "
243
a4de4386
ER
244 export ADAPTER_REVISION=$REVISION
245
683ce9e3
ER
246 eval $(rpm --eval "$(echo -e $eval_expr)")
247}
248
249adapterize() {
250 local workdir
a4de4386 251 workdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit $?
807339c5 252 awk=gawk
c6185e54 253
a4de4386 254 local tmp=$workdir/$(basename $SPECFILE) || exit $?
683ce9e3
ER
255
256 import_rpm_macros
257
a4de4386 258 LC_ALL=en_US.UTF-8 $awk -f $adapter $SPECFILE > $tmp || exit $?
e5f205a4 259
deb09aaa
ER
260 if [ "$outputonly" = 1 ]; then
261 cat $tmp
262
263 elif [ "$(diff --brief $SPECFILE $tmp)" ]; then
e5f205a4 264 diff -u $SPECFILE $tmp > $tmp.diff
c6185e54 265 if [ -t 1 ]; then
2d894d6b 266 diffcol $tmp.diff | $PAGER
115a3045 267 while : ; do
c6185e54
ER
268 echo -n "Accept? (Yes, No, Confirm each chunk)? "
269 read ans
270 case "$ans" in
271 [yYoO]) # y0 mama
e5f205a4 272 mv -f $tmp $SPECFILE
c6185e54
ER
273 echo "Ok, adapterized."
274 break
275 ;;
276 [cC]) # confirm each chunk
e5f205a4
ER
277 diff2hunks $tmp.diff
278 for t in $(ls $tmp-*.diff); do
2d894d6b 279 diffcol $t | $PAGER
9ebf8751 280 echo -n "Accept? (Yes, [N]o, Quit)? "
115a3045
ER
281 read ans
282 case "$ans" in
283 [yYoO]) # y0 mama
bdaa9247 284 patch -p0 < $t
115a3045 285 ;;
c6185e54 286 [Q]) # Abort
9ebf8751
ER
287 break
288 ;;
115a3045 289 esac
c6185e54
ER
290 done
291 break
292 ;;
293 [QqnNsS])
294 echo "Ok, exiting."
295 break
296 ;;
297 esac
115a3045 298 done
c6185e54 299 else
e5f205a4 300 cat $tmp.diff
c6185e54
ER
301 fi
302 else
303 echo "The SPEC is perfect ;)"
304 fi
115a3045 305
683ce9e3 306 rm -rf $workdir
115a3045
ER
307}
308
b4d9acca
AG
309SPECFILE="$1"
310[ -f "$SPECFILE" ] || SPECFILE="$(basename $SPECFILE .spec).spec"
311
312if [ $# -ne 1 -o ! -f "$SPECFILE" ]; then
ea91b16c
ER
313 echo "$usage"
314 exit 1
de8cc9a2 315fi
316
115a3045 317adapterize
bdaa9247 318
319# vim: ts=4:sw=4
This page took 0.130982 seconds and 4 git commands to generate.