# $conffiles is a list of patters of the form
|
|
# ^[XO-] <pattern> [<value>]
|
|
# X means enable, O disable, and - removes it
|
|
# pattern can use '*' as a wildcard for [^ #]
|
|
# optionaly can set a value different that y
|
|
apply_conffiles() {
|
|
local f x;
|
|
rm -f /tmp/$$.sed
|
|
for f in $conffiles; do if [ -f "$f" ]; then
|
|
while read a c v; do
|
|
x="${c//\\*/[^ #]*}"
|
|
x="^\(# \)\?\($x\)[= ].*\$"
|
|
|
|
# value
|
|
if [ -z "$v" ]; then
|
|
v='y'
|
|
fi
|
|
case "$a" in
|
|
X) echo "apply_conffiles: rule $c=$v."
|
|
echo "s,$x,\2=$v,g" >> /tmp/$$.sed
|
|
;;
|
|
O) echo "apply_conffiles: rule unset $c."
|
|
echo "s,$x,# \2 is not set,g" >> /tmp/$$.sed
|
|
;;
|
|
-) echo "apply_conffiles: rule remove $c."
|
|
echo "s,$x,,g" >> /tmp/$$.sed
|
|
;;
|
|
*)
|
|
echo "apply_conffiles: bad rule $a $c $v"
|
|
;;
|
|
esac
|
|
done < <( cat $f );
|
|
fi ; done
|
|
sed -f /tmp/$$.sed .config > $1
|
|
rm /tmp/$$.sed
|
|
}
|
|
|
|
# get default config, and filter considering <n>
|
|
# levels, because new options can appear and other disappear
|
|
auto_config() {
|
|
local j=1 n="${1:-1}"
|
|
|
|
# defconfig
|
|
eval "$MAKE defconfig $makeopt"
|
|
cp -v .config .config.$j
|
|
|
|
j=2 ; for (( i=1 ; i<n ; i++, j++ )) {
|
|
apply_conffiles .config.$j
|
|
cp -v .config.$j .config
|
|
|
|
eval "$MAKE oldconfig $makeopt"
|
|
(( j++ )) ; cp -v .config .config.$j
|
|
}
|
|
|
|
# second round
|
|
apply_conffiles .config.$j
|
|
cp -v .config.$j .config
|
|
}
|
|
|