xref: /openbmc/linux/scripts/config (revision 1f990cf9)
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
131f990cf9SMichal Marek	--set-str option value
141f990cf9SMichal Marek	                     Set option to "value"
158e54701eSAndi Kleen	--state|-s option    Print state of option (n,y,m,undef)
168e54701eSAndi Kleen
178e54701eSAndi Kleen	--enable-after|-E beforeopt option
188e54701eSAndi Kleen                             Enable option directly after other option
198e54701eSAndi Kleen	--disable-after|-D beforeopt option
208e54701eSAndi Kleen                             Disable option directly after other option
218e54701eSAndi Kleen	--module-after|-M beforeopt option
228e54701eSAndi Kleen                             Turn option into module directly after other option
238e54701eSAndi Kleen
248e54701eSAndi Kleen	commands can be repeated multiple times
258e54701eSAndi Kleen
268e54701eSAndi Kleenoptions:
278e54701eSAndi Kleen	--file .config file to change (default .config)
288e54701eSAndi Kleen
298e54701eSAndi Kleenconfig doesn't check the validity of the .config file. This is done at next
308e54701eSAndi Kleen make time.
318e54701eSAndi KleenEOL
328e54701eSAndi Kleen	exit 1
338e54701eSAndi Kleen}
348e54701eSAndi Kleen
358e54701eSAndi Kleencheckarg() {
368e54701eSAndi Kleen	ARG="$1"
378e54701eSAndi Kleen	if [ "$ARG" = "" ] ; then
388e54701eSAndi Kleen		usage
398e54701eSAndi Kleen	fi
408e54701eSAndi Kleen	case "$ARG" in
418e54701eSAndi Kleen	CONFIG_*)
428e54701eSAndi Kleen		ARG="${ARG/CONFIG_/}"
438e54701eSAndi Kleen		;;
448e54701eSAndi Kleen	esac
458e54701eSAndi Kleen	ARG="`echo $ARG | tr a-z A-Z`"
468e54701eSAndi Kleen}
478e54701eSAndi Kleen
4856643222SMichal Marekset_var() {
4956643222SMichal Marek	local name=$1 new=$2 before=$3
5056643222SMichal Marek
5156643222SMichal Marek	name_re="^($name=|# $name is not set)"
5256643222SMichal Marek	before_re="^($before=|# $before is not set)"
5356643222SMichal Marek	if test -n "$before" && grep -Eq "$before_re" "$FN"; then
5456643222SMichal Marek		sed -ri "/$before_re/a $new" "$FN"
5556643222SMichal Marek	elif grep -Eq "$name_re" "$FN"; then
5656643222SMichal Marek		sed -ri "s:$name_re.*:$new:" "$FN"
5756643222SMichal Marek	else
5856643222SMichal Marek		echo "$new" >>"$FN"
5956643222SMichal Marek	fi
608e54701eSAndi Kleen}
618e54701eSAndi Kleen
628e54701eSAndi Kleenif [ "$1" = "--file" ]; then
638e54701eSAndi Kleen	FN="$2"
648e54701eSAndi Kleen	if [ "$FN" = "" ] ; then
658e54701eSAndi Kleen		usage
668e54701eSAndi Kleen	fi
6747312d2cSMichal Marek	shift 2
688e54701eSAndi Kleenelse
698e54701eSAndi Kleen	FN=.config
708e54701eSAndi Kleenfi
718e54701eSAndi Kleen
722302e873SAndi Kleenif [ "$1" = "" ] ; then
732302e873SAndi Kleen	usage
742302e873SAndi Kleenfi
752302e873SAndi Kleen
768e54701eSAndi Kleenwhile [ "$1" != "" ] ; do
778e54701eSAndi Kleen	CMD="$1"
788e54701eSAndi Kleen	shift
798e54701eSAndi Kleen	case "$CMD" in
8047312d2cSMichal Marek	--refresh)
8147312d2cSMichal Marek		;;
8247312d2cSMichal Marek	--*-after)
838e54701eSAndi Kleen		checkarg "$1"
8447312d2cSMichal Marek		A=$ARG
8547312d2cSMichal Marek		checkarg "$2"
8647312d2cSMichal Marek		B=$ARG
8747312d2cSMichal Marek		shift 2
8847312d2cSMichal Marek		;;
8947312d2cSMichal Marek	--*)
9047312d2cSMichal Marek		checkarg "$1"
918e54701eSAndi Kleen		shift
928e54701eSAndi Kleen		;;
9347312d2cSMichal Marek	esac
9447312d2cSMichal Marek	case "$CMD" in
9547312d2cSMichal Marek	--enable|-e)
9647312d2cSMichal Marek		set_var "CONFIG_$ARG" "CONFIG_$ARG=y"
9747312d2cSMichal Marek		;;
988e54701eSAndi Kleen
998e54701eSAndi Kleen	--disable|-d)
10056643222SMichal Marek		set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set"
1018e54701eSAndi Kleen		;;
1028e54701eSAndi Kleen
1038e54701eSAndi Kleen	--module|-m)
10456643222SMichal Marek		set_var "CONFIG_$ARG" "CONFIG_$ARG=m"
1058e54701eSAndi Kleen		;;
1068e54701eSAndi Kleen
1071f990cf9SMichal Marek	--set-str)
1081f990cf9SMichal Marek		set_var "CONFIG_$ARG" "CONFIG_$ARG=\"$1\""
1091f990cf9SMichal Marek		shift
1101f990cf9SMichal Marek		;;
1111f990cf9SMichal Marek
1128e54701eSAndi Kleen	--state|-s)
1138e54701eSAndi Kleen		if grep -q "# CONFIG_$ARG is not set" $FN ; then
1148e54701eSAndi Kleen			echo n
1158e54701eSAndi Kleen		else
1168e54701eSAndi Kleen			V="$(grep "^CONFIG_$ARG=" $FN)"
1178e54701eSAndi Kleen			if [ $? != 0 ] ; then
1188e54701eSAndi Kleen				echo undef
1198e54701eSAndi Kleen			else
1208e54701eSAndi Kleen				V="${V/CONFIG_$ARG=/}"
1218e54701eSAndi Kleen				V="${V/\"/}"
1228e54701eSAndi Kleen				echo "$V"
1238e54701eSAndi Kleen			fi
1248e54701eSAndi Kleen		fi
1258e54701eSAndi Kleen		;;
1268e54701eSAndi Kleen
1278e54701eSAndi Kleen	--enable-after|-E)
12856643222SMichal Marek		set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A"
1298e54701eSAndi Kleen		;;
1308e54701eSAndi Kleen
1318e54701eSAndi Kleen	--disable-after|-D)
13256643222SMichal Marek		set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A"
1338e54701eSAndi Kleen		;;
1348e54701eSAndi Kleen
1358e54701eSAndi Kleen	--module-after|-M)
13656643222SMichal Marek		set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A"
1378e54701eSAndi Kleen		;;
1388e54701eSAndi Kleen
1398e54701eSAndi Kleen	# undocumented because it ignores --file (fixme)
1408e54701eSAndi Kleen	--refresh)
1418e54701eSAndi Kleen		yes "" | make oldconfig
1428e54701eSAndi Kleen		;;
1438e54701eSAndi Kleen
1448e54701eSAndi Kleen	*)
1458e54701eSAndi Kleen		usage
1468e54701eSAndi Kleen		;;
1478e54701eSAndi Kleen	esac
1488e54701eSAndi Kleendone
1498e54701eSAndi Kleen
150