Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/scripts/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 4 kB image not shown  

Quelle  config   Sprache: unbekannt

 
#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-2.0
# Manipulate options in a .config file from the command line

myname=${0##*/}

# If no prefix forced, use the default CONFIG_
CONFIG_="${CONFIG_-CONFIG_}"

# We use an uncommon delimiter for sed substitutions
SED_DELIM=$(echo -en "\001")

usage() {
 cat >&2 <<EOL
Manipulate options in a .config file from the command line.
Usage:
$myname options command ...
commands:
 --enable|-e option   Enable option
 --disable|-d option  Disable option
 --module|-m option   Turn option into a module
 --set-str option string
                      Set option to "string"
 --set-val option value
                      Set option to value
 --undefine|-u option Undefine option
 --state|-s option    Print state of option (n,y,m,undef)

 --enable-after|-E beforeopt option
                             Enable option directly after other option
 --disable-after|-D beforeopt option
                             Disable option directly after other option
 --module-after|-M beforeopt option
                             Turn option into module directly after other option
 --refresh            Refresh the config using old settings

 commands can be repeated multiple times

options:
 --file config-file   .config file to change (default .config)
 --keep-case|-k       Keep next symbols' case (dont' upper-case it)

$myname doesn't check the validity of the .config file. This is done at next
make time.

By default, $myname will upper-case the given symbol. Use --keep-case to keep
the case of all following symbols unchanged.

$myname uses 'CONFIG_' as the default symbol prefix. Set the environment
variable CONFIG_ to the prefix to use. Eg.: CONFIG_="FOO_" $myname ...
EOL
 exit 1
}

checkarg() {
 ARG="$1"
 if [ "$ARG" = "" ] ; then
  usage
 fi
 case "$ARG" in
 ${CONFIG_}*)
  ARG="${ARG/${CONFIG_}/}"
  ;;
 esac
 if [ "$MUNGE_CASE" = "yes" ] ; then
  ARG="`echo $ARG | tr a-z A-Z`"
 fi
}

txt_append() {
 local anchor="$1"
 local insert="$2"
 local infile="$3"
 local tmpfile="$infile.swp"

 # sed append cmd: 'a\' + newline + text + newline
 cmd="$(printf "a\\%b$insert" "\n")"

 sed -e "/$anchor/$cmd" "$infile" >"$tmpfile"
 # replace original file with the edited one
 mv "$tmpfile" "$infile"
}

txt_subst() {
 local before="$1"
 local after="$2"
 local infile="$3"
 local tmpfile="$infile.swp"

 sed -e "s$SED_DELIM$before$SED_DELIM$after$SED_DELIM" "$infile" >"$tmpfile"
 # replace original file with the edited one
 mv "$tmpfile" "$infile"
}

txt_delete() {
 local text="$1"
 local infile="$2"
 local tmpfile="$infile.swp"

 sed -e "/$text/d" "$infile" >"$tmpfile"
 # replace original file with the edited one
 mv "$tmpfile" "$infile"
}

set_var() {
 local name=$1 new=$2 before=$3

 name_re="^($name=|# $name is not set)"
 before_re="^($before=|# $before is not set)"
 if test -n "$before" && grep -Eq "$before_re" "$FN"; then
  txt_append "^$before=" "$new" "$FN"
  txt_append "^# $before is not set" "$new" "$FN"
 elif grep -Eq "$name_re" "$FN"; then
  txt_subst "^$name=.*" "$new" "$FN"
  txt_subst "^# $name is not set" "$new" "$FN"
 else
  echo "$new" >>"$FN"
 fi
}

undef_var() {
 local name=$1

 txt_delete "^$name=" "$FN"
 txt_delete "^# $name is not set" "$FN"
}

FN=.config
CMDS=()
while [[ $# -gt 0 ]]; do
 if [ "$1" = "--file" ]; then
  if [ "$2" = "" ]; then
   usage
  fi
  FN="$2"
  shift 2
 else
  CMDS+=("$1")
  shift
 fi
done

set -- "${CMDS[@]}"
if [ "$1" = "" ] ; then
 usage
fi

MUNGE_CASE=yes
while [ "$1" != "" ] ; do
 CMD="$1"
 shift
 case "$CMD" in
 --keep-case|-k)
  MUNGE_CASE=no
  continue
  ;;
 --refresh)
  ;;
 --*-after|-E|-D|-M)
  checkarg "$1"
  A=$ARG
  checkarg "$2"
  B=$ARG
  shift 2
  ;;
 -*)
  checkarg "$1"
  shift
  ;;
 esac
 case "$CMD" in
 --enable|-e)
  set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=y"
  ;;

 --disable|-d)
  set_var "${CONFIG_}$ARG" "# ${CONFIG_}$ARG is not set"
  ;;

 --module|-m)
  set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=m"
  ;;

 --set-str)
  # sed swallows one level of escaping, so we need double-escaping
  set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=\"${1//\"/\\\\\"}\""
  shift
  ;;

 --set-val)
  set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=$1"
  shift
  ;;
 --undefine|-u)
  undef_var "${CONFIG_}$ARG"
  ;;

 --state|-s)
  if grep -q "# ${CONFIG_}$ARG is not set" $FN ; then
   echo n
  else
   V="$(grep "^${CONFIG_}$ARG=" $FN)"
   if [ $? != 0 ] ; then
    echo undef
   else
    V="${V/#${CONFIG_}$ARG=/}"
    V="${V/#\"/}"
    V="${V/%\"/}"
    V="${V//\\\"/\"}"
    echo "${V}"
   fi
  fi
  ;;

 --enable-after|-E)
  set_var "${CONFIG_}$B" "${CONFIG_}$B=y" "${CONFIG_}$A"
  ;;

 --disable-after|-D)
  set_var "${CONFIG_}$B" "# ${CONFIG_}$B is not set" "${CONFIG_}$A"
  ;;

 --module-after|-M)
  set_var "${CONFIG_}$B" "${CONFIG_}$B=m" "${CONFIG_}$A"
  ;;

 --refresh)
  yes "" | make oldconfig KCONFIG_CONFIG=$FN
  ;;

 *)
  echo "bad command: $CMD" >&2
  usage
  ;;
 esac
done

Messung V0.5
C=94 H=98 G=95

[ Dauer der Verarbeitung: 0.22 Sekunden  (vorverarbeitet)  ]