~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/config

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php