xref: /openbmc/linux/scripts/config (revision 56643222)
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
138e54701eSAndi Kleen	--state|-s option       Print state of option (n,y,m,undef)
148e54701eSAndi Kleen
158e54701eSAndi Kleen	--enable-after|-E beforeopt option
168e54701eSAndi Kleen                             Enable option directly after other option
178e54701eSAndi Kleen	--disable-after|-D beforeopt option
188e54701eSAndi Kleen                             Disable option directly after other option
198e54701eSAndi Kleen	--module-after|-M beforeopt option
208e54701eSAndi Kleen                             Turn option into module directly after other option
218e54701eSAndi Kleen
228e54701eSAndi Kleen	commands can be repeated multiple times
238e54701eSAndi Kleen
248e54701eSAndi Kleenoptions:
258e54701eSAndi Kleen	--file .config file to change (default .config)
268e54701eSAndi Kleen
278e54701eSAndi Kleenconfig doesn't check the validity of the .config file. This is done at next
288e54701eSAndi Kleen make time.
298e54701eSAndi KleenEOL
308e54701eSAndi Kleen	exit 1
318e54701eSAndi Kleen}
328e54701eSAndi Kleen
338e54701eSAndi Kleencheckarg() {
348e54701eSAndi Kleen	ARG="$1"
358e54701eSAndi Kleen	if [ "$ARG" = "" ] ; then
368e54701eSAndi Kleen		usage
378e54701eSAndi Kleen	fi
388e54701eSAndi Kleen	case "$ARG" in
398e54701eSAndi Kleen	CONFIG_*)
408e54701eSAndi Kleen		ARG="${ARG/CONFIG_/}"
418e54701eSAndi Kleen		;;
428e54701eSAndi Kleen	esac
438e54701eSAndi Kleen	ARG="`echo $ARG | tr a-z A-Z`"
448e54701eSAndi Kleen}
458e54701eSAndi Kleen
4656643222SMichal Marekset_var() {
4756643222SMichal Marek	local name=$1 new=$2 before=$3
4856643222SMichal Marek
4956643222SMichal Marek	name_re="^($name=|# $name is not set)"
5056643222SMichal Marek	before_re="^($before=|# $before is not set)"
5156643222SMichal Marek	if test -n "$before" && grep -Eq "$before_re" "$FN"; then
5256643222SMichal Marek		sed -ri "/$before_re/a $new" "$FN"
5356643222SMichal Marek	elif grep -Eq "$name_re" "$FN"; then
5456643222SMichal Marek		sed -ri "s:$name_re.*:$new:" "$FN"
5556643222SMichal Marek	else
5656643222SMichal Marek		echo "$new" >>"$FN"
5756643222SMichal Marek	fi
588e54701eSAndi Kleen}
598e54701eSAndi Kleen
608e54701eSAndi Kleenif [ "$1" = "--file" ]; then
618e54701eSAndi Kleen	FN="$2"
628e54701eSAndi Kleen	if [ "$FN" = "" ] ; then
638e54701eSAndi Kleen		usage
648e54701eSAndi Kleen	fi
658e54701eSAndi Kleen	shift
668e54701eSAndi Kleen	shift
678e54701eSAndi Kleenelse
688e54701eSAndi Kleen	FN=.config
698e54701eSAndi Kleenfi
708e54701eSAndi Kleen
712302e873SAndi Kleenif [ "$1" = "" ] ; then
722302e873SAndi Kleen	usage
732302e873SAndi Kleenfi
742302e873SAndi Kleen
758e54701eSAndi Kleenwhile [ "$1" != "" ] ; do
768e54701eSAndi Kleen	CMD="$1"
778e54701eSAndi Kleen	shift
788e54701eSAndi Kleen	case "$CMD" in
798e54701eSAndi Kleen	--enable|-e)
808e54701eSAndi Kleen		checkarg "$1"
8156643222SMichal Marek		set_var "CONFIG_$ARG" "CONFIG_$ARG=y"
828e54701eSAndi Kleen		shift
838e54701eSAndi Kleen		;;
848e54701eSAndi Kleen
858e54701eSAndi Kleen	--disable|-d)
868e54701eSAndi Kleen		checkarg "$1"
8756643222SMichal Marek		set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set"
888e54701eSAndi Kleen		shift
898e54701eSAndi Kleen		;;
908e54701eSAndi Kleen
918e54701eSAndi Kleen	--module|-m)
928e54701eSAndi Kleen		checkarg "$1"
9356643222SMichal Marek		set_var "CONFIG_$ARG" "CONFIG_$ARG=m"
948e54701eSAndi Kleen		shift
958e54701eSAndi Kleen		;;
968e54701eSAndi Kleen
978e54701eSAndi Kleen	--state|-s)
988e54701eSAndi Kleen		checkarg "$1"
998e54701eSAndi Kleen		if grep -q "# CONFIG_$ARG is not set" $FN ; then
1008e54701eSAndi Kleen			echo n
1018e54701eSAndi Kleen		else
1028e54701eSAndi Kleen			V="$(grep "^CONFIG_$ARG=" $FN)"
1038e54701eSAndi Kleen			if [ $? != 0 ] ; then
1048e54701eSAndi Kleen				echo undef
1058e54701eSAndi Kleen			else
1068e54701eSAndi Kleen				V="${V/CONFIG_$ARG=/}"
1078e54701eSAndi Kleen				V="${V/\"/}"
1088e54701eSAndi Kleen				echo "$V"
1098e54701eSAndi Kleen			fi
1108e54701eSAndi Kleen		fi
1118e54701eSAndi Kleen		shift
1128e54701eSAndi Kleen		;;
1138e54701eSAndi Kleen
1148e54701eSAndi Kleen	--enable-after|-E)
1158e54701eSAndi Kleen		checkarg "$1"
1168e54701eSAndi Kleen		A=$ARG
1178e54701eSAndi Kleen		checkarg "$2"
1188e54701eSAndi Kleen		B=$ARG
11956643222SMichal Marek		set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A"
1208e54701eSAndi Kleen		shift
1218e54701eSAndi Kleen		shift
1228e54701eSAndi Kleen		;;
1238e54701eSAndi Kleen
1248e54701eSAndi Kleen	--disable-after|-D)
1258e54701eSAndi Kleen		checkarg "$1"
1268e54701eSAndi Kleen		A=$ARG
1278e54701eSAndi Kleen		checkarg "$2"
1288e54701eSAndi Kleen		B=$ARG
12956643222SMichal Marek		set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A"
1308e54701eSAndi Kleen		shift
1318e54701eSAndi Kleen		shift
1328e54701eSAndi Kleen		;;
1338e54701eSAndi Kleen
1348e54701eSAndi Kleen	--module-after|-M)
1358e54701eSAndi Kleen		checkarg "$1"
1368e54701eSAndi Kleen		A=$ARG
1378e54701eSAndi Kleen		checkarg "$2"
1388e54701eSAndi Kleen		B=$ARG
13956643222SMichal Marek		set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A"
1408e54701eSAndi Kleen		shift
1418e54701eSAndi Kleen		shift
1428e54701eSAndi Kleen		;;
1438e54701eSAndi Kleen
1448e54701eSAndi Kleen	# undocumented because it ignores --file (fixme)
1458e54701eSAndi Kleen	--refresh)
1468e54701eSAndi Kleen		yes "" | make oldconfig
1478e54701eSAndi Kleen		;;
1488e54701eSAndi Kleen
1498e54701eSAndi Kleen	*)
1508e54701eSAndi Kleen		usage
1518e54701eSAndi Kleen		;;
1528e54701eSAndi Kleen	esac
1538e54701eSAndi Kleendone
1548e54701eSAndi Kleen
155