1*8e54701eSAndi Kleen#!/bin/bash 2*8e54701eSAndi Kleen# Manipulate options in a .config file from the command line 3*8e54701eSAndi Kleen 4*8e54701eSAndi Kleenusage() { 5*8e54701eSAndi Kleen cat >&2 <<EOL 6*8e54701eSAndi KleenManipulate options in a .config file from the command line. 7*8e54701eSAndi KleenUsage: 8*8e54701eSAndi Kleenconfig options command ... 9*8e54701eSAndi Kleencommands: 10*8e54701eSAndi Kleen --enable|-e option Enable option 11*8e54701eSAndi Kleen --disable|-d option Disable option 12*8e54701eSAndi Kleen --module|-m option Turn option into a module 13*8e54701eSAndi Kleen --state|-s option Print state of option (n,y,m,undef) 14*8e54701eSAndi Kleen 15*8e54701eSAndi Kleen --enable-after|-E beforeopt option 16*8e54701eSAndi Kleen Enable option directly after other option 17*8e54701eSAndi Kleen --disable-after|-D beforeopt option 18*8e54701eSAndi Kleen Disable option directly after other option 19*8e54701eSAndi Kleen --module-after|-M beforeopt option 20*8e54701eSAndi Kleen Turn option into module directly after other option 21*8e54701eSAndi Kleen 22*8e54701eSAndi Kleen commands can be repeated multiple times 23*8e54701eSAndi Kleen 24*8e54701eSAndi Kleenoptions: 25*8e54701eSAndi Kleen --file .config file to change (default .config) 26*8e54701eSAndi Kleen 27*8e54701eSAndi Kleenconfig doesn't check the validity of the .config file. This is done at next 28*8e54701eSAndi Kleen make time. 29*8e54701eSAndi KleenThe options need to be already in the file before they can be changed, 30*8e54701eSAndi Kleenbut sometimes you can cheat with the --*-after options. 31*8e54701eSAndi KleenEOL 32*8e54701eSAndi Kleen exit 1 33*8e54701eSAndi Kleen} 34*8e54701eSAndi Kleen 35*8e54701eSAndi Kleencheckarg() { 36*8e54701eSAndi Kleen ARG="$1" 37*8e54701eSAndi Kleen if [ "$ARG" = "" ] ; then 38*8e54701eSAndi Kleen usage 39*8e54701eSAndi Kleen fi 40*8e54701eSAndi Kleen case "$ARG" in 41*8e54701eSAndi Kleen CONFIG_*) 42*8e54701eSAndi Kleen ARG="${ARG/CONFIG_/}" 43*8e54701eSAndi Kleen ;; 44*8e54701eSAndi Kleen esac 45*8e54701eSAndi Kleen ARG="`echo $ARG | tr a-z A-Z`" 46*8e54701eSAndi Kleen} 47*8e54701eSAndi Kleen 48*8e54701eSAndi Kleenreplace() { 49*8e54701eSAndi Kleen sed -i -e "$@" $FN 50*8e54701eSAndi Kleen} 51*8e54701eSAndi Kleen 52*8e54701eSAndi Kleenif [ "$1" = "--file" ]; then 53*8e54701eSAndi Kleen FN="$2" 54*8e54701eSAndi Kleen if [ "$FN" = "" ] ; then 55*8e54701eSAndi Kleen usage 56*8e54701eSAndi Kleen fi 57*8e54701eSAndi Kleen shift 58*8e54701eSAndi Kleen shift 59*8e54701eSAndi Kleenelse 60*8e54701eSAndi Kleen FN=.config 61*8e54701eSAndi Kleenfi 62*8e54701eSAndi Kleen 63*8e54701eSAndi Kleenwhile [ "$1" != "" ] ; do 64*8e54701eSAndi Kleen CMD="$1" 65*8e54701eSAndi Kleen shift 66*8e54701eSAndi Kleen case "$CMD" in 67*8e54701eSAndi Kleen --enable|-e) 68*8e54701eSAndi Kleen checkarg "$1" 69*8e54701eSAndi Kleen replace "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/" 70*8e54701eSAndi Kleen shift 71*8e54701eSAndi Kleen ;; 72*8e54701eSAndi Kleen 73*8e54701eSAndi Kleen --disable|-d) 74*8e54701eSAndi Kleen checkarg "$1" 75*8e54701eSAndi Kleen replace "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/" 76*8e54701eSAndi Kleen shift 77*8e54701eSAndi Kleen ;; 78*8e54701eSAndi Kleen 79*8e54701eSAndi Kleen --module|-m) 80*8e54701eSAndi Kleen checkarg "$1" 81*8e54701eSAndi Kleen replace "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \ 82*8e54701eSAndi Kleen -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/" 83*8e54701eSAndi Kleen shift 84*8e54701eSAndi Kleen ;; 85*8e54701eSAndi Kleen 86*8e54701eSAndi Kleen --state|-s) 87*8e54701eSAndi Kleen checkarg "$1" 88*8e54701eSAndi Kleen if grep -q "# CONFIG_$ARG is not set" $FN ; then 89*8e54701eSAndi Kleen echo n 90*8e54701eSAndi Kleen else 91*8e54701eSAndi Kleen V="$(grep "^CONFIG_$ARG=" $FN)" 92*8e54701eSAndi Kleen if [ $? != 0 ] ; then 93*8e54701eSAndi Kleen echo undef 94*8e54701eSAndi Kleen else 95*8e54701eSAndi Kleen V="${V/CONFIG_$ARG=/}" 96*8e54701eSAndi Kleen V="${V/\"/}" 97*8e54701eSAndi Kleen echo "$V" 98*8e54701eSAndi Kleen fi 99*8e54701eSAndi Kleen fi 100*8e54701eSAndi Kleen shift 101*8e54701eSAndi Kleen ;; 102*8e54701eSAndi Kleen 103*8e54701eSAndi Kleen --enable-after|-E) 104*8e54701eSAndi Kleen checkarg "$1" 105*8e54701eSAndi Kleen A=$ARG 106*8e54701eSAndi Kleen checkarg "$2" 107*8e54701eSAndi Kleen B=$ARG 108*8e54701eSAndi Kleen replace "/CONFIG_$A=[my]/aCONFIG_$B=y" \ 109*8e54701eSAndi Kleen -e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=y" \ 110*8e54701eSAndi Kleen -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/" 111*8e54701eSAndi Kleen shift 112*8e54701eSAndi Kleen shift 113*8e54701eSAndi Kleen ;; 114*8e54701eSAndi Kleen 115*8e54701eSAndi Kleen --disable-after|-D) 116*8e54701eSAndi Kleen checkarg "$1" 117*8e54701eSAndi Kleen A=$ARG 118*8e54701eSAndi Kleen checkarg "$2" 119*8e54701eSAndi Kleen B=$ARG 120*8e54701eSAndi Kleen replace "/CONFIG_$A=[my]/a# CONFIG_$B is not set" \ 121*8e54701eSAndi Kleen -e "/# CONFIG_$ARG is not set/a/# CONFIG_$ARG is not set" \ 122*8e54701eSAndi Kleen -e "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/" 123*8e54701eSAndi Kleen shift 124*8e54701eSAndi Kleen shift 125*8e54701eSAndi Kleen ;; 126*8e54701eSAndi Kleen 127*8e54701eSAndi Kleen --module-after|-M) 128*8e54701eSAndi Kleen checkarg "$1" 129*8e54701eSAndi Kleen A=$ARG 130*8e54701eSAndi Kleen checkarg "$2" 131*8e54701eSAndi Kleen B=$ARG 132*8e54701eSAndi Kleen replace "/CONFIG_$A=[my]/aCONFIG_$B=m" \ 133*8e54701eSAndi Kleen -e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=m" \ 134*8e54701eSAndi Kleen -e "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \ 135*8e54701eSAndi Kleen -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/" 136*8e54701eSAndi Kleen shift 137*8e54701eSAndi Kleen shift 138*8e54701eSAndi Kleen ;; 139*8e54701eSAndi Kleen 140*8e54701eSAndi Kleen # undocumented because it ignores --file (fixme) 141*8e54701eSAndi Kleen --refresh) 142*8e54701eSAndi Kleen yes "" | make oldconfig 143*8e54701eSAndi Kleen ;; 144*8e54701eSAndi Kleen 145*8e54701eSAndi Kleen *) 146*8e54701eSAndi Kleen usage 147*8e54701eSAndi Kleen ;; 148*8e54701eSAndi Kleen esac 149*8e54701eSAndi Kleendone 150*8e54701eSAndi Kleen 151