]> git.pld-linux.org Git - packages/rpm-build-tools.git/blobdiff - adapter.sh
- update
[packages/rpm-build-tools.git] / adapter.sh
index ad4a4298703991e8376bede5c119ce897544fd6b..ecf0f77dc4e3fac8be7d22cea60394ea1a87a398 100644 (file)
@@ -1,8 +1,5 @@
 #!/bin/sh
 #
-# This is adapter v0.30. 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>
 #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 
-self=$(basename "$0")
-adapter=$(dirname "$0")/adapter.awk
-usage="Usage: $self [FLAGS] SPECFILE
+RCSID='$Id$'
+REVISION=${RCSID#* * } REVISION=${REVISION%% *}
+VERSION="v0.35/$REVISION"
+VERSIONSTRING="\
+Adapter adapts .spec files for PLD Linux.
+$VERSION (C) 1999-2010 Free Penguins".
+
+PROGRAM=${0##*/}
+dir=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
+adapter=$dir/adapter.awk
+usage="Usage: $PROGRAM [FLAGS] SPECFILE
 
 -s|--no-sort|--skip-sort
        skip BuildRequires, Requires sorting
@@ -27,26 +32,39 @@ usage="Usage: $self [FLAGS] SPECFILE
        skip desc wrapping
 -a|--skip-defattr
        skip %defattr corrections
-
+-o
+       do not do any diffing, just dump the output
 "
 
 if [ ! -x /usr/bin/getopt ]; then
-       echo >&1 "You need to install util-linux to use adapter"
+       echo >&2 "You need to install util-linux to use adapter"
        exit 1
 fi
 
 if [ ! -x /usr/bin/patch ]; then
-       echo >&1 "You need to install patch to use adapter"
+       echo >&2 "You need to install patch 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 $?
+[ -n "$PAGER" ] || PAGER="/usr/bin/less -r"
+
+if [ -n "$CONFIG_DIR" ]; then
+       USER_CFG="$CONFIG_DIR/.adapterrc"
+elif [ -n "$HOME_ETC" ]; then
+       USER_CFG="$HOME_ETC/.adapterrc"
+else
+       USER_CFG=~/.adapterrc
+fi
+
+[ -f $USER_CFG ] && . $USER_CFG
+
+t=$(getopt -o hsomdaV --long help,version,sort,sort-br,no-macros,skip-macros,skip-desc,skip-defattr -n "$PROGRAM" -- "$@") || exit $?
 eval set -- "$t"
 
 while true; do
        case "$1" in
        -h|--help)
-               echo 2>&1 "$usage"
+               echo 2>&1 "$usage"
                exit 1
        ;;
        -s|--no-sort|--skip-sort)
@@ -61,12 +79,19 @@ while true; do
        -a|--skip-defattr)
                export SKIP_DEFATTR=1
        ;;
+       -V|--version)
+               echo "$VERSIONSTRING"
+               exit 0
+               ;;
+       -o)
+               outputonly=1
+       ;;
        --)
                shift
                break
        ;;
        *)
-               echo 2>&1 "$self: Internal error: [$1] not recognized!"
+               echo >&2 "$PROGRAM: Internal error: \`$1' not recognized!"
                exit 1
                ;;
        esac
@@ -75,25 +100,42 @@ 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,
-        ' "$@"
+       # vim like diff colourization
+LC_ALL=en_US.UTF-8 gawk ' {
+       split( $0, S, /\t/ );
+       $0 = S[ 1 ];
+       for ( i = 2; i in S; i++ ) {
+               spaces = 7 - ( (length( $0 ) - 1) % 8 );
+               $0 = $0 "\xE2\x9E\x94";
+               for ( y = 0; y < spaces; y++ )
+                       $0 = $0 "\xE2\x87\xBE";
+               $0 = $0 S[ i ];
+       }
+       gsub( /\033/, "\033[44m^[\033[49m" );
+       cmd = "";
+       if ( sub( /^ /, "" ) )
+               cmd = " ";
+       sub( /(\xE2\x9E\x94(\xE2\x87\xBE)*| )+$/, "\033[31;41m&\033[39;49m" );
+       gsub( /\xE2\x9E\x94(\xE2\x87\xBE)*/, "\033[7m&\033[27m" );
+       gsub( /\xE2\x87\xBE/, " " );
+       # uncomment if you do not like utf-8 arrow
+       # gsub( /\xE2\x9E\x94/, ">" );
+       $0 = cmd $0;
+       gsub( /\007/, "\033[44m^G\033[49m" );
+       gsub( /\r/, "\033[44m^M\033[49m" );
+}
+/^(Index:|diff|---|\+\+\+) / { $0 = "\033[32m" $0 }
+/^@@ / { $0 = "\033[33m" $0 }
+/^-/ { $0 = "\033[35m" $0 }
+/^+/ { $0 = "\033[36m" $0 }
+{ $0 = $0 "\033[0m"; print }
+' "$@"
 }
 
 diff2hunks()
 {
-        # diff2hunks orignally by dig
-        perl -e '
+       # diff2hunks orignally by dig
+       perl -e '
 #! /usr/bin/perl -w
 
 use strict;
@@ -130,23 +172,94 @@ for my $filename (@ARGV) {
 ' "$@"
 }
 
-adapterize()
-{
-       local tmpdir
-       tmpdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit
-       if grep -q '\.UTF-8' $SPECFILE; then
-               awk=gawk
-       else
-               awk=awk
-       fi
+# import selected macros for adapter.awk
+# you should update the list also in adapter.awk when making changes here
+import_rpm_macros() {
+       macros="
+       _topdir
+       _prefix
+       _bindir
+       _sbindir
+       _libdir
+       _sysconfdir
+       _datadir
+       _includedir
+       _mandir
+       _infodir
+       _examplesdir
+       _defaultdocdir
+       _kdedocdir
+       _gtkdocdir
+       _desktopdir
+       _pixmapsdir
+       _javadir
+       _pkgconfigdir
+       _npkgconfigdir
+
+       perl_sitearch
+       perl_archlib
+       perl_privlib
+       perl_vendorlib
+       perl_vendorarch
+       perl_sitelib
+
+       py_sitescriptdir
+       py_sitedir
+       py_scriptdir
+       py_ver
 
-       local tmp=$tmpdir/$(basename $SPECFILE) || exit
-       $awk -f $adapter $SPECFILE > $tmp || exit
+       py3_sitescriptdir
+       py3_sitedir
+       py3_scriptdir
+       py3_ver
 
-       if [ "$(diff --brief $SPECFILE $tmp)" ]; then
+       ruby_archdir
+       ruby_ridir
+       ruby_rubylibdir
+       ruby_sitearchdir
+       ruby_sitelibdir
+       ruby_rdocdir
+
+       php_pear_dir
+       php_data_dir
+       tmpdir
+"
+       eval_expr=""
+       for macro in $macros; do
+               eval_expr="$eval_expr\nexport $macro='%{$macro}'"
+       done
+
+
+       # get cvsaddress for changelog section
+       # using rpm macros as too lazy to add ~/.adapterrc parsing support.
+       eval_expr="$eval_expr
+       export _cvsmaildomain='%{?_cvsmaildomain}%{!?_cvsmaildomain:@pld-linux.org}'
+       export _cvsmailfeedback='%{?_cvsmailfeedback}%{!?_cvsmailfeedback:PLD Team <feedback@pld-linux.org>}'
+       "
+
+       export ADAPTER_REVISION=$REVISION
+
+       eval $(rpm --eval "$(echo -e $eval_expr)")
+}
+
+adapterize() {
+       local workdir
+       workdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit $?
+       awk=gawk
+
+       local tmp=$workdir/$(basename $SPECFILE) || exit $?
+
+       import_rpm_macros
+
+       LC_ALL=en_US.UTF-8 $awk -f $adapter $SPECFILE > $tmp || exit $?
+
+       if [ "$outputonly" = 1 ]; then
+               cat $tmp
+
+       elif [ "$(diff --brief $SPECFILE $tmp)" ]; then
                diff -u $SPECFILE $tmp > $tmp.diff
                if [ -t 1 ]; then
-                               diffcol $tmp.diff | less -r
+                               diffcol $tmp.diff | $PAGER
                                while : ; do
                                        echo -n "Accept? (Yes, No, Confirm each chunk)? "
                                        read ans
@@ -159,12 +272,12 @@ adapterize()
                                        [cC]) # confirm each chunk
                                                diff2hunks $tmp.diff
                                                for t in $(ls $tmp-*.diff); do
-                                                               diffcol $t | less -r
+                                                               diffcol $t | $PAGER
                                                                echo -n "Accept? (Yes, [N]o, Quit)? "
                                                                read ans
                                                                case "$ans" in
                                                                [yYoO]) # y0 mama
-                                                                       patch < $t
+                                                                       patch -p0 < $t
                                                                        ;;
                                                                [Q]) # Abort
                                                                        break
@@ -186,13 +299,17 @@ adapterize()
                echo "The SPEC is perfect ;)"
        fi
 
-       rm -rf $tmpdir
+       rm -rf $workdir
 }
 
-if [ $# -ne 1 -o ! -f "$1" ]; then
+SPECFILE="$1"
+[ -f "$SPECFILE" ] || SPECFILE="$(basename $SPECFILE .spec).spec"
+
+if [ $# -ne 1 -o ! -f "$SPECFILE" ]; then
        echo "$usage"
        exit 1
 fi
 
-SPECFILE="$1"
 adapterize
+
+# vim: ts=4:sw=4
This page took 0.071004 seconds and 4 git commands to generate.