123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #!/bin/bash
- # Manipulate options in a .config file from the command line
- usage() {
- cat >&2 <<EOL
- Manipulate options in a .config file from the command line.
- Usage:
- config options command ...
- commands:
- --enable|-e option Enable option
- --disable|-d option Disable option
- --module|-m option Turn option into a module
- --state|-s option Print state of option (n,y,m,undef)
- --enable-after|-E beforeopt option
- Enable option directly after other option
- --disable-after|-D beforeopt option
- Disable option directly after other option
- --module-after|-M beforeopt option
- Turn option into module directly after other option
- commands can be repeated multiple times
- options:
- --file .config file to change (default .config)
- config doesn't check the validity of the .config file. This is done at next
- make time.
- The options need to be already in the file before they can be changed,
- but sometimes you can cheat with the --*-after options.
- EOL
- exit 1
- }
- checkarg() {
- ARG="$1"
- if [ "$ARG" = "" ] ; then
- usage
- fi
- case "$ARG" in
- CONFIG_*)
- ARG="${ARG/CONFIG_/}"
- ;;
- esac
- ARG="`echo $ARG | tr a-z A-Z`"
- }
- replace() {
- sed -i -e "$@" $FN
- }
- if [ "$1" = "--file" ]; then
- FN="$2"
- if [ "$FN" = "" ] ; then
- usage
- fi
- shift
- shift
- else
- FN=.config
- fi
- if [ "$1" = "" ] ; then
- usage
- fi
- while [ "$1" != "" ] ; do
- CMD="$1"
- shift
- case "$CMD" in
- --enable|-e)
- checkarg "$1"
- replace "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/"
- shift
- ;;
- --disable|-d)
- checkarg "$1"
- replace "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/"
- shift
- ;;
- --module|-m)
- checkarg "$1"
- replace "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \
- -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/"
- shift
- ;;
- --state|-s)
- checkarg "$1"
- if grep -q "# CONFIG_$ARG is not set" $FN ; then
- echo n
- else
- V="$(grep "^CONFIG_$ARG=" $FN)"
- if [ $? != 0 ] ; then
- echo undef
- else
- V="${V/CONFIG_$ARG=/}"
- V="${V/\"/}"
- echo "$V"
- fi
- fi
- shift
- ;;
- --enable-after|-E)
- checkarg "$1"
- A=$ARG
- checkarg "$2"
- B=$ARG
- replace "/CONFIG_$A=[my]/aCONFIG_$B=y" \
- -e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=y" \
- -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/"
- shift
- shift
- ;;
- --disable-after|-D)
- checkarg "$1"
- A=$ARG
- checkarg "$2"
- B=$ARG
- replace "/CONFIG_$A=[my]/a# CONFIG_$B is not set" \
- -e "/# CONFIG_$ARG is not set/a/# CONFIG_$ARG is not set" \
- -e "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/"
- shift
- shift
- ;;
- --module-after|-M)
- checkarg "$1"
- A=$ARG
- checkarg "$2"
- B=$ARG
- replace "/CONFIG_$A=[my]/aCONFIG_$B=m" \
- -e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=m" \
- -e "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \
- -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/"
- shift
- shift
- ;;
- # undocumented because it ignores --file (fixme)
- --refresh)
- yes "" | make oldconfig
- ;;
- *)
- usage
- ;;
- esac
- done
|