Linux Audio

Check our new training course

Loading...
v3.5.6
  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		# sed swallows one level of escaping, so we need double-escaping
111		set_var "CONFIG_$ARG" "CONFIG_$ARG=\"${1//\"/\\\\\"}\""
112		shift
113		;;
114
115	--set-val)
116		set_var "CONFIG_$ARG" "CONFIG_$ARG=$1"
117		shift
118		;;
119
120	--state|-s)
121		if grep -q "# CONFIG_$ARG is not set" $FN ; then
122			echo n
123		else
124			V="$(grep "^CONFIG_$ARG=" $FN)"
125			if [ $? != 0 ] ; then
126				echo undef
127			else
128				V="${V/#CONFIG_$ARG=/}"
129				V="${V/#\"/}"
130				V="${V/%\"/}"
131				V="${V/\\\"/\"}"
132				echo "${V}"
133			fi
134		fi
135		;;
136
137	--enable-after|-E)
138		set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A"
139		;;
140
141	--disable-after|-D)
142		set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A"
143		;;
144
145	--module-after|-M)
146		set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A"
147		;;
148
149	# undocumented because it ignores --file (fixme)
150	--refresh)
151		yes "" | make oldconfig
152		;;
153
154	*)
155		usage
156		;;
157	esac
158done
159
v3.1
  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