From: Peter Samuelson <peter@cadcamlab.org>
To: Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
Cc: linux-kernel@vger.kernel.org, kbuild-devel@lists.sf.net
Subject: [patch] config language dep_* enhancements
Date: Thu, 8 Aug 2002 23:15:43 -0500 [thread overview]
Message-ID: <20020809041543.GA4818@cadcamlab.org> (raw)
In-Reply-To: <20020808164742.GA5780@cadcamlab.org>
[Kai Germaschewski]
> > As you're hacking Configure anyway, what about "fixing"
> >
> > dep_tristate ' ..' CONFIG_FOO $CONFIG_BAR,
[I wrote]
> I've thought about that many times. I think the cleanest solution is
> to deprecate the '$' entirely:
>
> dep_tristate ' ..' CONFIG_FOO CONFIG_BAR
This applies to 2.4.20pre and (except changelog bits) to 2.5.30 with
offsets. I still haven't touched xconfig, because frankly it scares
me. The tkparse.c vs Peter match is well underway, stay tuned..
diff -urN 2.4.20pre1/Documentation/kbuild/config-language.txt 2.4.20pre1p/Documentation/kbuild/config-language.txt
--- 2.4.20pre1/Documentation/kbuild/config-language.txt 2002-02-25 13:37:51.000000000 -0600
+++ 2.4.20pre1p/Documentation/kbuild/config-language.txt 2002-08-08 23:10:44.000000000 -0500
@@ -84,8 +84,17 @@
to generate dependencies on individual CONFIG_* symbols instead of
making one massive dependency on include/linux/autoconf.h.
- A /dep/ is a dependency. Syntactically, it is a /word/. At run
- time, a /dep/ must evaluate to "y", "m", "n", or "".
+ A /tristate/ is a single character in the set {"y","m","n"}.
+
+ A /dep/ is a dependency. Syntactically, it is a /word/. It is
+ either a /tristate/ or a /symbol/ (with an optional, but
+ deprecated, prefix "$"). At run time, the /symbol/, if present,
+ is expanded to produce a /tristate/. If the /symbol/ has not been
+ defined, the /tristate/ will be "n".
+
+ In addition, the /dep/ may have a prefix "!", which negates the
+ sense of the /tristate/: "!y" and "!m" reduce to "n", and "!n"
+ reduces to "y".
An /expr/ is a bash-like expression using the operators
'=', '!=', '-a', '-o', and '!'.
@@ -439,12 +448,12 @@
=== dep_bool /prompt/ /symbol/ /dep/ ...
This verb evaluates all of the dependencies in the dependency list.
-Any dependency which has a value of "y" does not restrict the input
-range. Any dependency which has an empty value is ignored.
-Any dependency which has a value of "n", or which has some other value,
-(like "m") restricts the input range to "n". Quoting dependencies is not
-allowed. Using dependencies with an empty value possible is not
-recommended. See also dep_mbool below.
+Any dependency which expands to "y" (including "!n" and "!"; see
+above) does not restrict the input range. Any dependency which
+expands to an empty value is ignored. Any dependency which expands to
+"n", or any other value (like "m"), restricts the input range to "n".
+Quoting dependencies is not allowed. Using dependencies with an empty
+value possible is not recommended. See also dep_mbool below.
If the input range is restricted to the single choice "n", dep_bool
silently assigns "n" to /symbol/. If the input range has more than
@@ -469,11 +478,12 @@
=== dep_mbool /prompt/ /symbol/ /dep/ ...
This verb evaluates all of the dependencies in the dependency list.
-Any dependency which has a value of "y" or "m" does not restrict the
-input range. Any dependency which has an empty value is ignored.
-Any dependency which has a value of "n", or which has some other value,
-restricts the input range to "n". Quoting dependencies is not allowed.
-Using dependencies with an empty value possible is not recommended.
+Any dependency which expands to "y" or "m" (including "!n" and "!";
+see above) does not restrict the input range. Any dependency which
+expands to an empty value is ignored. Any dependency which expands to
+"n", or any other value, restricts the input range to "n". Quoting
+dependencies is not allowed. Using dependencies with an empty value
+possible is not recommended.
If the input range is restricted to the single choice "n", dep_bool
silently assigns "n" to /symbol/. If the input range has more than
@@ -514,12 +524,13 @@
=== dep_tristate /prompt/ /symbol/ /dep/ ...
This verb evaluates all of the dependencies in the dependency list.
-Any dependency which has a value of "y" does not restrict the input range.
-Any dependency which has a value of "m" restricts the input range to
-"m" or "n". Any dependency which has an empty value is ignored.
-Any dependency which has a value of "n", or which has some other value,
-restricts the input range to "n". Quoting dependencies is not allowed.
-Using dependencies with an empty value possible is not recommended.
+Any dependency which expands to "y" (including "!n" or "!"; see above)
+does not restrict the input range. Any dependency which expands to
+"m" restricts the input range to "m" or "n". Any dependency which
+expands to an empty value is ignored. Any dependency which expands to
+"n", or any other value, restricts the input range to "n". Quoting
+dependencies is not allowed. Using dependencies with an empty value
+possible is not recommended.
If the input range is restricted to the single choice "n", dep_tristate
silently assigns "n" to /symbol/. If the input range has more than
diff -urN 2.4.20pre1/scripts/Configure 2.4.20pre1p/scripts/Configure
--- 2.4.20pre1/scripts/Configure 2001-07-02 15:56:40.000000000 -0500
+++ 2.4.20pre1p/scripts/Configure 2002-08-08 22:31:49.000000000 -0500
@@ -48,6 +48,15 @@
#
# 24 January 1999, Michael Elizabeth Chastain, <mec@shout.net>
# - Improve the exit message (Jeff Ronne).
+#
+# 8 Aug 2002, Peter Samuelson <peter@cadcamlab.org>
+# for dependencies in dep_* functions:
+# - deprecate '$' (dep_bool 'foo' CONFIG_FOO CONFIG_BAR CONFIG_BAZ)
+# - allow negation:
+# dep_bool 'New Foo' CONFIG_FOO !CONFIG_OLDFOO
+# dep_bool 'Old Foo' CONFIG_OLDFOO !CONFIG_FOO
+# (Note that since the !CONFIG_OLDFOO is a forward reference, it
+# is meaningless for the line-based interface.)
#
# Make sure we're really running bash.
@@ -232,6 +241,28 @@
}
#
+# dep_calc reduces a dependency line down to a single char [ymn]
+#
+function dep_calc () {
+ local neg arg
+ cur_dep=y # return value
+ for arg; do
+ neg=;
+ case "$arg" in
+ !*) neg=N; arg=${arg#?} ;;
+ esac
+ case "$arg" in
+ y|m|n) ;;
+ *) arg=$(eval echo \$$arg) ;;
+ esac
+ case "$neg$arg" in
+ m) cur_dep=m ;;
+ n|Ny|Nm) cur_dep=n; return ;;
+ esac
+ done
+}
+
+#
# dep_tristate processes a tristate argument that depends upon
# another option or options. If any of the options we depend upon is a
# module, then the only allowable options are M or N. If all are Y, then
@@ -248,18 +279,16 @@
var=$2
need_module=0
shift 2
- while [ $# -gt 0 ]; do
- case "$1" in
- n)
+ dep_calc "$@"
+ case $cur_dep in
+ n)
define_tristate "$var" "n"
return
;;
m)
need_module=1
;;
- esac
- shift
- done
+ esac
if [ $need_module = 1 ]; then
if [ "$CONFIG_MODULES" = "y" ]; then
@@ -299,15 +328,13 @@
ques=$1
var=$2
shift 2
- while [ $# -gt 0 ]; do
- case "$1" in
+ dep_calc "$@"
+ case $cur_dep in
m | n)
define_bool "$var" "n"
return
;;
- esac
- shift
- done
+ esac
bool "$ques" "$var"
}
@@ -316,8 +343,8 @@
ques=$1
var=$2
shift 2
- while [ $# -gt 0 ]; do
- case "$1" in
+ dep_calc "$@"
+ case $cur_dep in
n)
define_bool "$var" "n"
return
diff -urN 2.4.20pre1/scripts/Menuconfig 2.4.20pre1p/scripts/Menuconfig
--- 2.4.20pre1/scripts/Menuconfig 2002-06-14 15:09:40.000000000 -0500
+++ 2.4.20pre1p/scripts/Menuconfig 2002-08-08 22:32:09.000000000 -0500
@@ -77,8 +77,14 @@
# 12 November 2001, Keith Owens <kaos@ocs.com.au>
# Escape double quotes on eval so the quotes are still there on the second
# evaluation, required to handle strings with special characters.
-#
-
+#
+# 8 Aug 2002, Peter Samuelson <peter@cadcamlab.org>
+# for dependencies in dep_* functions:
+# - deprecate '$' (dep_bool 'foo' CONFIG_FOO CONFIG_BAR CONFIG_BAZ)
+# - allow negation:
+# dep_bool 'New Foo' CONFIG_FOO !CONFIG_OLDFOO
+# dep_bool 'Old Foo' CONFIG_OLDFOO !CONFIG_FOO
+# (Yes, forward references DTRT in Menuconfig.)
#
# Change this to TRUE if you prefer all kernel options listed
@@ -202,6 +208,28 @@
}
#
+# Reduces a dependency line down to a single char [ymn]
+#
+function dep_calc () {
+ local neg arg
+ cur_dep=y # return value
+ for arg; do
+ neg=;
+ case "$arg" in
+ !*) neg=N; arg=${arg#?} ;;
+ esac
+ case "$arg" in
+ y|m|n) ;;
+ *) arg=$(eval echo \$$arg) ;;
+ esac
+ case "$neg$arg" in
+ m) cur_dep=m ;;
+ n|Ny|Nm) cur_dep=n; return ;;
+ esac
+ done
+}
+
+#
# Create a tristate radiolist function which is dependent on
# another kernel configuration option.
#
@@ -216,26 +244,13 @@
function dep_tristate () {
ques="$1"
var="$2"
- dep=y
- shift 2
- while [ $# -gt 0 ]; do
- if [ "$1" = y ]; then
- shift
- elif [ "$1" = m ]; then
- dep=m
- shift
- else
- dep=n
- shift $#
- fi
- done
- if [ "$dep" = y ]; then
- tristate "$ques" "$var"
- elif [ "$dep" = m ]; then
- mod_bool "$ques" "$var"
- else
- define_tristate "$var" n
- fi
+ shift 2
+ dep_calc "$@"
+ case $cur_dep in
+ y) tristate "$ques" "$var" ;;
+ m) mod_bool "$ques" "$var" ;;
+ n) define_tristate "$var" n ;;
+ esac
}
#
@@ -245,41 +260,23 @@
function dep_bool () {
ques="$1"
var="$2"
- dep=y
shift 2
- while [ $# -gt 0 ]; do
- if [ "$1" = y ]; then
- shift
- else
- dep=n
- shift $#
- fi
- done
- if [ "$dep" = y ]; then
- bool "$ques" "$var"
- else
- define_bool "$var" n
- fi
+ dep_calc "$@"
+ case $cur_dep in
+ y) bool "$ques" "$var" ;;
+ *) define_bool "$var" n ;;
+ esac
}
function dep_mbool () {
ques="$1"
var="$2"
- dep=y
shift 2
- while [ $# -gt 0 ]; do
- if [ "$1" = y -o "$1" = m ]; then
- shift
- else
- dep=n
- shift $#
- fi
- done
- if [ "$dep" = y ]; then
- bool "$ques" "$var"
- else
- define_bool "$var" n
- fi
+ dep_calc "$@"
+ case $cur_dep in
+ y|m) bool "$ques" "$var" ;;
+ n) define_bool "$var" n ;;
+ esac
}
#
@@ -1088,15 +1085,11 @@
set_x_info "$2" "n"
var="$2"
shift 2
- while [ $# -gt 0 ]; do
- if [ "$1" = y ]; then
- shift
- elif [ "$1" = m -a "$x" != n ]; then
- x=m; shift
- else
- x=n; shift $#
- fi
- done
+ dep_calc "$@"
+ case $cur_dep$x in
+ my) x=m ;;
+ n*) x=n ;;
+ esac
define_tristate "$var" "$x"
}
@@ -1104,13 +1097,8 @@
set_x_info "$2" "n"
var="$2"
shift 2
- while [ $# -gt 0 ]; do
- if [ "$1" = y ]; then
- shift
- else
- x=n; shift $#
- fi
- done
+ dep_calc "$@"
+ [ $cur_dep = y ] || x=n
define_bool "$var" "$x"
}
@@ -1118,13 +1106,8 @@
set_x_info "$2" "n"
var="$2"
shift 2
- while [ $# -gt 0 ]; do
- if [ "$1" = y -o "$1" = m ]; then
- shift
- else
- x=n; shift $#
- fi
- done
+ dep_calc "$@"
+ [ $cur_dep = n ] && x=n
define_bool "$var" "$x"
}
next prev parent reply other threads:[~2002-08-09 4:15 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200208062329.g76NTqP30962@devserv.devel.redhat.com.suse.lists.linux.kernel>
2002-08-07 10:01 ` Linux 2.4.20-pre1 Andi Kleen
2002-08-07 11:50 ` Alan Cox
2002-08-07 10:41 ` 64bit clean drivers was " Andi Kleen
2002-08-07 12:16 ` Alan Cox
2002-08-07 11:04 ` Andi Kleen
2002-08-07 11:10 ` Alan Cox
2002-08-07 11:18 ` Andi Kleen
2002-08-07 11:51 ` Alan Cox
2002-08-07 11:56 ` Andi Kleen
2002-08-07 13:26 ` Alan Cox
2002-08-07 16:28 ` Jeff Garzik
2002-08-08 15:14 ` Peter Samuelson
2002-08-08 16:49 ` Kai Germaschewski
2002-08-08 16:47 ` Peter Samuelson
2002-08-09 4:15 ` Peter Samuelson [this message]
2002-08-09 14:43 ` [kbuild-devel] [patch] config language dep_* enhancements Greg Banks
2002-08-09 15:38 ` Andreas Schwab
2002-08-12 10:38 ` Greg Banks
2002-08-09 16:10 ` Peter Samuelson
2002-08-12 11:04 ` Greg Banks
2002-08-12 14:46 ` Kai Germaschewski
2002-08-12 19:45 ` Roman Zippel
2002-08-12 21:40 ` [kbuild-devel] " Tom Rini
2002-08-12 22:13 ` Roman Zippel
2002-08-12 22:15 ` Tom Rini
2002-08-12 22:32 ` Roman Zippel
2002-08-12 22:47 ` Tom Rini
2002-08-12 23:17 ` Roman Zippel
2002-08-12 23:32 ` Tom Rini
2002-08-13 3:35 ` Greg Banks
2002-08-13 0:03 ` Peter Samuelson
2002-08-13 7:54 ` Roman Zippel
2002-08-13 3:33 ` Greg Banks
2002-08-13 9:32 ` Roman Zippel
2002-08-13 10:32 ` [kbuild-devel] " Greg Banks
[not found] ` <3D587483.1C459694@alphalink.com.au>
2002-08-13 3:39 ` Peter Samuelson
2002-08-13 4:31 ` Greg Banks
2002-08-13 14:00 ` [kbuild-devel] " Greg Banks
2002-08-13 15:53 ` Peter Samuelson
2002-08-13 18:48 ` Kai Germaschewski
2002-08-14 1:13 ` Greg Banks
2002-08-14 3:28 ` Peter Samuelson
2002-08-14 4:35 ` [patch] kernel config 3/N - move sound into drivers/media Peter Samuelson
2002-08-14 5:08 ` Kai Germaschewski
2002-08-14 5:49 ` Peter Samuelson
2002-08-14 10:56 ` [kbuild-devel] " Arnd Bergmann
2002-08-14 12:20 ` S390 vs S390x, was " Christoph Hellwig
2002-08-14 17:21 ` Arnd Bergmann
2002-08-14 18:16 ` Christoph Hellwig
2002-08-14 21:18 ` Arnd Bergmann
2002-08-14 19:22 ` Christoph Hellwig
2002-08-14 22:52 ` Arnd Bergmann
2002-08-14 6:14 ` Greg Banks
2002-08-14 6:31 ` Greg Banks
2002-08-14 8:16 ` Russell King
2002-08-14 6:01 ` [kbuild-devel] Re: [patch] config language dep_* enhancements Greg Banks
2002-08-14 8:18 ` Russell King
2002-08-14 14:22 ` Peter Samuelson
2002-08-15 1:28 ` Greg Banks
2002-08-15 2:33 ` Peter Samuelson
2002-08-15 3:27 ` Greg Banks
2002-08-13 18:43 ` Kai Germaschewski
2002-08-13 20:48 ` Peter Samuelson
2002-08-14 1:27 ` Greg Banks
2002-08-14 1:42 ` Peter Samuelson
2002-08-14 2:27 ` Greg Banks
2002-08-14 2:57 ` Peter Samuelson
2002-08-14 4:39 ` Kai Germaschewski
2002-08-14 5:35 ` Greg Banks
2002-08-14 11:40 ` Roman Zippel
2002-08-15 1:52 ` [kbuild-devel] " Greg Banks
2002-08-15 3:30 ` John Alvord
2002-08-16 2:24 ` Peter Samuelson
2002-08-15 9:46 ` Roman Zippel
2002-08-15 14:43 ` Kai Germaschewski
2002-08-15 20:12 ` Roman Zippel
2002-08-16 2:08 ` Greg Banks
2002-08-16 10:54 ` Roman Zippel
2002-08-19 9:27 ` Greg Banks
2002-08-19 10:20 ` Roman Zippel
2002-08-20 14:10 ` Greg Banks
2002-08-20 17:51 ` Roman Zippel
2002-08-19 20:30 ` Sam Ravnborg
2002-08-20 14:28 ` David Woodhouse
2002-08-23 15:18 ` Kai Germaschewski
2002-08-23 23:03 ` Roman Zippel
2002-08-24 12:43 ` Greg Banks
2002-08-14 1:19 ` Greg Banks
2002-08-12 15:47 ` Peter Samuelson
2002-08-13 3:23 ` [kbuild-devel] " Greg Banks
2002-08-13 16:04 ` Sam Ravnborg
2002-08-13 16:20 ` [kbuild-devel] " Peter Samuelson
2002-08-14 0:22 ` Greg Banks
2002-08-14 20:14 ` Get rid of shell based Config.in parsers? Sam Ravnborg
2002-08-14 22:21 ` [kbuild-devel] " Peter Samuelson
2002-08-15 17:51 ` Linus Torvalds
2002-08-08 23:57 ` 64bit clean drivers was Re: Linux 2.4.20-pre1 Thunder from the hill
2002-08-08 19:23 ` Roman Zippel
2002-08-08 20:03 ` Andi Kleen
2002-08-08 20:19 ` Roman Zippel
2002-08-08 17:42 ` Peter Samuelson
2002-08-09 10:21 ` Roman Zippel
2002-08-09 11:47 ` Peter Samuelson
2002-08-09 12:07 ` Russell King
2002-08-09 12:49 ` Peter Samuelson
2002-08-09 14:53 ` [kbuild-devel] " Greg Banks
2002-08-09 22:37 ` Thunder from the hill
2002-08-08 20:37 ` Andi Kleen
2002-08-08 20:51 ` Roman Zippel
2002-08-07 17:31 ` Thunder from the hill
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20020809041543.GA4818@cadcamlab.org \
--to=peter@cadcamlab.org \
--cc=kai@tp1.ruhr-uni-bochum.de \
--cc=kbuild-devel@lists.sf.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®