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 KleenThe options need to be already in the file before they can be changed, 308e54701eSAndi Kleenbut sometimes you can cheat with the --*-after options. 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 488e54701eSAndi Kleenreplace() { 498e54701eSAndi Kleen sed -i -e "$@" $FN 508e54701eSAndi Kleen} 518e54701eSAndi Kleen 528e54701eSAndi Kleenif [ "$1" = "--file" ]; then 538e54701eSAndi Kleen FN="$2" 548e54701eSAndi Kleen if [ "$FN" = "" ] ; then 558e54701eSAndi Kleen usage 568e54701eSAndi Kleen fi 578e54701eSAndi Kleen shift 588e54701eSAndi Kleen shift 598e54701eSAndi Kleenelse 608e54701eSAndi Kleen FN=.config 618e54701eSAndi Kleenfi 628e54701eSAndi Kleen 63*2302e873SAndi Kleenif [ "$1" = "" ] ; then 64*2302e873SAndi Kleen usage 65*2302e873SAndi Kleenfi 66*2302e873SAndi Kleen 678e54701eSAndi Kleenwhile [ "$1" != "" ] ; do 688e54701eSAndi Kleen CMD="$1" 698e54701eSAndi Kleen shift 708e54701eSAndi Kleen case "$CMD" in 718e54701eSAndi Kleen --enable|-e) 728e54701eSAndi Kleen checkarg "$1" 738e54701eSAndi Kleen replace "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/" 748e54701eSAndi Kleen shift 758e54701eSAndi Kleen ;; 768e54701eSAndi Kleen 778e54701eSAndi Kleen --disable|-d) 788e54701eSAndi Kleen checkarg "$1" 798e54701eSAndi Kleen replace "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/" 808e54701eSAndi Kleen shift 818e54701eSAndi Kleen ;; 828e54701eSAndi Kleen 838e54701eSAndi Kleen --module|-m) 848e54701eSAndi Kleen checkarg "$1" 858e54701eSAndi Kleen replace "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \ 868e54701eSAndi Kleen -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/" 878e54701eSAndi Kleen shift 888e54701eSAndi Kleen ;; 898e54701eSAndi Kleen 908e54701eSAndi Kleen --state|-s) 918e54701eSAndi Kleen checkarg "$1" 928e54701eSAndi Kleen if grep -q "# CONFIG_$ARG is not set" $FN ; then 938e54701eSAndi Kleen echo n 948e54701eSAndi Kleen else 958e54701eSAndi Kleen V="$(grep "^CONFIG_$ARG=" $FN)" 968e54701eSAndi Kleen if [ $? != 0 ] ; then 978e54701eSAndi Kleen echo undef 988e54701eSAndi Kleen else 998e54701eSAndi Kleen V="${V/CONFIG_$ARG=/}" 1008e54701eSAndi Kleen V="${V/\"/}" 1018e54701eSAndi Kleen echo "$V" 1028e54701eSAndi Kleen fi 1038e54701eSAndi Kleen fi 1048e54701eSAndi Kleen shift 1058e54701eSAndi Kleen ;; 1068e54701eSAndi Kleen 1078e54701eSAndi Kleen --enable-after|-E) 1088e54701eSAndi Kleen checkarg "$1" 1098e54701eSAndi Kleen A=$ARG 1108e54701eSAndi Kleen checkarg "$2" 1118e54701eSAndi Kleen B=$ARG 1128e54701eSAndi Kleen replace "/CONFIG_$A=[my]/aCONFIG_$B=y" \ 1138e54701eSAndi Kleen -e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=y" \ 1148e54701eSAndi Kleen -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/" 1158e54701eSAndi Kleen shift 1168e54701eSAndi Kleen shift 1178e54701eSAndi Kleen ;; 1188e54701eSAndi Kleen 1198e54701eSAndi Kleen --disable-after|-D) 1208e54701eSAndi Kleen checkarg "$1" 1218e54701eSAndi Kleen A=$ARG 1228e54701eSAndi Kleen checkarg "$2" 1238e54701eSAndi Kleen B=$ARG 1248e54701eSAndi Kleen replace "/CONFIG_$A=[my]/a# CONFIG_$B is not set" \ 1258e54701eSAndi Kleen -e "/# CONFIG_$ARG is not set/a/# CONFIG_$ARG is not set" \ 1268e54701eSAndi Kleen -e "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/" 1278e54701eSAndi Kleen shift 1288e54701eSAndi Kleen shift 1298e54701eSAndi Kleen ;; 1308e54701eSAndi Kleen 1318e54701eSAndi Kleen --module-after|-M) 1328e54701eSAndi Kleen checkarg "$1" 1338e54701eSAndi Kleen A=$ARG 1348e54701eSAndi Kleen checkarg "$2" 1358e54701eSAndi Kleen B=$ARG 1368e54701eSAndi Kleen replace "/CONFIG_$A=[my]/aCONFIG_$B=m" \ 1378e54701eSAndi Kleen -e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=m" \ 1388e54701eSAndi Kleen -e "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \ 1398e54701eSAndi Kleen -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/" 1408e54701eSAndi Kleen shift 1418e54701eSAndi Kleen shift 1428e54701eSAndi Kleen ;; 1438e54701eSAndi Kleen 1448e54701eSAndi Kleen # undocumented because it ignores --file (fixme) 1458e54701eSAndi Kleen --refresh) 1468e54701eSAndi Kleen yes "" | make oldconfig 1478e54701eSAndi Kleen ;; 1488e54701eSAndi Kleen 1498e54701eSAndi Kleen *) 1508e54701eSAndi Kleen usage 1518e54701eSAndi Kleen ;; 1528e54701eSAndi Kleen esac 1538e54701eSAndi Kleendone 1548e54701eSAndi Kleen 155