mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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"
 	}
 

  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®