X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=adapter.sh;h=2b1e987107713b7bad171a25eaedd53cdbbc3e0c;hb=5eb1d24bb1e5df1ac57257bf98b688e82c0cad9e;hp=f38328c8e500899df5af6c61aa38aa87aa8394f9;hpb=38c3baf3e1c697f853bcdb666dfa5fadc75f0d84;p=packages%2Frpm-build-tools.git diff --git a/adapter.sh b/adapter.sh old mode 100644 new mode 100755 index f38328c..2b1e987 --- a/adapter.sh +++ b/adapter.sh @@ -12,17 +12,16 @@ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -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,,^[,g; - s,,^G,g; - s,^\(Index:\|diff\|---\|+++\) .*$,&,; - s,^@@ ,&,g; - s,^-,&,; - s,^+,&,; - s,\r,^M,g; - s, , ,g; - s,\([^[:space:]]\)\([[:space:]]\+\)$,\1\2,g; - s,$,, - ' "$@" + # 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 }' " + 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