154 lines · 2.9 KB · Text
RawDownload
#!/bin/bash# Manipulate options in a .config file from the command line usage() {	cat >&2 <<EOLManipulate 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	shiftelse	FN=.configfi if [ "$1" = "" ] ; then	usagefi 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		;;	esacdone