Staging
v0.8.1
Revision 8255309b887fcac11f791913a2d1d0b966a40d32 authored by Linus Torvalds on 13 April 2009, 18:31:28 UTC, committed by Linus Torvalds on 13 April 2009, 18:31:28 UTC
* 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  tracing/filters: return proper error code when writing filter file
  tracing/filters: allow user input integer to be oct or hex
  tracing/filters: fix NULL pointer dereference
  tracing/filters: NIL-terminate user input filter
  ftrace: Output REC->var instead of __entry->var for trace format
  Make __stringify support variable argument macros too
  tracing: fix document references
  tracing: fix splice return too large
  tracing: update file->f_pos when splice(2) it
  tracing: allocate page when needed
  tracing: disable seeking for trace_pipe_raw
2 parent s bf20753 + 44e9c8b
Raw File
config
#!/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

back to top