#!/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

