]> git.pld-linux.org Git - packages/rpm-build-tools.git/blobdiff - adapter.sh
- don't pollute specdir with builder macros
[packages/rpm-build-tools.git] / adapter.sh
index 8dd7a3b00691a96315ea63e2f223ce74ac3c5cab..b012c2f7a0d15047008eba70f65e87363d596174 100644 (file)
@@ -1,8 +1,185 @@
 #!/bin/sh
+#
+# This is adapter v0.28. Adapter adapts .spec files for PLD Linux.
+#
+# Copyright (C) 1999-2003 PLD-Team <feedback@pld-linux.org>
+# Authors:
+#      Michał Kuratczyk <kura@pld.org.pl>
+#      Sebastian Zagrodzki <s.zagrodzki@mimuw.edu.pl>
+#      Tomasz Kłoczko <kloczek@rudy.mif.pg.gda.pl>
+#      Artur Frysiak <wiget@pld-linux.org>
+#      Michal Kochanowicz <mkochano@pld.org.pl>
+#      Elan Ruusamäe <glen@pld-linux.org>
+#
+# See cvs log adapter{,.awk} for list of contributors
+#
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+self=$(basename "$0")
+usage="Usage: $self [FLAGS] SPECFILE
+
+-s|--no-sort|--skip-sort
+       skip BuildRequires, Requires sorting
+-m|--no-macros|--skip-macros
+       skip use_macros() substitutions
+-d|--skip-desc
+       skip desc wrapping
+-a|--skip-defattr
+       skip %defattr corrections
+
+"
+
+if [ ! -x /usr/bin/getopt ]; then
+       echo >&1 "You need to install util-linux to use adapter"
+       exit 1
+fi
+
+t=`getopt -o hsmda --long help,sort,sort-br,no-macros,skip-macros,skip-desc,skip-defattr -n "$self" -- "$@"` || exit $?
+eval set -- "$t"
+
+while true; do
+       case "$1" in
+       -h|--help)
+               echo 2>&1 "$usage"
+               exit 1
+       ;;
+       -s|--no-sort|--skip-sort)
+               export SKIP_SORTBR=1
+       ;;
+       -m|--no-macros|--skip-macros)
+               export SKIP_MACROS=1
+       ;;
+       -d|--skip-desc)
+               export SKIP_DESC=1
+       ;;
+       -a|--skip-defattr)
+               export SKIP_DEFATTR=1
+       ;;
+       --)
+               shift
+               break
+       ;;
+       *)
+               echo 2>&1 "$self: Internal error: [$1] not recognized!"
+               exit 1
+               ;;
+       esac
+       shift
+done
+
+diffcol()
+{
+        # vim like diff colourization
+        sed -e '
+        s,\e,\e[44m^[\e[49m,g;
+        s,\a,\e[44m^G\e[49m,g;
+        s,^\(Index:\|diff\|---\|+++\) .*$,\e[32m&,;
+        s,^@@ ,\e[33m&,g;
+        s,^-,\e[35m&,;
+        s,^+,\e[36m&,;
+        s,\r,\e[44m^M\e[49m,g;
+        s,     ,    ,g;
+        s,\([^[:space:]]\)\([[:space:]]\+\)$,\1\e[41m\2\e[49m,g;
+        s,$,\e[0m,
+        ' "$@"
+}
+
+diff2hunks()
+{
+        # diff2hunks orignally by dig
+        perl -e '
+#! /usr/bin/perl -w
+
+use strict;
+
+for my $filename (@ARGV) {
+    my $counter = 1;
+    my $fh;
+    open $fh, "<", $filename or die "$filename: open for reading: $!";
+    my @lines = <$fh>;
+    my @hunks;
+    my @curheader;
+    for my $i (0 ... $#lines) {
+        next unless $lines[$i] =~ m/^\@\@ /;
+        if ($i >= 2 and $lines[$i - 2] =~ m/^--- / and $lines[$i - 1] =~ m/^\+\+\+ /) {
+            @curheader = @lines[$i - 2 ... $i - 1];
+        }
+        next unless @curheader;
+        my $j = $i + 1;
+        while ($j < @lines and $lines[$j] !~ m/^\@\@ /) {$j++}
+        $j -= 2
+            if $j >= 3 and $j < @lines
+                and $lines[$j - 2] =~ m/^--- /
+                and $lines[$j - 1] =~ m/^\+\+\+ /;
+        $j--;
+        $j-- until $lines[$j] =~ m/^[ @+-]/;
+        my $hunkfilename = $filename;
+        $hunkfilename =~ s/((\.(pat(ch)?|diff?))?)$/"-".sprintf("%03i",$counter++).$1/ei;
+        my $ofh;
+        open $ofh, ">", $hunkfilename or die "$hunkfilename: open for writing: $!";
+        print $ofh @curheader, @lines[$i ... $j];
+        close $ofh;
+    }
+}
+' "$@"
+}
+
+adapterize()
+{
+        local tmpdir
+        tmpdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit
+        gawk -f adapter.awk $SPECFILE > $tmpdir/$SPECFILE || exit
+
+        if [ "`diff --brief $SPECFILE $tmpdir/$SPECFILE`" ]; then
+                 diff -u $SPECFILE $tmpdir/$SPECFILE > $tmpdir/$SPECFILE.diff
+                 if [ -t 1 ]; then
+                               diffcol $tmpdir/$SPECFILE.diff | less -r
+                               while : ; do
+                                        echo -n "Accept? (Yes, No, Confirm each chunk)? "
+                                        read ans
+                                        case "$ans" in
+                                        [yYoO]) # y0 mama
+                                                 mv -f $tmpdir/$SPECFILE $SPECFILE
+                                                 echo "Ok, adapterized."
+                                                 break
+                                        ;;
+                                        [cC]) # confirm each chunk
+                                                 diff2hunks $tmpdir/$SPECFILE.diff
+                                                 for t in $(ls $tmpdir/$SPECFILE-*.diff); do
+                                                               diffcol $t | less -r
+                                                               echo -n "Accept? (Yes, [N]o, Quit)? "
+                                                               read ans
+                                                               case "$ans" in
+                                                               [yYoO]) # y0 mama
+                                                                       patch < $t
+                                                                       ;;
+                                                               [Q])  # Abort
+                                                                       break
+                                                                       ;;
+                                                               esac
+                                                 done
+                                                 break
+                                        ;;
+                                        [QqnNsS])
+                                                 echo "Ok, exiting."
+                                                 break
+                                        ;;
+                                        esac
+                               done
+                 else
+                               cat $tmpdir/$SPECFILE.diff
+                 fi
+        else
+                 echo "The SPEC is perfect ;)"
+        fi
+
+        rm -rf $tmpdir
+}
 
 if [ $# -ne 1 -o ! -f "$1" ]; then
-  echo "Usage: $0 filename"
-  exit 1
+       echo "$usage"
+       exit 1
 fi
 
-./builder --adapter "$1"
+SPECFILE="$1"
+adapterize
This page took 0.138517 seconds and 4 git commands to generate.