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 138e54701eSAndi Kleen --state|-s option Print state of option (n,y,m,undef) 148e54701eSAndi Kleen 158e54701eSAndi Kleen --enable-after|-E beforeopt option 168e54701eSAndi Kleen Enable option directly after other option 178e54701eSAndi Kleen --disable-after|-D beforeopt option 188e54701eSAndi Kleen Disable option directly after other option 198e54701eSAndi Kleen --module-after|-M beforeopt option 208e54701eSAndi Kleen Turn option into module directly after other option 218e54701eSAndi Kleen 228e54701eSAndi Kleen commands can be repeated multiple times 238e54701eSAndi Kleen 248e54701eSAndi Kleenoptions: 258e54701eSAndi Kleen --file .config file to change (default .config) 268e54701eSAndi Kleen 278e54701eSAndi Kleenconfig doesn't check the validity of the .config file. This is done at next 288e54701eSAndi Kleen make time. 298e54701eSAndi KleenEOL 308e54701eSAndi Kleen exit 1 318e54701eSAndi Kleen} 328e54701eSAndi Kleen 338e54701eSAndi Kleencheckarg() { 348e54701eSAndi Kleen ARG="$1" 358e54701eSAndi Kleen if [ "$ARG" = "" ] ; then 368e54701eSAndi Kleen usage 378e54701eSAndi Kleen fi 388e54701eSAndi Kleen case "$ARG" in 398e54701eSAndi Kleen CONFIG_*) 408e54701eSAndi Kleen ARG="${ARG/CONFIG_/}" 418e54701eSAndi Kleen ;; 428e54701eSAndi Kleen esac 438e54701eSAndi Kleen ARG="`echo $ARG | tr a-z A-Z`" 448e54701eSAndi Kleen} 458e54701eSAndi Kleen 4656643222SMichal Marekset_var() { 4756643222SMichal Marek local name=$1 new=$2 before=$3 4856643222SMichal Marek 4956643222SMichal Marek name_re="^($name=|# $name is not set)" 5056643222SMichal Marek before_re="^($before=|# $before is not set)" 5156643222SMichal Marek if test -n "$before" && grep -Eq "$before_re" "$FN"; then 5256643222SMichal Marek sed -ri "/$before_re/a $new" "$FN" 5356643222SMichal Marek elif grep -Eq "$name_re" "$FN"; then 5456643222SMichal Marek sed -ri "s:$name_re.*:$new:" "$FN" 5556643222SMichal Marek else 5656643222SMichal Marek echo "$new" >>"$FN" 5756643222SMichal Marek fi 588e54701eSAndi Kleen} 598e54701eSAndi Kleen 608e54701eSAndi Kleenif [ "$1" = "--file" ]; then 618e54701eSAndi Kleen FN="$2" 628e54701eSAndi Kleen if [ "$FN" = "" ] ; then 638e54701eSAndi Kleen usage 648e54701eSAndi Kleen fi 65*47312d2cSMichal Marek shift 2 668e54701eSAndi Kleenelse 678e54701eSAndi Kleen FN=.config 688e54701eSAndi Kleenfi 698e54701eSAndi Kleen 702302e873SAndi Kleenif [ "$1" = "" ] ; then 712302e873SAndi Kleen usage 722302e873SAndi Kleenfi 732302e873SAndi Kleen 748e54701eSAndi Kleenwhile [ "$1" != "" ] ; do 758e54701eSAndi Kleen CMD="$1" 768e54701eSAndi Kleen shift 778e54701eSAndi Kleen case "$CMD" in 78*47312d2cSMichal Marek --refresh) 79*47312d2cSMichal Marek ;; 80*47312d2cSMichal Marek --*-after) 818e54701eSAndi Kleen checkarg "$1" 82*47312d2cSMichal Marek A=$ARG 83*47312d2cSMichal Marek checkarg "$2" 84*47312d2cSMichal Marek B=$ARG 85*47312d2cSMichal Marek shift 2 86*47312d2cSMichal Marek ;; 87*47312d2cSMichal Marek --*) 88*47312d2cSMichal Marek checkarg "$1" 898e54701eSAndi Kleen shift 908e54701eSAndi Kleen ;; 91*47312d2cSMichal Marek esac 92*47312d2cSMichal Marek case "$CMD" in 93*47312d2cSMichal Marek --enable|-e) 94*47312d2cSMichal Marek set_var "CONFIG_$ARG" "CONFIG_$ARG=y" 95*47312d2cSMichal Marek ;; 968e54701eSAndi Kleen 978e54701eSAndi Kleen --disable|-d) 9856643222SMichal Marek set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set" 998e54701eSAndi Kleen ;; 1008e54701eSAndi Kleen 1018e54701eSAndi Kleen --module|-m) 10256643222SMichal Marek set_var "CONFIG_$ARG" "CONFIG_$ARG=m" 1038e54701eSAndi Kleen ;; 1048e54701eSAndi Kleen 1058e54701eSAndi Kleen --state|-s) 1068e54701eSAndi Kleen if grep -q "# CONFIG_$ARG is not set" $FN ; then 1078e54701eSAndi Kleen echo n 1088e54701eSAndi Kleen else 1098e54701eSAndi Kleen V="$(grep "^CONFIG_$ARG=" $FN)" 1108e54701eSAndi Kleen if [ $? != 0 ] ; then 1118e54701eSAndi Kleen echo undef 1128e54701eSAndi Kleen else 1138e54701eSAndi Kleen V="${V/CONFIG_$ARG=/}" 1148e54701eSAndi Kleen V="${V/\"/}" 1158e54701eSAndi Kleen echo "$V" 1168e54701eSAndi Kleen fi 1178e54701eSAndi Kleen fi 1188e54701eSAndi Kleen ;; 1198e54701eSAndi Kleen 1208e54701eSAndi Kleen --enable-after|-E) 12156643222SMichal Marek set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A" 1228e54701eSAndi Kleen ;; 1238e54701eSAndi Kleen 1248e54701eSAndi Kleen --disable-after|-D) 12556643222SMichal Marek set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A" 1268e54701eSAndi Kleen ;; 1278e54701eSAndi Kleen 1288e54701eSAndi Kleen --module-after|-M) 12956643222SMichal Marek set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A" 1308e54701eSAndi Kleen ;; 1318e54701eSAndi Kleen 1328e54701eSAndi Kleen # undocumented because it ignores --file (fixme) 1338e54701eSAndi Kleen --refresh) 1348e54701eSAndi Kleen yes "" | make oldconfig 1358e54701eSAndi Kleen ;; 1368e54701eSAndi Kleen 1378e54701eSAndi Kleen *) 1388e54701eSAndi Kleen usage 1398e54701eSAndi Kleen ;; 1408e54701eSAndi Kleen esac 1418e54701eSAndi Kleendone 1428e54701eSAndi Kleen 143