[PATCH]-2.4.23 switches to kbuild

From: Xose Vazquez Perez
Date: Fri Nov 28 2003 - 14:17:36 EST


hi,

Added random configurations options for stress testing.

This patch was done by Ghozlane Toumi <gtoumi@xxxxxxxxxxxxxx>
and documented by Keith Owens <kaos@xxxxxxxxxx> on October 7 2000.

Very useful with OSDL compregress.sh[1] for stress testing
of kernel constructions.


[1] http://developer.osdl.org/~cherry/compile/

-thanks-
--
Software is like sex, it's better when it's bug free.

--- linux/Documentation/kbuild/00-INDEX 2000-09-17 18:45:06.000000000 +0200
+++ n/Documentation/kbuild/00-INDEX 2003-11-28 17:12:55.000000000 +0100
@@ -8,3 +8,5 @@
- specification of Config Language, the language in Config.in files
makefiles.txt
- developer information for linux kernel makefiles
+random.txt
+ - automatically generate random configurations for stress testing
--- linux/Documentation/kbuild/random.txt 2003-11-28 17:24:10.000000000 +0100
+++ n/Documentation/kbuild/random.txt 2003-11-28 17:12:55.000000000 +0100
@@ -0,0 +1,47 @@
+Code by Ghozlane Toumi <gtoumi@xxxxxxxxxxxxxx>, documentation by
+Keith Owens <kaos@xxxxxxxxxx>
+
+In addition to the normal config targets you can make
+
+ randconfig random configuration.
+
+ allyesconfig reply 'y' to all options, maximal kernel.
+
+ allnoconfig reply 'n' to all options, minimal kernel.
+
+ allmodconfig build everything as modules where possible.
+
+
+All random configurations will satisfy the config rules, that is, all
+configurations should be valid. Any build errors indicate bugs in the
+config dependency rules or in the Makefiles.
+
+You can constrain the random configuration, e.g. you may want to force
+the use of modules or the absence of /proc or cramfs must be a module.
+If file .force_default exists then it is read to preset selected
+values, all other values will be randomly selected, subject to the
+config rules. The syntax of .force_default is:
+
+CONFIG_foo=value
+ Force this value, for example CONFIG_MODULES=y, CONFIG_PROC_FS=n,
+ CONFIG_RAMFS=m.
+
+# CONFIG_foo is not set
+ Equivalent to CONFIG_foo=n, supported because this is the format used
+ in .config. NOTE: The leading '#' is required.
+
+# list CONFIG_foo val1,val2,val3
+ Pick a value for CONFIG_foo from the list. CONFIG_foo must be an int
+ or hex option. NOTE: The leading '#' is required.
+
+# range CONFIG_foo min max
+ Pick a value for CONFIG_foo in the range min <=> max. CONFIG_foo
+ must be an int option. NOTE: The leading '#' is required.
+
+If you have repeated settings of the same option in .force_default then
+values take precedence over lists which take precedence over range.
+Within each group the last setting for an option is used.
+
+Answers "randomised" are bool(), tristate(), dep_tristate() and
+choice(). Unless specified in .force_default, int, hex, and string
+options use the default values from config.in.
--- linux/Makefile 2003-11-26 01:34:08.000000000 +0100
+++ n/Makefile 2003-11-28 17:20:52.000000000 +0100
@@ -316,6 +316,22 @@
config: symlinks
$(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in

+defconfig: symlinks
+ @rm -f .config
+ yes '' | $(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in
+
+randconfig: symlinks
+ $(CONFIG_SHELL) scripts/Configure -r arch/$(ARCH)/config.in
+
+allyesconfig: symlinks
+ $(CONFIG_SHELL) scripts/Configure -y arch/$(ARCH)/config.in
+
+allnoconfig: symlinks
+ $(CONFIG_SHELL) scripts/Configure -n arch/$(ARCH)/config.in
+
+allmodconfig: symlinks
+ $(CONFIG_SHELL) scripts/Configure -m arch/$(ARCH)/config.in
+
include/config/MARKER: scripts/split-include include/linux/autoconf.h
scripts/split-include include/linux/autoconf.h include/config
@ touch include/config/MARKER
--- linux/scripts/Configure 2003-06-15 03:29:22.000000000 +0200
+++ n/scripts/Configure 2003-11-28 17:12:55.000000000 +0100
@@ -48,6 +48,10 @@
#
# 24 January 1999, Michael Elizabeth Chastain, <mec@xxxxxxxxx>
# - Improve the exit message (Jeff Ronne).
+#
+# 7 October 2000, Ghozlane Toumi, <gtoumi@xxxxxxxxxxxxxx>
+# added switches for "random" , "all yes" and "all modules"
+#

#
# Make sure we're really running bash.
@@ -76,6 +80,43 @@
}

#
+# returns a random number between 1 and $1
+#
+function rnd () {
+ rnd=$[ $RANDOM % $1 + 1 ]
+}
+
+#
+# randomly chose a number in a config list (LIST_CONFIG_NAME)
+# or in a range ( MIN_CONFIG_NAME MAX_CONFIG_NAME )
+# ONLY if there is no forced default (and we are in an "auto" mode)
+# we are limited by the range of values taken by "$RANDOM"
+#
+# rndval CONFIG_NAME
+#
+
+function rndval () {
+ [ "$AUTO" != "yes" -o -n "$old" ] && return
+ def_list=$(eval echo "\${LIST_$1}")
+ def_min=$(eval echo "\${MIN_$1}")
+ def_max=$(eval echo "\${MAX_$1}")
+
+ if [ -n "$def_list" ]; then
+ set -- $(echo $def_list | sed 's/,/ /g')
+ rnd $#
+ while [ $rnd -le $# ] ; do
+ def=$1
+ shift
+ done
+ return
+ fi
+ if [ -n "$def_min" -a -n "$def_max" ]; then
+ rnd $[ $def_max - $def_min ]
+ def=$[ $def_min + $rnd ]
+ fi
+}
+
+#
# help prints the corresponding help text from Configure.help to stdout
#
# help variable
@@ -116,7 +157,11 @@
# readln prompt default oldval
#
function readln () {
- if [ "$DEFAULT" = "-d" -a -n "$3" ]; then
+ if [ "$AUTO" = "yes" ]; then
+ echo -n "$1"
+ ans=$2
+ echo $ans
+ elif [ "$DEFAULT" = "-d" -a -n "$3" ]; then
echo "$1"
ans=$2
else
@@ -176,6 +221,17 @@
function bool () {
old=$(eval echo "\${$2}")
def=${old:-'n'}
+ if [ "$AUTO" = "yes" -a -z "$old" ]; then
+ if [ "$RND" = "-r" ]; then
+ rnd 2
+ case $rnd in
+ "1") def="y" ;;
+ "2") def="n" ;;
+ esac
+ else
+ def=$DEF_ANS;
+ fi
+ fi
case "$def" in
"y" | "m") defprompt="Y/n/?"
def="y"
@@ -207,6 +263,18 @@
else
old=$(eval echo "\${$2}")
def=${old:-'n'}
+ if [ "$AUTO" = "yes" -a -z "$old" ]; then
+ if [ "$RND" = "-r" ]; then
+ rnd 3
+ case $rnd in
+ "1") def="y" ;;
+ "2") def="n" ;;
+ "3") def="m" ;;
+ esac
+ else
+ def=$DEF_ANS
+ fi
+ fi
case "$def" in
"y") defprompt="Y/m/n/?"
;;
@@ -263,6 +331,17 @@

if [ $need_module = 1 ]; then
if [ "$CONFIG_MODULES" = "y" ]; then
+ if [ "$AUTO" = "yes" -a -z "$old" ]; then
+ if [ "$RND" = "-r" ]; then
+ rnd 2
+ case $rnd in
+ "1") def="m" ;;
+ "2") def="n" ;;
+ esac
+ else
+ def=$DEF_ANS
+ fi
+ fi
case "$def" in
"y" | "m") defprompt="M/n/?"
def="m"
@@ -348,6 +427,7 @@
function int () {
old=$(eval echo "\${$2}")
def=${old:-$3}
+ rndval $2
while :; do
readln "$1 ($2) [$def] " "$def" "$old"
if expr "$ans" : '[0-9]*$' > /dev/null; then
@@ -379,6 +459,7 @@
old=$(eval echo "\${$2}")
def=${old:-$3}
def=${def#*[x,X]}
+ rndval $2
while :; do
readln "$1 ($2) [$def] " "$def" "$old"
ans=${ans#*[x,X]}
@@ -461,6 +542,15 @@
shift; shift
done

+ if [ "$RND" = "-r" -a -z "$old" ] ; then
+ set -- $choices
+ rnd $#
+ while [ $rnd -le $# ] ; do
+ def=$1
+ shift ; shift
+ done
+ fi
+
val=""
while [ -z "$val" ]; do
ambg=n
@@ -509,6 +599,7 @@

CONFIG=.tmpconfig
CONFIG_H=.tmpconfig.h
+FORCE_DEFAULT=.force_default
trap "rm -f $CONFIG $CONFIG_H ; exit 1" 1 2

#
@@ -529,6 +620,16 @@
shift
fi

+RND=""
+DEF_ANS=""
+AUTO=""
+case "$1" in
+ -r) RND="-r" ; AUTO="yes" ; shift ;;
+ -y) DEF_ANS="y" ; AUTO="yes" ; shift ;;
+ -m) DEF_ANS="m" ; AUTO="yes" ; shift ;;
+ -n) DEF_ANS="n" ; AUTO="yes" ; shift ;;
+esac
+
CONFIG_IN=./config.in
if [ "$1" != "" ] ; then
CONFIG_IN=$1
@@ -539,18 +640,37 @@
DEFAULTS=.config
fi

-if [ -f $DEFAULTS ]; then
- echo "#"
- echo "# Using defaults found in" $DEFAULTS
- echo "#"
- . $DEFAULTS
- sed -e 's/# \(CONFIG_[^ ]*\) is not.*/\1=n/' <$DEFAULTS >.config-is-not.$$
- . .config-is-not.$$
- rm .config-is-not.$$
+if [ "$AUTO" != "yes" ]; then
+ if [ -f $DEFAULTS ]; then
+ echo "#"
+ echo "# Using defaults found in" $DEFAULTS
+ echo "#"
+ . $DEFAULTS
+ sed -e 's/# \(CONFIG_[^ ]*\) is not.*/\1=n/' <$DEFAULTS >.config-is-not.$$
+ . .config-is-not.$$
+ rm .config-is-not.$$
+ else
+ echo "#"
+ echo "# No defaults found"
+ echo "#"
+ fi
else
- echo "#"
- echo "# No defaults found"
- echo "#"
+ if [ -f $FORCE_DEFAULT ]; then
+ echo "#"
+ echo "# Forcing defaults found in $FORCE_DEFAULT"
+ echo "#"
+ sed -e '
+s/# \(CONFIG_[^ ]*\) is not.*/\1=n/;
+s/# range \(CONFIG_[^ ]*\) \([^ ][^ ]*\) \([^ ][^ ]*\)/MIN_\1=\2; MAX_\1=\3/;
+s/# list \(CONFIG_[^ ]*\) \([^ ][^ ]*\)/LIST_\1=\2/
+' <$FORCE_DEFAULT >.default_val.$$
+ . .default_val.$$
+ rm .default_val.$$
+ else
+ echo "#"
+ echo "# No defaults found"
+ echo "#"
+ fi
fi

. $CONFIG_IN