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 13f0a6332cSJonas Aaberg --set-str option string 14f0a6332cSJonas Aaberg Set option to "string" 15f0a6332cSJonas Aaberg --set-val option value 16f0a6332cSJonas Aaberg Set option to value 178e54701eSAndi Kleen --state|-s option Print state of option (n,y,m,undef) 188e54701eSAndi Kleen 198e54701eSAndi Kleen --enable-after|-E beforeopt option 208e54701eSAndi Kleen Enable option directly after other option 218e54701eSAndi Kleen --disable-after|-D beforeopt option 228e54701eSAndi Kleen Disable option directly after other option 238e54701eSAndi Kleen --module-after|-M beforeopt option 248e54701eSAndi Kleen Turn option into module directly after other option 258e54701eSAndi Kleen 268e54701eSAndi Kleen commands can be repeated multiple times 278e54701eSAndi Kleen 288e54701eSAndi Kleenoptions: 294edc7e32SYann E. MORIN --file config-file .config file to change (default .config) 304edc7e32SYann E. MORIN --keep-case|-k Keep next symbols' case (dont' upper-case it) 318e54701eSAndi Kleen 328e54701eSAndi Kleenconfig doesn't check the validity of the .config file. This is done at next 338e54701eSAndi Kleenmake time. 344edc7e32SYann E. MORIN 354edc7e32SYann E. MORINBy default, config will upper-case the given symbol. Use --keep-case to keep 364edc7e32SYann E. MORINthe case of all following symbols unchanged. 378e54701eSAndi KleenEOL 388e54701eSAndi Kleen exit 1 398e54701eSAndi Kleen} 408e54701eSAndi Kleen 418e54701eSAndi Kleencheckarg() { 428e54701eSAndi Kleen ARG="$1" 438e54701eSAndi Kleen if [ "$ARG" = "" ] ; then 448e54701eSAndi Kleen usage 458e54701eSAndi Kleen fi 468e54701eSAndi Kleen case "$ARG" in 478e54701eSAndi Kleen CONFIG_*) 488e54701eSAndi Kleen ARG="${ARG/CONFIG_/}" 498e54701eSAndi Kleen ;; 508e54701eSAndi Kleen esac 514edc7e32SYann E. MORIN if [ "$MUNGE_CASE" = "yes" ] ; then 528e54701eSAndi Kleen ARG="`echo $ARG | tr a-z A-Z`" 534edc7e32SYann E. MORIN fi 548e54701eSAndi Kleen} 558e54701eSAndi Kleen 5656643222SMichal Marekset_var() { 5756643222SMichal Marek local name=$1 new=$2 before=$3 5856643222SMichal Marek 5956643222SMichal Marek name_re="^($name=|# $name is not set)" 6056643222SMichal Marek before_re="^($before=|# $before is not set)" 6156643222SMichal Marek if test -n "$before" && grep -Eq "$before_re" "$FN"; then 6256643222SMichal Marek sed -ri "/$before_re/a $new" "$FN" 6356643222SMichal Marek elif grep -Eq "$name_re" "$FN"; then 6456643222SMichal Marek sed -ri "s:$name_re.*:$new:" "$FN" 6556643222SMichal Marek else 6656643222SMichal Marek echo "$new" >>"$FN" 6756643222SMichal Marek fi 688e54701eSAndi Kleen} 698e54701eSAndi Kleen 708e54701eSAndi Kleenif [ "$1" = "--file" ]; then 718e54701eSAndi Kleen FN="$2" 728e54701eSAndi Kleen if [ "$FN" = "" ] ; then 738e54701eSAndi Kleen usage 748e54701eSAndi Kleen fi 7547312d2cSMichal Marek shift 2 768e54701eSAndi Kleenelse 778e54701eSAndi Kleen FN=.config 788e54701eSAndi Kleenfi 798e54701eSAndi Kleen 802302e873SAndi Kleenif [ "$1" = "" ] ; then 812302e873SAndi Kleen usage 822302e873SAndi Kleenfi 832302e873SAndi Kleen 844edc7e32SYann E. MORINMUNGE_CASE=yes 858e54701eSAndi Kleenwhile [ "$1" != "" ] ; do 868e54701eSAndi Kleen CMD="$1" 878e54701eSAndi Kleen shift 888e54701eSAndi Kleen case "$CMD" in 894edc7e32SYann E. MORIN --keep-case|-k) 904edc7e32SYann E. MORIN MUNGE_CASE=no 914edc7e32SYann E. MORIN shift 924edc7e32SYann E. MORIN continue 934edc7e32SYann E. MORIN ;; 9447312d2cSMichal Marek --refresh) 9547312d2cSMichal Marek ;; 9647312d2cSMichal Marek --*-after) 978e54701eSAndi Kleen checkarg "$1" 9847312d2cSMichal Marek A=$ARG 9947312d2cSMichal Marek checkarg "$2" 10047312d2cSMichal Marek B=$ARG 10147312d2cSMichal Marek shift 2 10247312d2cSMichal Marek ;; 10345f53cc9SAndi Kleen -*) 10447312d2cSMichal Marek checkarg "$1" 1058e54701eSAndi Kleen shift 1068e54701eSAndi Kleen ;; 10747312d2cSMichal Marek esac 10847312d2cSMichal Marek case "$CMD" in 10947312d2cSMichal Marek --enable|-e) 11047312d2cSMichal Marek set_var "CONFIG_$ARG" "CONFIG_$ARG=y" 11147312d2cSMichal Marek ;; 1128e54701eSAndi Kleen 1138e54701eSAndi Kleen --disable|-d) 11456643222SMichal Marek set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set" 1158e54701eSAndi Kleen ;; 1168e54701eSAndi Kleen 1178e54701eSAndi Kleen --module|-m) 11856643222SMichal Marek set_var "CONFIG_$ARG" "CONFIG_$ARG=m" 1198e54701eSAndi Kleen ;; 1208e54701eSAndi Kleen 1211f990cf9SMichal Marek --set-str) 122d6686da8SYann E. MORIN # sed swallows one level of escaping, so we need double-escaping 123d6686da8SYann E. MORIN set_var "CONFIG_$ARG" "CONFIG_$ARG=\"${1//\"/\\\\\"}\"" 1241f990cf9SMichal Marek shift 1251f990cf9SMichal Marek ;; 1261f990cf9SMichal Marek 127f0a6332cSJonas Aaberg --set-val) 128f0a6332cSJonas Aaberg set_var "CONFIG_$ARG" "CONFIG_$ARG=$1" 129f0a6332cSJonas Aaberg shift 130f0a6332cSJonas Aaberg ;; 131f0a6332cSJonas Aaberg 1328e54701eSAndi Kleen --state|-s) 1338e54701eSAndi Kleen if grep -q "# CONFIG_$ARG is not set" $FN ; then 1348e54701eSAndi Kleen echo n 1358e54701eSAndi Kleen else 1368e54701eSAndi Kleen V="$(grep "^CONFIG_$ARG=" $FN)" 1378e54701eSAndi Kleen if [ $? != 0 ] ; then 1388e54701eSAndi Kleen echo undef 1398e54701eSAndi Kleen else 140d6686da8SYann E. MORIN V="${V/#CONFIG_$ARG=/}" 141d6686da8SYann E. MORIN V="${V/#\"/}" 142d6686da8SYann E. MORIN V="${V/%\"/}" 143d6686da8SYann E. MORIN V="${V/\\\"/\"}" 144d6686da8SYann E. MORIN echo "${V}" 1458e54701eSAndi Kleen fi 1468e54701eSAndi Kleen fi 1478e54701eSAndi Kleen ;; 1488e54701eSAndi Kleen 1498e54701eSAndi Kleen --enable-after|-E) 15056643222SMichal Marek set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A" 1518e54701eSAndi Kleen ;; 1528e54701eSAndi Kleen 1538e54701eSAndi Kleen --disable-after|-D) 15456643222SMichal Marek set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A" 1558e54701eSAndi Kleen ;; 1568e54701eSAndi Kleen 1578e54701eSAndi Kleen --module-after|-M) 15856643222SMichal Marek set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A" 1598e54701eSAndi Kleen ;; 1608e54701eSAndi Kleen 1618e54701eSAndi Kleen # undocumented because it ignores --file (fixme) 1628e54701eSAndi Kleen --refresh) 1638e54701eSAndi Kleen yes "" | make oldconfig 1648e54701eSAndi Kleen ;; 1658e54701eSAndi Kleen 1668e54701eSAndi Kleen *) 1678e54701eSAndi Kleen usage 1688e54701eSAndi Kleen ;; 1698e54701eSAndi Kleen esac 1708e54701eSAndi Kleendone 1718e54701eSAndi Kleen 172