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