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