linux/scripts/config
<<
>>
Prefs
   1#!/bin/bash
   2# Manipulate options in a .config file from the command line
   3
   4usage() {
   5        cat >&2 <<EOL
   6Manipulate options in a .config file from the command line.
   7Usage:
   8config options command ...
   9commands:
  10        --enable|-e option   Enable option
  11        --disable|-d option  Disable option
  12        --module|-m option   Turn option into a module
  13        --set-str option value
  14                             Set option to "value"
  15        --state|-s option    Print state of option (n,y,m,undef)
  16
  17        --enable-after|-E beforeopt option
  18                             Enable option directly after other option
  19        --disable-after|-D beforeopt option
  20                             Disable option directly after other option
  21        --module-after|-M beforeopt option
  22                             Turn option into module directly after other option
  23
  24        commands can be repeated multiple times
  25
  26options:
  27        --file .config file to change (default .config)
  28
  29config doesn't check the validity of the .config file. This is done at next
  30 make time.
  31EOL
  32        exit 1
  33}
  34
  35checkarg() {
  36        ARG="$1"
  37        if [ "$ARG" = "" ] ; then
  38                usage
  39        fi
  40        case "$ARG" in
  41        CONFIG_*)
  42                ARG="${ARG/CONFIG_/}"
  43                ;;
  44        esac
  45        ARG="`echo $ARG | tr a-z A-Z`"
  46}
  47
  48set_var() {
  49        local name=$1 new=$2 before=$3
  50
  51        name_re="^($name=|# $name is not set)"
  52        before_re="^($before=|# $before is not set)"
  53        if test -n "$before" && grep -Eq "$before_re" "$FN"; then
  54                sed -ri "/$before_re/a $new" "$FN"
  55        elif grep -Eq "$name_re" "$FN"; then
  56                sed -ri "s:$name_re.*:$new:" "$FN"
  57        else
  58                echo "$new" >>"$FN"
  59        fi
  60}
  61
  62if [ "$1" = "--file" ]; then
  63        FN="$2"
  64        if [ "$FN" = "" ] ; then
  65                usage
  66        fi
  67        shift 2
  68else
  69        FN=.config
  70fi
  71
  72if [ "$1" = "" ] ; then
  73        usage
  74fi
  75
  76while [ "$1" != "" ] ; do
  77        CMD="$1"
  78        shift
  79        case "$CMD" in
  80        --refresh)
  81                ;;
  82        --*-after)
  83                checkarg "$1"
  84                A=$ARG
  85                checkarg "$2"
  86                B=$ARG
  87                shift 2
  88                ;;
  89        --*)
  90                checkarg "$1"
  91                shift
  92                ;;
  93        esac
  94        case "$CMD" in
  95        --enable|-e)
  96                set_var "CONFIG_$ARG" "CONFIG_$ARG=y"
  97                ;;
  98
  99        --disable|-d)
 100                set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set"
 101                ;;
 102
 103        --module|-m)
 104                set_var "CONFIG_$ARG" "CONFIG_$ARG=m"
 105                ;;
 106
 107        --set-str)
 108                set_var "CONFIG_$ARG" "CONFIG_$ARG=\"$1\""
 109                shift
 110                ;;
 111
 112        --state|-s)
 113                if grep -q "# CONFIG_$ARG is not set" $FN ; then
 114                        echo n
 115                else
 116                        V="$(grep "^CONFIG_$ARG=" $FN)"
 117                        if [ $? != 0 ] ; then
 118                                echo undef
 119                        else
 120                                V="${V/CONFIG_$ARG=/}"
 121                                V="${V/\"/}"
 122                                echo "$V"
 123                        fi
 124                fi
 125                ;;
 126
 127        --enable-after|-E)
 128                set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A"
 129                ;;
 130
 131        --disable-after|-D)
 132                set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A"
 133                ;;
 134
 135        --module-after|-M)
 136                set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A"
 137                ;;
 138
 139        # undocumented because it ignores --file (fixme)
 140        --refresh)
 141                yes "" | make oldconfig
 142                ;;
 143
 144        *)
 145                usage
 146                ;;
 147        esac
 148done
 149
 150