Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/scripts/config

  1 #!/bin/bash
  2 # Manipulate options in a .config file from the command line
  3 
  4 myname=${0##*/}
  5 
  6 # If no prefix forced, use the default CONFIG_
  7 CONFIG_="${CONFIG_-CONFIG_}"
  8 
  9 usage() {
 10         cat >&2 <<EOL
 11 Manipulate options in a .config file from the command line.
 12 Usage:
 13 $myname options command ...
 14 commands:
 15         --enable|-e option   Enable option
 16         --disable|-d option  Disable option
 17         --module|-m option   Turn option into a module
 18         --set-str option string
 19                              Set option to "string"
 20         --set-val option value
 21                              Set option to value
 22         --undefine|-u option Undefine option
 23         --state|-s option    Print state of option (n,y,m,undef)
 24 
 25         --enable-after|-E beforeopt option
 26                              Enable option directly after other option
 27         --disable-after|-D beforeopt option
 28                              Disable option directly after other option
 29         --module-after|-M beforeopt option
 30                              Turn option into module directly after other option
 31 
 32         commands can be repeated multiple times
 33 
 34 options:
 35         --file config-file   .config file to change (default .config)
 36         --keep-case|-k       Keep next symbols' case (dont' upper-case it)
 37 
 38 $myname doesn't check the validity of the .config file. This is done at next
 39 make time.
 40 
 41 By default, $myname will upper-case the given symbol. Use --keep-case to keep
 42 the case of all following symbols unchanged.
 43 
 44 $myname uses 'CONFIG_' as the default symbol prefix. Set the environment
 45 variable CONFIG_ to the prefix to use. Eg.: CONFIG_="FOO_" $myname ...
 46 EOL
 47         exit 1
 48 }
 49 
 50 checkarg() {
 51         ARG="$1"
 52         if [ "$ARG" = "" ] ; then
 53                 usage
 54         fi
 55         case "$ARG" in
 56         ${CONFIG_}*)
 57                 ARG="${ARG/${CONFIG_}/}"
 58                 ;;
 59         esac
 60         if [ "$MUNGE_CASE" = "yes" ] ; then
 61                 ARG="`echo $ARG | tr a-z A-Z`"
 62         fi
 63 }
 64 
 65 txt_append() {
 66         local anchor="$1"
 67         local insert="$2"
 68         local infile="$3"
 69         local tmpfile="$infile.swp"
 70 
 71         # sed append cmd: 'a\' + newline + text + newline
 72         cmd="$(printf "a\\%b$insert" "\n")"
 73 
 74         sed -e "/$anchor/$cmd" "$infile" >"$tmpfile"
 75         # replace original file with the edited one
 76         mv "$tmpfile" "$infile"
 77 }
 78 
 79 txt_subst() {
 80         local before="$1"
 81         local after="$2"
 82         local infile="$3"
 83         local tmpfile="$infile.swp"
 84 
 85         sed -e "s:$before:$after:" "$infile" >"$tmpfile"
 86         # replace original file with the edited one
 87         mv "$tmpfile" "$infile"
 88 }
 89 
 90 txt_delete() {
 91         local text="$1"
 92         local infile="$2"
 93         local tmpfile="$infile.swp"
 94 
 95         sed -e "/$text/d" "$infile" >"$tmpfile"
 96         # replace original file with the edited one
 97         mv "$tmpfile" "$infile"
 98 }
 99 
100 set_var() {
101         local name=$1 new=$2 before=$3
102 
103         name_re="^($name=|# $name is not set)"
104         before_re="^($before=|# $before is not set)"
105         if test -n "$before" && grep -Eq "$before_re" "$FN"; then
106                 txt_append "^$before=" "$new" "$FN"
107                 txt_append "^# $before is not set" "$new" "$FN"
108         elif grep -Eq "$name_re" "$FN"; then
109                 txt_subst "^$name=.*" "$new" "$FN"
110                 txt_subst "^# $name is not set" "$new" "$FN"
111         else
112                 echo "$new" >>"$FN"
113         fi
114 }
115 
116 undef_var() {
117         local name=$1
118 
119         txt_delete "^$name=" "$FN"
120         txt_delete "^# $name is not set" "$FN"
121 }
122 
123 if [ "$1" = "--file" ]; then
124         FN="$2"
125         if [ "$FN" = "" ] ; then
126                 usage
127         fi
128         shift 2
129 else
130         FN=.config
131 fi
132 
133 if [ "$1" = "" ] ; then
134         usage
135 fi
136 
137 MUNGE_CASE=yes
138 while [ "$1" != "" ] ; do
139         CMD="$1"
140         shift
141         case "$CMD" in
142         --keep-case|-k)
143                 MUNGE_CASE=no
144                 continue
145                 ;;
146         --refresh)
147                 ;;
148         --*-after|-E|-D|-M)
149                 checkarg "$1"
150                 A=$ARG
151                 checkarg "$2"
152                 B=$ARG
153                 shift 2
154                 ;;
155         -*)
156                 checkarg "$1"
157                 shift
158                 ;;
159         esac
160         case "$CMD" in
161         --enable|-e)
162                 set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=y"
163                 ;;
164 
165         --disable|-d)
166                 set_var "${CONFIG_}$ARG" "# ${CONFIG_}$ARG is not set"
167                 ;;
168 
169         --module|-m)
170                 set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=m"
171                 ;;
172 
173         --set-str)
174                 # sed swallows one level of escaping, so we need double-escaping
175                 set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=\"${1//\"/\\\\\"}\""
176                 shift
177                 ;;
178 
179         --set-val)
180                 set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=$1"
181                 shift
182                 ;;
183         --undefine|-u)
184                 undef_var "${CONFIG_}$ARG"
185                 ;;
186 
187         --state|-s)
188                 if grep -q "# ${CONFIG_}$ARG is not set" $FN ; then
189                         echo n
190                 else
191                         V="$(grep "^${CONFIG_}$ARG=" $FN)"
192                         if [ $? != 0 ] ; then
193                                 echo undef
194                         else
195                                 V="${V/#${CONFIG_}$ARG=/}"
196                                 V="${V/#\"/}"
197                                 V="${V/%\"/}"
198                                 V="${V//\\\"/\"}"
199                                 echo "${V}"
200                         fi
201                 fi
202                 ;;
203 
204         --enable-after|-E)
205                 set_var "${CONFIG_}$B" "${CONFIG_}$B=y" "${CONFIG_}$A"
206                 ;;
207 
208         --disable-after|-D)
209                 set_var "${CONFIG_}$B" "# ${CONFIG_}$B is not set" "${CONFIG_}$A"
210                 ;;
211 
212         --module-after|-M)
213                 set_var "${CONFIG_}$B" "${CONFIG_}$B=m" "${CONFIG_}$A"
214                 ;;
215 
216         # undocumented because it ignores --file (fixme)
217         --refresh)
218                 yes "" | make oldconfig
219                 ;;
220 
221         *)
222                 usage
223                 ;;
224         esac
225 done

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us