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