]> git.pld-linux.org Git - packages/rpm-build-tools.git/blobdiff - adapter.sh
- man.szczecin.pl unresponsive
[packages/rpm-build-tools.git] / adapter.sh
old mode 100644 (file)
new mode 100755 (executable)
index f38328c..2b1e987
 #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 
-RCSID='$Id$'
-r=${RCSID#* * }
-rev=${r%% *}
-VERSION="v0.31/$rev"
+REVISION=1.52
+VERSION="v0.35/$REVISION"
 VERSIONSTRING="\
 Adapter adapts .spec files for PLD Linux.
-$VERSION (C) 1999-2008 Free Penguins".
+$VERSION (C) 1999-2013 Free Penguins".
 
-self=$(basename "$0")
-adapter=$(dirname "$0")/adapter.awk
-usage="Usage: $self [FLAGS] SPECFILE
+PROGRAM=${0##*/}
+dir=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
+adapter=$dir/adapter.awk
+usage="Usage: $PROGRAM [FLAGS] SPECFILEs
 
 -s|--no-sort|--skip-sort
        skip BuildRequires, Requires sorting
@@ -46,13 +45,25 @@ if [ ! -x /usr/bin/patch ]; then
        exit 1
 fi
 
-t=$(getopt -o hsomdaV --long help,version,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
+while :; do
        case "$1" in
        -h|--help)
-               echo 2>&1 "$usage"
+               echo 2>&1 "$usage"
                exit 1
        ;;
        -s|--no-sort|--skip-sort)
@@ -79,7 +90,7 @@ while true; do
                break
        ;;
        *)
-               echo >&2 "$self: Internal error: [$1] not recognized!"
+               echo >&2 "$PROGRAM: Internal error: \`$1' not recognized!"
                exit 1
                ;;
        esac
@@ -88,25 +99,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;
@@ -147,7 +175,7 @@ for my $filename (@ARGV) {
 # you should update the list also in adapter.awk when making changes here
 import_rpm_macros() {
        macros="
-       _sourcedir
+       _topdir
        _prefix
        _bindir
        _sbindir
@@ -164,6 +192,9 @@ import_rpm_macros() {
        _desktopdir
        _pixmapsdir
        _javadir
+       _pkgconfigdir
+       _npkgconfigdir
+       _localedir
 
        perl_sitearch
        perl_archlib
@@ -177,16 +208,31 @@ import_rpm_macros() {
        py_scriptdir
        py_ver
 
+       py3_sitescriptdir
+       py3_sitedir
+       py3_scriptdir
+       py3_ver
+
        ruby_archdir
-       ruby_ridir
-       ruby_rubylibdir
+       ruby_libdir 
+       ruby_sitedir  
        ruby_sitearchdir
        ruby_sitelibdir
+       ruby_vendordir 
+       ruby_vendorarchdir
+       ruby_vendorlibdir
+       ruby_rubylibdir
        ruby_rdocdir
+       ruby_ridir
+       ruby_specdir
 
        php_pear_dir
        php_data_dir
        tmpdir
+
+       systemdunitdir
+       systemduserunitdir
+       systemdtmpfilesdir
 "
        eval_expr=""
        for macro in $macros; do
@@ -201,23 +247,24 @@ import_rpm_macros() {
        export _cvsmailfeedback='%{?_cvsmailfeedback}%{!?_cvsmailfeedback:PLD Team <feedback@pld-linux.org>}'
        "
 
+       export ADAPTER_REVISION=$REVISION
+
        eval $(rpm --eval "$(echo -e $eval_expr)")
 }
 
 adapterize() {
+       local SPECFILE="$1"
+       [ -f "$SPECFILE" ] || SPECFILE="$(basename $SPECFILE .spec).spec"
+
        local workdir
-       workdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit
-       if grep -q '\.UTF-8' $SPECFILE; then
-               awk=gawk
-       else
-               awk=awk
-       fi
+       workdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit $?
+       awk=gawk
 
-       local tmp=$workdir/$(basename $SPECFILE) || exit
+       local tmp=$workdir/$(basename $SPECFILE) || exit $?
 
        import_rpm_macros
 
-       $awk -f $adapter $SPECFILE > $tmp || exit
+       LC_ALL=en_US.UTF-8 $awk -f $adapter $SPECFILE > $tmp || exit $?
 
        if [ "$outputonly" = 1 ]; then
                cat $tmp
@@ -225,7 +272,7 @@ adapterize() {
        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
@@ -238,12 +285,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
@@ -262,18 +309,19 @@ adapterize() {
                                cat $tmp.diff
                fi
        else
-               echo "The SPEC is perfect ;)"
+               echo "The spec $SPECFILE is perfect ;)"
        fi
 
        rm -rf $workdir
 }
 
-SPECFILE="$1"
-[ -f "$SPECFILE" ] || SPECFILE="$(basename $SPECFILE .spec).spec"
-
-if [ $# -ne 1 -o ! -f "$SPECFILE" ]; then
+if [ $# -eq 0 ]; then
        echo "$usage"
        exit 1
 fi
 
-adapterize
+for SPECFILE in "$@"; do
+       adapterize $SPECFILE
+done
+
+# vim: ts=4:sw=4
This page took 3.05044 seconds and 4 git commands to generate.