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