rpms/kernel/devel/scripts sort-config,NONE,1.4.2.2

myoung myoung at fedoraproject.org
Thu Aug 20 18:50:24 UTC 2009


Author: myoung

Update of /cvs/pkgs/rpms/kernel/devel/scripts
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv29621/scripts

Added Files:
      Tag: private-myoung-dom0-branch
	sort-config 
Log Message:
another pvops i686 stackprotector test



--- NEW FILE sort-config ---
#!/bin/bash

SRC=($(ls config-* 2>/dev/null))
TGT=($(ls kernel-*/linux-*.noarch/configs/kernel-2.6.*-*.config \
          kernel-*/linux-*.noarch/configs/kernel-2.6.*-*-debug.config 2>/dev/null))
TGT1=(${TGT[*]#kernel-*/linux-*.noarch/configs/kernel-2.6.*-})

if [ $# -lt 2 ] ; then
   echo -e "Usage:\n   $(basename $0) [-dfcn] input target\n"
   echo -e " Sort input config file into the same order as the target\n"
   echo -e "      -d: show raw unsorted output with extra debug text"
   echo -e "      -f: force output to match what is in the target config"
   echo -e "      -c: insert comments about non-matching items"
   echo -e "      -n: do not sort output\n"
   echo -e "   input: source config file" ' [' "${SRC[*]#config-}" ']\n'
   echo -e "  target: output arch name" ' [' "${TGT1[*]%.config}" ']\n'
   exit 1
fi

while getopts "dfcn" OPTION ; do
case $OPTION in
d)
   DEBUG=1
;;
f)
   FORCE=1
;;
c)
   ADDCOMMENT=1
;;
n)
   NOSORT=1
;;
\?)
   exit 2
;;
esac
done

if [ "$FORCE" -a "$ADDCOMMENT" ] ; then
	echo "-f and -c options cannot be used together"
	exit 2
fi

shift $((OPTIND-1))

if [ -f xx00 -o -f xx01 -o -f xx99 ] ; then
   echo "WARNING! Output files named xx?? already exist." >&2
   read -p "Press <Enter> to erase files, or Ctrl-C to exit..."
   echo >&2
fi
rm -f xx00 xx01 xx99

SRCFILE=config-$1
[ ! -f $SRCFILE ] && echo "Input file" $SRCFILE "missing" && exit 2

TGTFILE=kernel-*/linux-*.noarch/configs/kernel-2.6.*-$2.config
[ ! -f $TGTFILE ] && echo "No target file matching" $TGTFILE "exists" && exit 2

IX=0
IN=0
declare -a SAVECOMMENT

cat ${SRCFILE} | while read TEXT ; do

   LINE=
   COMMENT=
   [ -z "$TEXT" ] && TEXT='#'

   if [ "${TEXT:0:7}" = "CONFIG_" -o "${TEXT:0:9}" = "# CONFIG_" ] ; then

      LINE=$(grep -n "^$TEXT" $TGTFILE | head -1 | cut -f 1 -d ':')
      if [ -z "$LINE" ] ; then
         [ "$DEBUG" ] && echo "nofind      ->" "$TEXT"

         # see if option changed in output file
         OPTNAME=
         if [ "${TEXT:0:7}" = "CONFIG_" ] ; then
            OPTNAME=${TEXT%%=*}
         elif [ "${TEXT:0:9}" = "# CONFIG_" ] ; then
            OPTNAME=${TEXT%" is not set"}
            OPTNAME=${OPTNAME#\# }
         fi
         if [ "$OPTNAME" ] ; then
            for FINDTEXT in "^${OPTNAME}=" "^# ${OPTNAME} is not set" ; do
               if [ -z "$LINE" ] ; then
                  [ "$DEBUG" ] && echo "looking for ->" "$FINDTEXT"
                  LINE=$(grep -n "$FINDTEXT" $TGTFILE | head -1 | cut -f 1 -d ':')
                  if [ "$LINE" ] ; then
                     CHANGED=$(grep "$FINDTEXT" $TGTFILE | head -1)
                     if [ "$FORCE" ] ; then
                        TEXT="$CHANGED"
                        [ "$DEBUG" ] && echo 'forced      ->' "$TEXT"
                     else
                        if [ "$ADDCOMMENT" ] ; then
                           if [ ${CHANGED:0:1} = '#' ] ; then
                              NEWOPT="not set"
                           else
                              NEWOPT=${CHANGED#$OPTNAME}
                           fi
                           COMMENT="# -- Next option changed to \"${NEWOPT}\" at target line $LINE --"
                        fi
                     fi
                  fi
               fi
            done
         fi

      fi

   else
      COMMENT="$TEXT"
      TEXT=
   fi

   [ "$DEBUG" -a "$COMMENT" ] && echo "comment     ->" "$LINE" "$COMMENT"
   [ "$DEBUG" -a "$TEXT" ]    && echo "text        ->" "$LINE" "$TEXT"

   if [ "$TEXT" ] ; then

      # use input line numbers if not sorting
      [ "$NOSORT" ] && LINE=$IN
      # make sure it has a line number
      [ -z "$LINE" ] && LINE=999999

      # print saved comments first
      if [ $IX -gt 0 ] ; then
         [ "$DEBUG" ] && echo "            ->" $IX "comments were saved"
         (( IX-- ))
         for IX in $(seq 0 $IX) ; do
            echo "$LINE":"${SAVECOMMENT[$IX]}"
         done
         unset SAVECOMMENT
         IX=0
      fi
      [ "$COMMENT" ] && echo "$LINE":"$COMMENT"
      echo "$LINE":"$TEXT"

   else

      # no output yet, save the comment
      SAVECOMMENT[$IX]="$COMMENT"
      [ "$DEBUG" ] && echo "savecomment ->" "$LINE" "${SAVECOMMENT[$IX]}"
      (( IX++ ))

   fi

   ((IN++))

done > xx99

if [ "$DEBUG" ] ; then
   cat xx99
else

   cat xx99 | sort -s -t ":" -k 1g | csplit -k -s - /^999999/ 2>/dev/null

   cat xx00 | cut -f 2- -d ':'
   if [ -s xx01 ] ; then
      echo
      echo '# ------------  UNMATCHED OPTIONS  ------------'
      echo
      cat xx01 | cut -f 2- -d ':'
   fi

fi

rm -f xx00 xx01 xx99




More information about the fedora-extras-commits mailing list