xref: /openbmc/linux/scripts/config (revision df2634f43f5106947f3735a0b61a6527a4b278cd)
1#!/bin/bash
2# Manipulate options in a .config file from the command line
3
4usage() {
5	cat >&2 <<EOL
6Manipulate options in a .config file from the command line.
7Usage:
8config options command ...
9commands:
10	--enable|-e option   Enable option
11	--disable|-d option  Disable option
12	--module|-m option   Turn option into a module
13	--set-str option string
14	                     Set option to "string"
15	--set-val option value
16	                     Set option to value
17	--state|-s option    Print state of option (n,y,m,undef)
18
19	--enable-after|-E beforeopt option
20                             Enable option directly after other option
21	--disable-after|-D beforeopt option
22                             Disable option directly after other option
23	--module-after|-M beforeopt option
24                             Turn option into module directly after other option
25
26	commands can be repeated multiple times
27
28options:
29	--file .config file to change (default .config)
30
31config doesn't check the validity of the .config file. This is done at next
32 make time.
33EOL
34	exit 1
35}
36
37checkarg() {
38	ARG="$1"
39	if [ "$ARG" = "" ] ; then
40		usage
41	fi
42	case "$ARG" in
43	CONFIG_*)
44		ARG="${ARG/CONFIG_/}"
45		;;
46	esac
47	ARG="`echo $ARG | tr a-z A-Z`"
48}
49
50set_var() {
51	local name=$1 new=$2 before=$3
52
53	name_re="^($name=|# $name is not set)"
54	before_re="^($before=|# $before is not set)"
55	if test -n "$before" && grep -Eq "$before_re" "$FN"; then
56		sed -ri "/$before_re/a $new" "$FN"
57	elif grep -Eq "$name_re" "$FN"; then
58		sed -ri "s:$name_re.*:$new:" "$FN"
59	else
60		echo "$new" >>"$FN"
61	fi
62}
63
64if [ "$1" = "--file" ]; then
65	FN="$2"
66	if [ "$FN" = "" ] ; then
67		usage
68	fi
69	shift 2
70else
71	FN=.config
72fi
73
74if [ "$1" = "" ] ; then
75	usage
76fi
77
78while [ "$1" != "" ] ; do
79	CMD="$1"
80	shift
81	case "$CMD" in
82	--refresh)
83		;;
84	--*-after)
85		checkarg "$1"
86		A=$ARG
87		checkarg "$2"
88		B=$ARG
89		shift 2
90		;;
91	-*)
92		checkarg "$1"
93		shift
94		;;
95	esac
96	case "$CMD" in
97	--enable|-e)
98		set_var "CONFIG_$ARG" "CONFIG_$ARG=y"
99		;;
100
101	--disable|-d)
102		set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set"
103		;;
104
105	--module|-m)
106		set_var "CONFIG_$ARG" "CONFIG_$ARG=m"
107		;;
108
109	--set-str)
110		set_var "CONFIG_$ARG" "CONFIG_$ARG=\"$1\""
111		shift
112		;;
113
114	--set-val)
115		set_var "CONFIG_$ARG" "CONFIG_$ARG=$1"
116		shift
117		;;
118
119	--state|-s)
120		if grep -q "# CONFIG_$ARG is not set" $FN ; then
121			echo n
122		else
123			V="$(grep "^CONFIG_$ARG=" $FN)"
124			if [ $? != 0 ] ; then
125				echo undef
126			else
127				V="${V/CONFIG_$ARG=/}"
128				V="${V/\"/}"
129				echo "$V"
130			fi
131		fi
132		;;
133
134	--enable-after|-E)
135		set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A"
136		;;
137
138	--disable-after|-D)
139		set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A"
140		;;
141
142	--module-after|-M)
143		set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A"
144		;;
145
146	# undocumented because it ignores --file (fixme)
147	--refresh)
148		yes "" | make oldconfig
149		;;
150
151	*)
152		usage
153		;;
154	esac
155done
156
157