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