18e54701eSAndi Kleen#!/bin/bash 28e54701eSAndi Kleen# Manipulate options in a .config file from the command line 38e54701eSAndi Kleen 48e54701eSAndi Kleenusage() { 58e54701eSAndi Kleen cat >&2 <<EOL 68e54701eSAndi KleenManipulate options in a .config file from the command line. 78e54701eSAndi KleenUsage: 88e54701eSAndi Kleenconfig options command ... 98e54701eSAndi Kleencommands: 108e54701eSAndi Kleen --enable|-e option Enable option 118e54701eSAndi Kleen --disable|-d option Disable option 128e54701eSAndi Kleen --module|-m option Turn option into a module 131f990cf9SMichal Marek --set-str option value 141f990cf9SMichal Marek Set option to "value" 158e54701eSAndi Kleen --state|-s option Print state of option (n,y,m,undef) 168e54701eSAndi Kleen 178e54701eSAndi Kleen --enable-after|-E beforeopt option 188e54701eSAndi Kleen Enable option directly after other option 198e54701eSAndi Kleen --disable-after|-D beforeopt option 208e54701eSAndi Kleen Disable option directly after other option 218e54701eSAndi Kleen --module-after|-M beforeopt option 228e54701eSAndi Kleen Turn option into module directly after other option 238e54701eSAndi Kleen 248e54701eSAndi Kleen commands can be repeated multiple times 258e54701eSAndi Kleen 268e54701eSAndi Kleenoptions: 278e54701eSAndi Kleen --file .config file to change (default .config) 288e54701eSAndi Kleen 298e54701eSAndi Kleenconfig doesn't check the validity of the .config file. This is done at next 308e54701eSAndi Kleen make time. 318e54701eSAndi KleenEOL 328e54701eSAndi Kleen exit 1 338e54701eSAndi Kleen} 348e54701eSAndi Kleen 358e54701eSAndi Kleencheckarg() { 368e54701eSAndi Kleen ARG="$1" 378e54701eSAndi Kleen if [ "$ARG" = "" ] ; then 388e54701eSAndi Kleen usage 398e54701eSAndi Kleen fi 408e54701eSAndi Kleen case "$ARG" in 418e54701eSAndi Kleen CONFIG_*) 428e54701eSAndi Kleen ARG="${ARG/CONFIG_/}" 438e54701eSAndi Kleen ;; 448e54701eSAndi Kleen esac 458e54701eSAndi Kleen ARG="`echo $ARG | tr a-z A-Z`" 468e54701eSAndi Kleen} 478e54701eSAndi Kleen 4856643222SMichal Marekset_var() { 4956643222SMichal Marek local name=$1 new=$2 before=$3 5056643222SMichal Marek 5156643222SMichal Marek name_re="^($name=|# $name is not set)" 5256643222SMichal Marek before_re="^($before=|# $before is not set)" 5356643222SMichal Marek if test -n "$before" && grep -Eq "$before_re" "$FN"; then 5456643222SMichal Marek sed -ri "/$before_re/a $new" "$FN" 5556643222SMichal Marek elif grep -Eq "$name_re" "$FN"; then 5656643222SMichal Marek sed -ri "s:$name_re.*:$new:" "$FN" 5756643222SMichal Marek else 5856643222SMichal Marek echo "$new" >>"$FN" 5956643222SMichal Marek fi 608e54701eSAndi Kleen} 618e54701eSAndi Kleen 628e54701eSAndi Kleenif [ "$1" = "--file" ]; then 638e54701eSAndi Kleen FN="$2" 648e54701eSAndi Kleen if [ "$FN" = "" ] ; then 658e54701eSAndi Kleen usage 668e54701eSAndi Kleen fi 6747312d2cSMichal Marek shift 2 688e54701eSAndi Kleenelse 698e54701eSAndi Kleen FN=.config 708e54701eSAndi Kleenfi 718e54701eSAndi Kleen 722302e873SAndi Kleenif [ "$1" = "" ] ; then 732302e873SAndi Kleen usage 742302e873SAndi Kleenfi 752302e873SAndi Kleen 768e54701eSAndi Kleenwhile [ "$1" != "" ] ; do 778e54701eSAndi Kleen CMD="$1" 788e54701eSAndi Kleen shift 798e54701eSAndi Kleen case "$CMD" in 8047312d2cSMichal Marek --refresh) 8147312d2cSMichal Marek ;; 8247312d2cSMichal Marek --*-after) 838e54701eSAndi Kleen checkarg "$1" 8447312d2cSMichal Marek A=$ARG 8547312d2cSMichal Marek checkarg "$2" 8647312d2cSMichal Marek B=$ARG 8747312d2cSMichal Marek shift 2 8847312d2cSMichal Marek ;; 8947312d2cSMichal Marek --*) 9047312d2cSMichal Marek checkarg "$1" 918e54701eSAndi Kleen shift 928e54701eSAndi Kleen ;; 9347312d2cSMichal Marek esac 9447312d2cSMichal Marek case "$CMD" in 9547312d2cSMichal Marek --enable|-e) 9647312d2cSMichal Marek set_var "CONFIG_$ARG" "CONFIG_$ARG=y" 9747312d2cSMichal Marek ;; 988e54701eSAndi Kleen 998e54701eSAndi Kleen --disable|-d) 10056643222SMichal Marek set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set" 1018e54701eSAndi Kleen ;; 1028e54701eSAndi Kleen 1038e54701eSAndi Kleen --module|-m) 10456643222SMichal Marek set_var "CONFIG_$ARG" "CONFIG_$ARG=m" 1058e54701eSAndi Kleen ;; 1068e54701eSAndi Kleen 1071f990cf9SMichal Marek --set-str) 1081f990cf9SMichal Marek set_var "CONFIG_$ARG" "CONFIG_$ARG=\"$1\"" 1091f990cf9SMichal Marek shift 1101f990cf9SMichal Marek ;; 1111f990cf9SMichal Marek 1128e54701eSAndi Kleen --state|-s) 1138e54701eSAndi Kleen if grep -q "# CONFIG_$ARG is not set" $FN ; then 1148e54701eSAndi Kleen echo n 1158e54701eSAndi Kleen else 1168e54701eSAndi Kleen V="$(grep "^CONFIG_$ARG=" $FN)" 1178e54701eSAndi Kleen if [ $? != 0 ] ; then 1188e54701eSAndi Kleen echo undef 1198e54701eSAndi Kleen else 1208e54701eSAndi Kleen V="${V/CONFIG_$ARG=/}" 1218e54701eSAndi Kleen V="${V/\"/}" 1228e54701eSAndi Kleen echo "$V" 1238e54701eSAndi Kleen fi 1248e54701eSAndi Kleen fi 1258e54701eSAndi Kleen ;; 1268e54701eSAndi Kleen 1278e54701eSAndi Kleen --enable-after|-E) 12856643222SMichal Marek set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A" 1298e54701eSAndi Kleen ;; 1308e54701eSAndi Kleen 1318e54701eSAndi Kleen --disable-after|-D) 13256643222SMichal Marek set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A" 1338e54701eSAndi Kleen ;; 1348e54701eSAndi Kleen 1358e54701eSAndi Kleen --module-after|-M) 13656643222SMichal Marek set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A" 1378e54701eSAndi Kleen ;; 1388e54701eSAndi Kleen 1398e54701eSAndi Kleen # undocumented because it ignores --file (fixme) 1408e54701eSAndi Kleen --refresh) 1418e54701eSAndi Kleen yes "" | make oldconfig 1428e54701eSAndi Kleen ;; 1438e54701eSAndi Kleen 1448e54701eSAndi Kleen *) 1458e54701eSAndi Kleen usage 1468e54701eSAndi Kleen ;; 1478e54701eSAndi Kleen esac 1488e54701eSAndi Kleendone 1498e54701eSAndi Kleen 150