Root/scripts/config

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

Archive Download this file



interactive