#! /bin/sh # # This script is used to configure the linux kernel. # # It was inspired by the challenge in the original Configure script # to ``do something better'', combined with the actual need to ``do # something better'' because the old configure script wasn't flexible # enough. # # Please send comments / questions / bug fixes to raymondc@microsoft.com. # # Each line in the config file is a command. # # 050793 - use IFS='@' to get around a bug in a pre-version of bash-1.13 # with an empty IFS. # # Make sure we're really running bash. # # I would really have preferred to write this script in a language with # better string handling, but alas, bash is the only scripting language # that I can be reasonable sure everybody has on their linux machine. # [ -z "$BASH" ] && { echo "Configure requires bash" 1>&2; exit 1; } # Disable filename globbing once and for all. # Enable function cacheing. set -f -h # # readln reads a line into $ans. # # readln prompt default # function readln () { if [ "$DEFAULT" = "-d" ]; then echo "$1" ans=$2 else echo -n "$1" IFS='@' read ans </dev/tty || exit 1 [ -z "$ans" ] && ans=$2 fi } # # change updates the "config.new" file according to the answer # # change define old new # function change () { if [ "$2" != "$3" ]; then sed "s/$1 $2$/$1 $3/" < $CONFIG_NEW > .tmpc mv .tmpc $CONFIG_NEW fi } # # comment does some pretty-printing # # comment 'xxx' # function comment () { echo "*"; echo "* $1" ; echo "*" (echo "" ; echo "#"; echo "# $1" ; echo "#") >>$CONFIG (echo "" ; echo "/*"; echo " * $1" ; echo " */") >>$CONFIG_H } # # bool processes a boolean argument # # bool question define default # function bool () { ans="" while [ "$ans" != "y" -a "$ans" != "n" ]; do readln "$1 ($2) [$3] " "$3" done if [ "$ans" = "y" ]; then echo " $2 = $2" >>$CONFIG echo "#define $2 1" >>$CONFIG_H else echo "# $2 is not set" >>$CONFIG echo "#undef $2" >>$CONFIG_H fi change $2 $3 $ans eval "$2=$ans" } # # int processes an integer argument # # int question define default # function int () { # Slimier hack to get bash to rescan a line. ans="x" while [ $[$ans+0] != "$ans" ]; do readln "$1 ($2) [$3] " "$3" done echo " $2 = $ans" >>$CONFIG echo "#define $2 ($ans)" >>$CONFIG_H eval "$2=$ans" } CONFIG=.tmpconfig CONFIG_H=.tmpconfig.h CONFIG_NEW=config.new trap "rm -f $CONFIG $CONFIG_H $CONFIG_NEW ; exit 1" 1 2 # # Make sure we start out with a clean slate. # cp config.in $CONFIG_NEW echo "#" > $CONFIG echo "# Automatically generated make config: don't edit" >> $CONFIG echo "#" >> $CONFIG echo "/*" > $CONFIG_H echo " * Automatically generated C config: don't edit" >> $CONFIG_H echo " */" >> $CONFIG_H DEFAULT=$1 . ./config.in if [ "$CONFIG_SOUND" = "y" ] ; then $MAKE -C drivers/sound config || exit 1 fi mv .tmpconfig .config mv .tmpconfig.h include/linux/autoconf.h mv config.in config.old mv config.new config.in echo echo "The linux kernel is now hopefully configured for your setup." echo "Check the top-level Makefile for additional configuration," echo "and do a 'make dep ; make clean' if you want to be sure all" echo "the files are correctly re-made" echo exit 0