1c87b9c60SPaul E. McKenney#!/bin/sh 2c87b9c60SPaul E. McKenney# 3c87b9c60SPaul E. McKenney# sh configinit.sh config-spec-file [ build output dir ] 4c87b9c60SPaul E. McKenney# 5c87b9c60SPaul E. McKenney# Create a .config file from the spec file. Run from the kernel source tree. 6c87b9c60SPaul E. McKenney# Exits with 0 if all went well, with 1 if all went well but the config 7c87b9c60SPaul E. McKenney# did not match, and some other number for other failures. 8c87b9c60SPaul E. McKenney# 9c87b9c60SPaul E. McKenney# The first argument is the .config specification file, which contains 10c87b9c60SPaul E. McKenney# desired settings, for example, "CONFIG_NO_HZ=y". For best results, 11c87b9c60SPaul E. McKenney# this should be a full pathname. 12c87b9c60SPaul E. McKenney# 13c87b9c60SPaul E. McKenney# The second argument is a optional path to a build output directory, 14c87b9c60SPaul E. McKenney# for example, "O=/tmp/foo". If this argument is omitted, the .config 15c87b9c60SPaul E. McKenney# file will be generated directly in the current directory. 16c87b9c60SPaul E. McKenney 17c87b9c60SPaul E. McKenneyecho configinit.sh $* 18c87b9c60SPaul E. McKenney 19c87b9c60SPaul E. McKenneyT=/tmp/configinit.sh.$$ 20c87b9c60SPaul E. McKenneytrap 'rm -rf $T' 0 21c87b9c60SPaul E. McKenneymkdir $T 22c87b9c60SPaul E. McKenney 23c87b9c60SPaul E. McKenney# Capture config spec file. 24c87b9c60SPaul E. McKenney 25c87b9c60SPaul E. McKenneyc=$1 26c87b9c60SPaul E. McKenneybuildloc=$2 27c87b9c60SPaul E. McKenneybuilddir= 28c87b9c60SPaul E. McKenneyif test -n $buildloc 29c87b9c60SPaul E. McKenneythen 30c87b9c60SPaul E. McKenney if echo $buildloc | grep -q '^O=' 31c87b9c60SPaul E. McKenney then 32c87b9c60SPaul E. McKenney builddir=`echo $buildloc | sed -e 's/^O=//'` 33c87b9c60SPaul E. McKenney if test ! -d $builddir 34c87b9c60SPaul E. McKenney then 35c87b9c60SPaul E. McKenney mkdir $builddir 36c87b9c60SPaul E. McKenney fi 37c87b9c60SPaul E. McKenney else 38c87b9c60SPaul E. McKenney echo Bad build directory: \"$builddir\" 39c87b9c60SPaul E. McKenney exit 2 40c87b9c60SPaul E. McKenney fi 41c87b9c60SPaul E. McKenneyfi 42c87b9c60SPaul E. McKenney 43c87b9c60SPaul E. McKenneysed -e 's/^\(CONFIG[0-9A-Z_]*\)=.*$/grep -v "^# \1" |/' < $c > $T/u.sh 44c87b9c60SPaul E. McKenneysed -e 's/^\(CONFIG[0-9A-Z_]*=\).*$/grep -v \1 |/' < $c >> $T/u.sh 45c87b9c60SPaul E. McKenneygrep '^grep' < $T/u.sh > $T/upd.sh 46c87b9c60SPaul E. McKenneyecho "cat - $c" >> $T/upd.sh 47c87b9c60SPaul E. McKenneymake mrproper 48c87b9c60SPaul E. McKenneymake $buildloc distclean > $builddir/Make.distclean 2>&1 49c87b9c60SPaul E. McKenneymake $buildloc defconfig > $builddir/Make.defconfig.out 2>&1 50c87b9c60SPaul E. McKenneymv $builddir/.config $builddir/.config.sav 51c87b9c60SPaul E. McKenneysh $T/upd.sh < $builddir/.config.sav > $builddir/.config 52c87b9c60SPaul E. McKenneycp $builddir/.config $builddir/.config.new 53c87b9c60SPaul E. McKenneyyes '' | make $buildloc oldconfig > $builddir/Make.modconfig.out 2>&1 54c87b9c60SPaul E. McKenney 55c87b9c60SPaul E. McKenney# verify new config matches specification. 56c87b9c60SPaul E. McKenney 57c87b9c60SPaul E. McKenneysed -e 's/"//g' < $c > $T/c 58c87b9c60SPaul E. McKenneysed -e 's/"//g' < $builddir/.config > $T/.config 59c87b9c60SPaul E. McKenneysed -e 's/\(.*\)=n/# \1 is not set/' -e 's/^#CHECK#//' < $c | 60c87b9c60SPaul E. McKenneyawk ' 61c87b9c60SPaul E. McKenney { 62c87b9c60SPaul E. McKenney print "if grep -q \"" $0 "\" < '"$T/.config"'"; 63c87b9c60SPaul E. McKenney print "then"; 64c87b9c60SPaul E. McKenney print "\t:"; 65c87b9c60SPaul E. McKenney print "else"; 66c87b9c60SPaul E. McKenney if ($1 == "#") { 67c87b9c60SPaul E. McKenney print "\tif grep -q \"" $2 "\" < '"$T/.config"'"; 68c87b9c60SPaul E. McKenney print "\tthen"; 69c87b9c60SPaul E. McKenney print "\t\techo \":" $2 ": improperly set\""; 70c87b9c60SPaul E. McKenney print "\telse"; 71c87b9c60SPaul E. McKenney print "\t\t:"; 72c87b9c60SPaul E. McKenney print "\tfi"; 73c87b9c60SPaul E. McKenney } else { 74c87b9c60SPaul E. McKenney print "\techo \":" $0 ": improperly set\""; 75c87b9c60SPaul E. McKenney } 76c87b9c60SPaul E. McKenney print "fi"; 77c87b9c60SPaul E. McKenney }' | sh > $T/diagnostics 78c87b9c60SPaul E. McKenneyif test -s $T/diagnostics 79c87b9c60SPaul E. McKenneythen 80c87b9c60SPaul E. McKenney cat $T/diagnostics 81c87b9c60SPaul E. McKenney exit 1 82c87b9c60SPaul E. McKenneyfi 83c87b9c60SPaul E. McKenneyexit 0 84