linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig
@ 2010-04-13 19:47 Aristeu Rozanski
  2010-04-13 20:00 ` Randy Dunlap
  2010-04-13 20:43 ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig Arjan van de Ven
  0 siblings, 2 replies; 14+ messages in thread
From: Aristeu Rozanski @ 2010-04-13 19:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: davej, kyle, vgoyal, arjan

This patch has been around for a long time in Fedora and Red Hat Enterprise
Linux kernels and it may be useful for others. The nonint_oldconfig target
will fail and print the unset config options while loose_nonint_oldconfig will
simply let the config option unset. They're useful in distro kernel packages
where the config files are built using a combination of smaller config files.
The patch's author AFAIK is Arjan van de Ven. Arjan, please add a Signed-off-by
if you're the original author.

Signed-off-by: Aristeu Rozanski <aris@redhat.com> 

--- linus-2.6.orig/scripts/kconfig/Makefile	2010-04-13 15:15:10.000000000 -0400
+++ linus-2.6/scripts/kconfig/Makefile	2010-04-13 15:15:23.000000000 -0400
@@ -69,6 +69,11 @@ localyesconfig: $(obj)/streamline_config
 	fi
 	$(Q)rm -f .tmp.config
 
+nonint_oldconfig: $(obj)/conf
+	$< -b $(Kconfig)
+loose_nonint_oldconfig: $(obj)/conf
+	$< -B $(Kconfig)
+
 # Create new linux.pot file
 # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
 # The symlink is used to repair a deficiency in arch/um
--- linus-2.6.orig/scripts/kconfig/conf.c	2010-04-13 15:15:10.000000000 -0400
+++ linus-2.6/scripts/kconfig/conf.c	2010-04-13 15:15:54.000000000 -0400
@@ -23,6 +23,8 @@ enum {
 	ask_all,
 	ask_new,
 	ask_silent,
+	dont_ask,
+	dont_ask_dont_tell,
 	set_default,
 	set_yes,
 	set_mod,
@@ -360,7 +362,10 @@ static void conf(struct menu *menu)
 
 		switch (prop->type) {
 		case P_MENU:
-			if (input_mode == ask_silent && rootEntry != menu) {
+			if ((input_mode == ask_silent ||
+			     input_mode == dont_ask ||
+			     input_mode == dont_ask_dont_tell) &&
+			    rootEntry != menu) {
 				check_conf(menu);
 				return;
 			}
@@ -406,6 +411,8 @@ conf_childs:
 		indent -= 2;
 }
 
+static int return_value;
+
 static void check_conf(struct menu *menu)
 {
 	struct symbol *sym;
@@ -418,10 +425,19 @@ static void check_conf(struct menu *menu
 	if (sym && !sym_has_value(sym)) {
 		if (sym_is_changable(sym) ||
 		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
-			if (!conf_cnt++)
-				printf(_("*\n* Restart config...\n*\n"));
-			rootEntry = menu_get_parent_menu(menu);
-			conf(rootEntry);
+			if (input_mode == dont_ask ||
+			    input_mode == dont_ask_dont_tell) {
+				if (input_mode == dont_ask &&
+				    sym->name && !sym_is_choice_value(sym)) {
+					fprintf(stderr,"CONFIG_%s\n",sym->name);
+					++return_value;
+				}
+			} else {
+				if (!conf_cnt++)
+					printf(_("*\n* Restart config...\n*\n"));
+				rootEntry = menu_get_parent_menu(menu);
+				conf(rootEntry);
+			}
 		}
 	}
 
@@ -439,7 +455,7 @@ int main(int ac, char **av)
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
 
-	while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
+ 	while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
 		switch (opt) {
 		case 'o':
 			input_mode = ask_silent;
@@ -448,6 +464,12 @@ int main(int ac, char **av)
 			input_mode = ask_silent;
 			sync_kconfig = 1;
 			break;
+		case 'b':
+			input_mode = dont_ask;
+			break;
+		case 'B':
+			input_mode = dont_ask_dont_tell;
+			break;
 		case 'd':
 			input_mode = set_default;
 			break;
@@ -525,6 +547,8 @@ int main(int ac, char **av)
 	case ask_silent:
 	case ask_all:
 	case ask_new:
+	case dont_ask:
+	case dont_ask_dont_tell:
 		conf_read(NULL);
 		break;
 	case set_no:
@@ -586,12 +610,16 @@ int main(int ac, char **av)
 		conf(&rootmenu);
 		input_mode = ask_silent;
 		/* fall through */
+	case dont_ask:
+	case dont_ask_dont_tell:
 	case ask_silent:
 		/* Update until a loop caused no more changes */
 		do {
 			conf_cnt = 0;
 			check_conf(&rootmenu);
-		} while (conf_cnt);
+		} while (conf_cnt &&
+			 (input_mode != dont_ask &&
+			  input_mode != dont_ask_dont_tell));
 		break;
 	}
 
@@ -613,5 +641,5 @@ int main(int ac, char **av)
 			exit(1);
 		}
 	}
-	return 0;
+	return return_value;
 }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig
  2010-04-13 19:47 [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig Aristeu Rozanski
@ 2010-04-13 20:00 ` Randy Dunlap
  2010-04-13 20:18   ` Aristeu Rozanski
  2010-04-13 20:43 ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig Arjan van de Ven
  1 sibling, 1 reply; 14+ messages in thread
From: Randy Dunlap @ 2010-04-13 20:00 UTC (permalink / raw)
  To: Aristeu Rozanski, linux-kbuild, Michal Marek
  Cc: linux-kernel, davej, kyle, vgoyal, arjan

On Tue, 13 Apr 2010 15:47:48 -0400 Aristeu Rozanski wrote:

> This patch has been around for a long time in Fedora and Red Hat Enterprise
> Linux kernels and it may be useful for others. The nonint_oldconfig target
> will fail and print the unset config options while loose_nonint_oldconfig will
> simply let the config option unset. They're useful in distro kernel packages
> where the config files are built using a combination of smaller config files.
> The patch's author AFAIK is Arjan van de Ven. Arjan, please add a Signed-off-by
> if you're the original author.

Roland McGrath added the loose parts according to his email of 2008.Mar.05:
"I added this one (loose_nonint_oldconfig target, -B option to conf)."

after Dave Jones posted this patch.

(adding linux-kbuild mailing list & kbuild maintainer)

Acked-by: Randy Dunlap <randy.dunlap@oracle.com>



> Signed-off-by: Aristeu Rozanski <aris@redhat.com> 


> @@ -613,5 +641,5 @@ int main(int ac, char **av)
>  			exit(1);
>  		}
>  	}
> -	return 0;
> +	return return_value;
>  }

Having 'make oldconfig' exit with Exit status: 139  (for example)
can be confusing.  I know that from experience.  It took me a bit
to find out what that meant.  That part could be improved...

---
~Randy

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig
  2010-04-13 20:00 ` Randy Dunlap
@ 2010-04-13 20:18   ` Aristeu Rozanski
  2010-04-13 20:24     ` Randy Dunlap
  0 siblings, 1 reply; 14+ messages in thread
From: Aristeu Rozanski @ 2010-04-13 20:18 UTC (permalink / raw)
  To: Randy Dunlap
  Cc: linux-kbuild, Michal Marek, linux-kernel, davej, kyle, vgoyal,
	arjan

> > This patch has been around for a long time in Fedora and Red Hat Enterprise
> > Linux kernels and it may be useful for others. The nonint_oldconfig target
> > will fail and print the unset config options while loose_nonint_oldconfig will
> > simply let the config option unset. They're useful in distro kernel packages
> > where the config files are built using a combination of smaller config files.
> > The patch's author AFAIK is Arjan van de Ven. Arjan, please add a Signed-off-by
> > if you're the original author.
> 
> Roland McGrath added the loose parts according to his email of 2008.Mar.05:
> "I added this one (loose_nonint_oldconfig target, -B option to conf)."
hm, I can't see the -B there, maybe the functionality he's referring to is
the def_no?

> after Dave Jones posted this patch.
> 
> (adding linux-kbuild mailing list & kbuild maintainer)
> 
> Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
> 
> 
> 
> > Signed-off-by: Aristeu Rozanski <aris@redhat.com> 
> 
> 
> > @@ -613,5 +641,5 @@ int main(int ac, char **av)
> >  			exit(1);
> >  		}
> >  	}
> > -	return 0;
> > +	return return_value;
> >  }
> 
> Having 'make oldconfig' exit with Exit status: 139  (for example)
> can be confusing.  I know that from experience.  It took me a bit
> to find out what that meant.  That part could be improved...
ok, no real reason to keep incrementing that. no different error codes exist
other than "1". Do you think we need to introduce different return codes?

-- 
Aristeu


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig
  2010-04-13 20:18   ` Aristeu Rozanski
@ 2010-04-13 20:24     ` Randy Dunlap
  2010-04-13 20:44       ` Aristeu Rozanski
  2010-04-13 21:03       ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v2) Aristeu Rozanski
  0 siblings, 2 replies; 14+ messages in thread
From: Randy Dunlap @ 2010-04-13 20:24 UTC (permalink / raw)
  To: Aristeu Rozanski
  Cc: linux-kbuild, Michal Marek, linux-kernel, davej, kyle, vgoyal,
	arjan

On 04/13/10 13:18, Aristeu Rozanski wrote:
>>> This patch has been around for a long time in Fedora and Red Hat Enterprise
>>> Linux kernels and it may be useful for others. The nonint_oldconfig target
>>> will fail and print the unset config options while loose_nonint_oldconfig will
>>> simply let the config option unset. They're useful in distro kernel packages
>>> where the config files are built using a combination of smaller config files.
>>> The patch's author AFAIK is Arjan van de Ven. Arjan, please add a Signed-off-by
>>> if you're the original author.
>>
>> Roland McGrath added the loose parts according to his email of 2008.Mar.05:
>> "I added this one (loose_nonint_oldconfig target, -B option to conf)."
> hm, I can't see the -B there, maybe the functionality he's referring to is
> the def_no?

+loose_nonint_oldconfig: $(obj)/conf
+	$< -B $(Kconfig)

...

+		case 'B':
+			input_mode = dont_ask_dont_tell;
+			break;


>> after Dave Jones posted this patch.
>>
>> (adding linux-kbuild mailing list & kbuild maintainer)
>>
>> Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
>>
>>
>>
>>> Signed-off-by: Aristeu Rozanski <aris@redhat.com> 
>>
>>
>>> @@ -613,5 +641,5 @@ int main(int ac, char **av)
>>>  			exit(1);
>>>  		}
>>>  	}
>>> -	return 0;
>>> +	return return_value;
>>>  }
>>
>> Having 'make oldconfig' exit with Exit status: 139  (for example)
>> can be confusing.  I know that from experience.  It took me a bit
>> to find out what that meant.  That part could be improved...
> ok, no real reason to keep incrementing that. no different error codes exist
> other than "1". Do you think we need to introduce different return codes?
> 

I would prefer a fixed value, like 86.  or 11.  or a useful printf text message.

-- 
~Randy

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig
  2010-04-13 19:47 [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig Aristeu Rozanski
  2010-04-13 20:00 ` Randy Dunlap
@ 2010-04-13 20:43 ` Arjan van de Ven
  1 sibling, 0 replies; 14+ messages in thread
From: Arjan van de Ven @ 2010-04-13 20:43 UTC (permalink / raw)
  To: Aristeu Rozanski; +Cc: linux-kernel, davej, kyle, vgoyal

On 4/13/2010 12:47, Aristeu Rozanski wrote:
> This patch has been around for a long time in Fedora and Red Hat Enterprise
> Linux kernels and it may be useful for others. The nonint_oldconfig target
> will fail and print the unset config options while loose_nonint_oldconfig will
> simply let the config option unset. They're useful in distro kernel packages
> where the config files are built using a combination of smaller config files.
> The patch's author AFAIK is Arjan van de Ven. Arjan, please add a Signed-off-by
> if you're the original author.
>
> Signed-off-by: Aristeu Rozanski<aris@redhat.com>


this gets funny with employers chaning etc ;)


Signed-off-by: Arjan van de Ven <arjan@redhat.com> [defunct email]
Acked-by: Arjan van de Ven <arjan@linux.intel.com>



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig
  2010-04-13 20:24     ` Randy Dunlap
@ 2010-04-13 20:44       ` Aristeu Rozanski
  2010-04-13 21:03       ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v2) Aristeu Rozanski
  1 sibling, 0 replies; 14+ messages in thread
From: Aristeu Rozanski @ 2010-04-13 20:44 UTC (permalink / raw)
  To: Randy Dunlap
  Cc: linux-kbuild, Michal Marek, linux-kernel, davej, kyle, vgoyal,
	arjan

> >>> This patch has been around for a long time in Fedora and Red Hat Enterprise
> >>> Linux kernels and it may be useful for others. The nonint_oldconfig target
> >>> will fail and print the unset config options while loose_nonint_oldconfig will
> >>> simply let the config option unset. They're useful in distro kernel packages
> >>> where the config files are built using a combination of smaller config files.
> >>> The patch's author AFAIK is Arjan van de Ven. Arjan, please add a Signed-off-by
> >>> if you're the original author.
> >>
> >> Roland McGrath added the loose parts according to his email of 2008.Mar.05:
> >> "I added this one (loose_nonint_oldconfig target, -B option to conf)."
> > hm, I can't see the -B there, maybe the functionality he's referring to is
> > the def_no?
> 
> +loose_nonint_oldconfig: $(obj)/conf
> +	$< -B $(Kconfig)
> 
> ...
> 
> +		case 'B':
> +			input_mode = dont_ask_dont_tell;
> +			break;
ah, duh, you mean he's the author of loose_nonint_oldconfig. I somewhat thought
you said the loose_nonint_oldconfig functionality was already in :)

> >> after Dave Jones posted this patch.
> >>
> >> (adding linux-kbuild mailing list & kbuild maintainer)
> >>
> >> Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
> >>
> >>
> >>
> >>> Signed-off-by: Aristeu Rozanski <aris@redhat.com> 
> >>
> >>
> >>> @@ -613,5 +641,5 @@ int main(int ac, char **av)
> >>>  			exit(1);
> >>>  		}
> >>>  	}
> >>> -	return 0;
> >>> +	return return_value;
> >>>  }
> >>
> >> Having 'make oldconfig' exit with Exit status: 139  (for example)
> >> can be confusing.  I know that from experience.  It took me a bit
> >> to find out what that meant.  That part could be improved...
> > ok, no real reason to keep incrementing that. no different error codes exist
> > other than "1". Do you think we need to introduce different return codes?
> > 
> 
> I would prefer a fixed value, like 86.  or 11.  or a useful printf text message.
ok, will refresh and resend

-- 
Aristeu


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v2)
  2010-04-13 20:24     ` Randy Dunlap
  2010-04-13 20:44       ` Aristeu Rozanski
@ 2010-04-13 21:03       ` Aristeu Rozanski
  2010-04-13 21:26         ` Kyle McMartin
  2010-04-14 13:22         ` Michal Marek
  1 sibling, 2 replies; 14+ messages in thread
From: Aristeu Rozanski @ 2010-04-13 21:03 UTC (permalink / raw)
  To: Randy Dunlap
  Cc: linux-kbuild, Michal Marek, linux-kernel, davej, kyle, vgoyal,
	arjan

This patch has been around for a long time in Fedora and Red Hat Enterprise   
Linux kernels and it may be useful for others. The nonint_oldconfig target    
will fail and print the unset config options while loose_nonint_oldconfig will
simply let the config option unset. They're useful in distro kernel packages  
where the config files are built using a combination of smaller config files. 

Arjan van de Ven wrote the initial nonint_config and Roland McGrath added the
loose_nonint_oldconfig.

v2:
- when -B and -b are used, return "2" so the reason can be distinguished from
  other errors

Signed-off-by: Arjan van de Ven <arjan@redhat.com> [defunct email]
Acked-by: Arjan van de Ven <arjan@linux.intel.com>
Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Aristeu Rozanski <aris@redhat.com>

--- linus-2.6.orig/scripts/kconfig/Makefile	2010-04-13 16:30:47.000000000 -0400
+++ linus-2.6/scripts/kconfig/Makefile	2010-04-13 16:48:24.000000000 -0400
@@ -69,6 +69,11 @@ localyesconfig: $(obj)/streamline_config
 	fi
 	$(Q)rm -f .tmp.config
 
+nonint_oldconfig: $(obj)/conf
+	$< -b $(Kconfig)
+loose_nonint_oldconfig: $(obj)/conf
+	$< -B $(Kconfig)
+
 # Create new linux.pot file
 # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
 # The symlink is used to repair a deficiency in arch/um
--- linus-2.6.orig/scripts/kconfig/conf.c	2010-04-13 16:30:47.000000000 -0400
+++ linus-2.6/scripts/kconfig/conf.c	2010-04-13 16:53:20.000000000 -0400
@@ -16,6 +16,9 @@
 #define LKC_DIRECT_LINK
 #include "lkc.h"
 
+/* Return codes */
+#define EUNSETOPT	2	/* if -B is used and unset config options were found */
+
 static void conf(struct menu *menu);
 static void check_conf(struct menu *menu);
 
@@ -23,6 +26,8 @@ enum {
 	ask_all,
 	ask_new,
 	ask_silent,
+	dont_ask,
+	dont_ask_dont_tell,
 	set_default,
 	set_yes,
 	set_mod,
@@ -360,7 +365,10 @@ static void conf(struct menu *menu)
 
 		switch (prop->type) {
 		case P_MENU:
-			if (input_mode == ask_silent && rootEntry != menu) {
+			if ((input_mode == ask_silent ||
+			     input_mode == dont_ask ||
+			     input_mode == dont_ask_dont_tell) &&
+			    rootEntry != menu) {
 				check_conf(menu);
 				return;
 			}
@@ -406,6 +414,8 @@ conf_childs:
 		indent -= 2;
 }
 
+static int return_value;
+
 static void check_conf(struct menu *menu)
 {
 	struct symbol *sym;
@@ -418,10 +428,19 @@ static void check_conf(struct menu *menu
 	if (sym && !sym_has_value(sym)) {
 		if (sym_is_changable(sym) ||
 		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
-			if (!conf_cnt++)
-				printf(_("*\n* Restart config...\n*\n"));
-			rootEntry = menu_get_parent_menu(menu);
-			conf(rootEntry);
+			if (input_mode == dont_ask ||
+			    input_mode == dont_ask_dont_tell) {
+				if (input_mode == dont_ask &&
+				    sym->name && !sym_is_choice_value(sym)) {
+					fprintf(stderr,"CONFIG_%s\n",sym->name);
+					return_value = EUNSETOPT;
+				}
+			} else {
+				if (!conf_cnt++)
+					printf(_("*\n* Restart config...\n*\n"));
+				rootEntry = menu_get_parent_menu(menu);
+				conf(rootEntry);
+			}
 		}
 	}
 
@@ -439,7 +458,7 @@ int main(int ac, char **av)
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
 
-	while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
+ 	while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
 		switch (opt) {
 		case 'o':
 			input_mode = ask_silent;
@@ -448,6 +467,12 @@ int main(int ac, char **av)
 			input_mode = ask_silent;
 			sync_kconfig = 1;
 			break;
+		case 'b':
+			input_mode = dont_ask;
+			break;
+		case 'B':
+			input_mode = dont_ask_dont_tell;
+			break;
 		case 'd':
 			input_mode = set_default;
 			break;
@@ -525,6 +550,8 @@ int main(int ac, char **av)
 	case ask_silent:
 	case ask_all:
 	case ask_new:
+	case dont_ask:
+	case dont_ask_dont_tell:
 		conf_read(NULL);
 		break;
 	case set_no:
@@ -586,12 +613,16 @@ int main(int ac, char **av)
 		conf(&rootmenu);
 		input_mode = ask_silent;
 		/* fall through */
+	case dont_ask:
+	case dont_ask_dont_tell:
 	case ask_silent:
 		/* Update until a loop caused no more changes */
 		do {
 			conf_cnt = 0;
 			check_conf(&rootmenu);
-		} while (conf_cnt);
+		} while (conf_cnt &&
+			 (input_mode != dont_ask &&
+			  input_mode != dont_ask_dont_tell));
 		break;
 	}
 
@@ -613,5 +644,5 @@ int main(int ac, char **av)
 			exit(1);
 		}
 	}
-	return 0;
+	return return_value;
 }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v2)
  2010-04-13 21:03       ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v2) Aristeu Rozanski
@ 2010-04-13 21:26         ` Kyle McMartin
  2010-04-14 13:22         ` Michal Marek
  1 sibling, 0 replies; 14+ messages in thread
From: Kyle McMartin @ 2010-04-13 21:26 UTC (permalink / raw)
  To: Aristeu Rozanski
  Cc: Randy Dunlap, linux-kbuild, Michal Marek, linux-kernel, davej,
	kyle, vgoyal, arjan

On Tue, Apr 13, 2010 at 05:03:53PM -0400, Aristeu Rozanski wrote:
> Signed-off-by: Arjan van de Ven <arjan@redhat.com> [defunct email]
> Acked-by: Arjan van de Ven <arjan@linux.intel.com>
> Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
> Signed-off-by: Aristeu Rozanski <aris@redhat.com>
> 

Thanks for prepping this for submission, Aris.

Whatevered-by: Kyle McMartin <kyle@redhat.com>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v2)
  2010-04-13 21:03       ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v2) Aristeu Rozanski
  2010-04-13 21:26         ` Kyle McMartin
@ 2010-04-14 13:22         ` Michal Marek
  2010-05-06 16:48           ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3) Aristeu Rozanski
  1 sibling, 1 reply; 14+ messages in thread
From: Michal Marek @ 2010-04-14 13:22 UTC (permalink / raw)
  To: Aristeu Rozanski
  Cc: Randy Dunlap, linux-kbuild, linux-kernel, davej, kyle, vgoyal,
	arjan

On 13.4.2010 23:03, Aristeu Rozanski wrote:
> This patch has been around for a long time in Fedora and Red Hat Enterprise   
> Linux kernels and it may be useful for others. The nonint_oldconfig target    
> will fail and print the unset config options

Nice.


> while loose_nonint_oldconfig will simply let the config option unset.

So loose_nonint_oldconfig is just a less chatty version of
$ yes '' | make oldconfig
? Also, you should update make help.


> They're useful in distro kernel packages  
> where the config files are built using a combination of smaller config files. 
> 
> Arjan van de Ven wrote the initial nonint_config and Roland McGrath added the
> loose_nonint_oldconfig.
> 
> v2:
> - when -B and -b are used, return "2" so the reason can be distinguished from
>   other errors
> 
> Signed-off-by: Arjan van de Ven <arjan@redhat.com> [defunct email]
> Acked-by: Arjan van de Ven <arjan@linux.intel.com>
> Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
> Signed-off-by: Aristeu Rozanski <aris@redhat.com>
> 
> --- linus-2.6.orig/scripts/kconfig/Makefile	2010-04-13 16:30:47.000000000 -0400
> +++ linus-2.6/scripts/kconfig/Makefile	2010-04-13 16:48:24.000000000 -0400
> @@ -69,6 +69,11 @@ localyesconfig: $(obj)/streamline_config
>  	fi
>  	$(Q)rm -f .tmp.config
>  
> +nonint_oldconfig: $(obj)/conf
> +	$< -b $(Kconfig)
> +loose_nonint_oldconfig: $(obj)/conf
> +	$< -B $(Kconfig)

Add an empty line between the two rules.


> +
>  # Create new linux.pot file
>  # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
>  # The symlink is used to repair a deficiency in arch/um
> --- linus-2.6.orig/scripts/kconfig/conf.c	2010-04-13 16:30:47.000000000 -0400
> +++ linus-2.6/scripts/kconfig/conf.c	2010-04-13 16:53:20.000000000 -0400
> @@ -16,6 +16,9 @@
>  #define LKC_DIRECT_LINK
>  #include "lkc.h"
>  
> +/* Return codes */
> +#define EUNSETOPT	2	/* if -B is used and unset config options were found */
> +
>  static void conf(struct menu *menu);
>  static void check_conf(struct menu *menu);
>  
> @@ -23,6 +26,8 @@ enum {
>  	ask_all,
>  	ask_new,
>  	ask_silent,
> +	dont_ask,
> +	dont_ask_dont_tell,
>  	set_default,
>  	set_yes,
>  	set_mod,
> @@ -360,7 +365,10 @@ static void conf(struct menu *menu)
>  
>  		switch (prop->type) {
>  		case P_MENU:
> -			if (input_mode == ask_silent && rootEntry != menu) {
> +			if ((input_mode == ask_silent ||
> +			     input_mode == dont_ask ||
> +			     input_mode == dont_ask_dont_tell) &&
> +			    rootEntry != menu) {
>  				check_conf(menu);
>  				return;
>  			}
> @@ -406,6 +414,8 @@ conf_childs:
>  		indent -= 2;
>  }
>  
> +static int return_value;
> +
>  static void check_conf(struct menu *menu)
>  {
>  	struct symbol *sym;
> @@ -418,10 +428,19 @@ static void check_conf(struct menu *menu
>  	if (sym && !sym_has_value(sym)) {
>  		if (sym_is_changable(sym) ||
>  		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
> -			if (!conf_cnt++)
> -				printf(_("*\n* Restart config...\n*\n"));
> -			rootEntry = menu_get_parent_menu(menu);
> -			conf(rootEntry);
> +			if (input_mode == dont_ask ||
> +			    input_mode == dont_ask_dont_tell) {
> +				if (input_mode == dont_ask &&
> +				    sym->name && !sym_is_choice_value(sym)) {
> +					fprintf(stderr,"CONFIG_%s\n",sym->name);

You should print "The following variables are not set:" or something
like that before the first variable, otherwise it's not very clear what
the list means.


> +					return_value = EUNSETOPT;

The name 'return_value' is a little confusing, we call exit(0) or
exit(1) at several places, but this variable only affects a single
statement. What about

static int unset_variables;
...
   unset_variables++;
...
return unset_variables ? EUNSETOPT : 0;

? Also, define the static var at the beginning of the file, where the
remaining variables are defined.


> +				}
> +			} else {
> +				if (!conf_cnt++)
> +					printf(_("*\n* Restart config...\n*\n"));
> +				rootEntry = menu_get_parent_menu(menu);
> +				conf(rootEntry);
> +			}
>  		}
>  	}
>  
> @@ -439,7 +458,7 @@ int main(int ac, char **av)
>  	bindtextdomain(PACKAGE, LOCALEDIR);
>  	textdomain(PACKAGE);
>  
> -	while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
> + 	while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
>  		switch (opt) {
>  		case 'o':
>  			input_mode = ask_silent;
> @@ -448,6 +467,12 @@ int main(int ac, char **av)
>  			input_mode = ask_silent;
>  			sync_kconfig = 1;
>  			break;
> +		case 'b':
> +			input_mode = dont_ask;
> +			break;
> +		case 'B':
> +			input_mode = dont_ask_dont_tell;
> +			break;
>  		case 'd':
>  			input_mode = set_default;
>  			break;
> @@ -525,6 +550,8 @@ int main(int ac, char **av)
>  	case ask_silent:
>  	case ask_all:
>  	case ask_new:
> +	case dont_ask:
> +	case dont_ask_dont_tell:
>  		conf_read(NULL);
>  		break;
>  	case set_no:
> @@ -586,12 +613,16 @@ int main(int ac, char **av)
>  		conf(&rootmenu);
>  		input_mode = ask_silent;
>  		/* fall through */
> +	case dont_ask:
> +	case dont_ask_dont_tell:
>  	case ask_silent:
>  		/* Update until a loop caused no more changes */
>  		do {
>  			conf_cnt = 0;
>  			check_conf(&rootmenu);
> -		} while (conf_cnt);
> +		} while (conf_cnt &&
> +			 (input_mode != dont_ask &&
> +			  input_mode != dont_ask_dont_tell));
>  		break;
>  	}
>  
> @@ -613,5 +644,5 @@ int main(int ac, char **av)
>  			exit(1);
>  		}
>  	}
> -	return 0;
> +	return return_value;

IMO nonint_oldconfig should not update the .config if it's going to
fail. At least I find this output quite confusing:
$ make nonint_oldconfig
scripts/kconfig/conf -b arch/x86/Kconfig
CONFIG_FOO
#
# configuration written to .config
#
make[1]: *** [nonint_oldconfig] Error 2
make: *** [nonint_oldconfig] Error 2

and a subsequent make nonint_oldconfig call does not fail.

Michal

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3)
  2010-04-14 13:22         ` Michal Marek
@ 2010-05-06 16:48           ` Aristeu Rozanski
  2010-05-07  7:02             ` Américo Wang
  2010-06-02 12:44             ` Michal Marek
  0 siblings, 2 replies; 14+ messages in thread
From: Aristeu Rozanski @ 2010-05-06 16:48 UTC (permalink / raw)
  To: Michal Marek
  Cc: Randy Dunlap, linux-kbuild, linux-kernel, davej, kyle, vgoyal,
	arjan

This patch has been around for a long time in Fedora and Red Hat Enterprise
Linux kernels and it may be useful for others. The nonint_oldconfig target
will fail and print the unset config options while loose_nonint_oldconfig will
simply let the config option unset. They're useful in distro kernel packages
where the config files are built using a combination of smaller config files.

Arjan van de Ven wrote the initial nonint_config and Roland McGrath added the
loose_nonint_oldconfig.

v2:
- when -B and -b are used, return "2" so the reason can be distinguished from
  other errors
v3:
- help updated
- nonint_oldconfig won't update the config file if options are missing

Signed-off-by: Arjan van de Ven <arjan@redhat.com> [defunct email]
Whatevered-by: Kyle McMartin <kyle@redhat.com>
Acked-by: Arjan van de Ven <arjan@linux.intel.com>
Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Aristeu Rozanski <aris@redhat.com>
---
 scripts/kconfig/Makefile |   10 +++++++++
 scripts/kconfig/conf.c   |   52 ++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 53 insertions(+), 9 deletions(-)

--- linus-2.6.orig/scripts/kconfig/Makefile	2010-04-15 14:12:59.000000000 -0400
+++ linus-2.6/scripts/kconfig/Makefile	2010-05-06 12:37:28.000000000 -0400
@@ -69,6 +69,12 @@ localyesconfig: $(obj)/streamline_config
 	fi
 	$(Q)rm -f .tmp.config
 
+nonint_oldconfig: $(obj)/conf
+	$< -b $(Kconfig)
+
+loose_nonint_oldconfig: $(obj)/conf
+	$< -B $(Kconfig)
+
 # Create new linux.pot file
 # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
 # The symlink is used to repair a deficiency in arch/um
@@ -132,6 +138,10 @@ help:
 	@echo  '  allmodconfig	  - New config selecting modules when possible'
 	@echo  '  allyesconfig	  - New config where all options are accepted with yes'
 	@echo  '  allnoconfig	  - New config where all options are answered with no'
+	@echo  '  nonint_oldconfig - Checks the current configuration and fails if an option is '
+	@echo  '                    not set'
+	@echo  '  loose_nonint_oldconfig - Same as nonint_oldconfig, but updates the config file with '
+	@echo  '                    missing config options as unset'
 
 # lxdialog stuff
 check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
--- linus-2.6.orig/scripts/kconfig/conf.c	2010-04-15 14:12:59.000000000 -0400
+++ linus-2.6/scripts/kconfig/conf.c	2010-05-06 12:45:34.000000000 -0400
@@ -16,6 +16,10 @@
 #define LKC_DIRECT_LINK
 #include "lkc.h"
 
+/* Return codes */
+#define EUNSETOPT	2	/* if -B and -b are used and unset config
+				 * options were found */
+
 static void conf(struct menu *menu);
 static void check_conf(struct menu *menu);
 
@@ -23,6 +27,8 @@ enum {
 	ask_all,
 	ask_new,
 	ask_silent,
+	dont_ask,
+	dont_ask_dont_tell,
 	set_default,
 	set_yes,
 	set_mod,
@@ -37,6 +43,7 @@ static int sync_kconfig;
 static int conf_cnt;
 static char line[128];
 static struct menu *rootEntry;
+static int unset_variables;
 
 static void print_help(struct menu *menu)
 {
@@ -360,7 +367,10 @@ static void conf(struct menu *menu)
 
 		switch (prop->type) {
 		case P_MENU:
-			if (input_mode == ask_silent && rootEntry != menu) {
+			if ((input_mode == ask_silent ||
+			     input_mode == dont_ask ||
+			     input_mode == dont_ask_dont_tell) &&
+			    rootEntry != menu) {
 				check_conf(menu);
 				return;
 			}
@@ -418,10 +428,22 @@ static void check_conf(struct menu *menu
 	if (sym && !sym_has_value(sym)) {
 		if (sym_is_changable(sym) ||
 		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
-			if (!conf_cnt++)
-				printf(_("*\n* Restart config...\n*\n"));
-			rootEntry = menu_get_parent_menu(menu);
-			conf(rootEntry);
+			if (input_mode == dont_ask ||
+			    input_mode == dont_ask_dont_tell) {
+				if (input_mode == dont_ask &&
+				    sym->name && !sym_is_choice_value(sym)) {
+					if (!unset_variables)
+						fprintf(stderr, "The following"
+						  " variables are not set:\n");
+					fprintf(stderr,"CONFIG_%s\n",sym->name);
+					unset_variables++;
+				}
+			} else {
+				if (!conf_cnt++)
+					printf(_("*\n* Restart config...\n*\n"));
+				rootEntry = menu_get_parent_menu(menu);
+				conf(rootEntry);
+			}
 		}
 	}
 
@@ -439,7 +461,7 @@ int main(int ac, char **av)
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
 
-	while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
+ 	while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
 		switch (opt) {
 		case 'o':
 			input_mode = ask_silent;
@@ -448,6 +470,12 @@ int main(int ac, char **av)
 			input_mode = ask_silent;
 			sync_kconfig = 1;
 			break;
+		case 'b':
+			input_mode = dont_ask;
+			break;
+		case 'B':
+			input_mode = dont_ask_dont_tell;
+			break;
 		case 'd':
 			input_mode = set_default;
 			break;
@@ -525,6 +553,8 @@ int main(int ac, char **av)
 	case ask_silent:
 	case ask_all:
 	case ask_new:
+	case dont_ask:
+	case dont_ask_dont_tell:
 		conf_read(NULL);
 		break;
 	case set_no:
@@ -586,12 +616,16 @@ int main(int ac, char **av)
 		conf(&rootmenu);
 		input_mode = ask_silent;
 		/* fall through */
+	case dont_ask:
+	case dont_ask_dont_tell:
 	case ask_silent:
 		/* Update until a loop caused no more changes */
 		do {
 			conf_cnt = 0;
 			check_conf(&rootmenu);
-		} while (conf_cnt);
+		} while (conf_cnt &&
+			 (input_mode != dont_ask &&
+			  input_mode != dont_ask_dont_tell));
 		break;
 	}
 
@@ -607,11 +641,11 @@ int main(int ac, char **av)
 			fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n"));
 			return 1;
 		}
-	} else {
+	} else if (!unset_variables || input_mode != dont_ask) {
 		if (conf_write(NULL)) {
 			fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
 			exit(1);
 		}
 	}
-	return 0;
+	return unset_variables? EUNSETOPT : 0;
 }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3)
  2010-05-06 16:48           ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3) Aristeu Rozanski
@ 2010-05-07  7:02             ` Américo Wang
  2010-05-07 14:28               ` Randy Dunlap
  2010-06-02 12:44             ` Michal Marek
  1 sibling, 1 reply; 14+ messages in thread
From: Américo Wang @ 2010-05-07  7:02 UTC (permalink / raw)
  To: Aristeu Rozanski
  Cc: Michal Marek, Randy Dunlap, linux-kbuild, linux-kernel, davej,
	kyle, vgoyal, arjan

On Thu, May 06, 2010 at 12:48:34PM -0400, Aristeu Rozanski wrote:
>This patch has been around for a long time in Fedora and Red Hat Enterprise
>Linux kernels and it may be useful for others. The nonint_oldconfig target
>will fail and print the unset config options while loose_nonint_oldconfig will
>simply let the config option unset. They're useful in distro kernel packages
>where the config files are built using a combination of smaller config files.
>
>Arjan van de Ven wrote the initial nonint_config and Roland McGrath added the
>loose_nonint_oldconfig.
>
>v2:
>- when -B and -b are used, return "2" so the reason can be distinguished from
>  other errors
>v3:
>- help updated
>- nonint_oldconfig won't update the config file if options are missing

The patch looks fine, but, why the name 'nonint_oldconfig'?
My English is not good enough to see what 'nonint' standards for...

Thanks.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3)
  2010-05-07  7:02             ` Américo Wang
@ 2010-05-07 14:28               ` Randy Dunlap
  2010-05-12  6:12                 ` Américo Wang
  0 siblings, 1 reply; 14+ messages in thread
From: Randy Dunlap @ 2010-05-07 14:28 UTC (permalink / raw)
  To: Américo Wang
  Cc: Aristeu Rozanski, Michal Marek, linux-kbuild, linux-kernel, davej,
	kyle, vgoyal, arjan

On 05/07/10 00:02, Américo Wang wrote:
> On Thu, May 06, 2010 at 12:48:34PM -0400, Aristeu Rozanski wrote:
>> This patch has been around for a long time in Fedora and Red Hat Enterprise
>> Linux kernels and it may be useful for others. The nonint_oldconfig target
>> will fail and print the unset config options while loose_nonint_oldconfig will
>> simply let the config option unset. They're useful in distro kernel packages
>> where the config files are built using a combination of smaller config files.
>>
>> Arjan van de Ven wrote the initial nonint_config and Roland McGrath added the
>> loose_nonint_oldconfig.
>>
>> v2:
>> - when -B and -b are used, return "2" so the reason can be distinguished from
>>  other errors
>> v3:
>> - help updated
>> - nonint_oldconfig won't update the config file if options are missing
> 
> The patch looks fine, but, why the name 'nonint_oldconfig'?
> My English is not good enough to see what 'nonint' standards for...

non-interactive

-- 
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3)
  2010-05-07 14:28               ` Randy Dunlap
@ 2010-05-12  6:12                 ` Américo Wang
  0 siblings, 0 replies; 14+ messages in thread
From: Américo Wang @ 2010-05-12  6:12 UTC (permalink / raw)
  To: Randy Dunlap
  Cc: Américo Wang, Aristeu Rozanski, Michal Marek, linux-kbuild,
	linux-kernel, davej, kyle, vgoyal, arjan

On Fri, May 07, 2010 at 07:28:10AM -0700, Randy Dunlap wrote:
>On 05/07/10 00:02, Américo Wang wrote:
>> On Thu, May 06, 2010 at 12:48:34PM -0400, Aristeu Rozanski wrote:
>>> This patch has been around for a long time in Fedora and Red Hat Enterprise
>>> Linux kernels and it may be useful for others. The nonint_oldconfig target
>>> will fail and print the unset config options while loose_nonint_oldconfig will
>>> simply let the config option unset. They're useful in distro kernel packages
>>> where the config files are built using a combination of smaller config files.
>>>
>>> Arjan van de Ven wrote the initial nonint_config and Roland McGrath added the
>>> loose_nonint_oldconfig.
>>>
>>> v2:
>>> - when -B and -b are used, return "2" so the reason can be distinguished from
>>>  other errors
>>> v3:
>>> - help updated
>>> - nonint_oldconfig won't update the config file if options are missing
>> 
>> The patch looks fine, but, why the name 'nonint_oldconfig'?
>> My English is not good enough to see what 'nonint' standards for...
>
>non-interactive
>

Got it, thanks!

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3)
  2010-05-06 16:48           ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3) Aristeu Rozanski
  2010-05-07  7:02             ` Américo Wang
@ 2010-06-02 12:44             ` Michal Marek
  1 sibling, 0 replies; 14+ messages in thread
From: Michal Marek @ 2010-06-02 12:44 UTC (permalink / raw)
  To: Aristeu Rozanski
  Cc: Randy Dunlap, linux-kbuild, linux-kernel, davej, kyle, vgoyal,
	arjan

On 6.5.2010 18:48, Aristeu Rozanski wrote:
> This patch has been around for a long time in Fedora and Red Hat Enterprise
> Linux kernels and it may be useful for others. The nonint_oldconfig target
> will fail and print the unset config options while loose_nonint_oldconfig will
> simply let the config option unset. They're useful in distro kernel packages
> where the config files are built using a combination of smaller config files.
> 
> Arjan van de Ven wrote the initial nonint_config and Roland McGrath added the
> loose_nonint_oldconfig.
> 
> v2:
> - when -B and -b are used, return "2" so the reason can be distinguished from
>   other errors
> v3:
> - help updated
> - nonint_oldconfig won't update the config file if options are missing
> 
> Signed-off-by: Arjan van de Ven <arjan@redhat.com> [defunct email]
> Whatevered-by: Kyle McMartin <kyle@redhat.com>
> Acked-by: Arjan van de Ven <arjan@linux.intel.com>
> Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
> Signed-off-by: Aristeu Rozanski <aris@redhat.com>

Sorry for the delay. Applied now.

Michal

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2010-06-02 12:44 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-13 19:47 [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig Aristeu Rozanski
2010-04-13 20:00 ` Randy Dunlap
2010-04-13 20:18   ` Aristeu Rozanski
2010-04-13 20:24     ` Randy Dunlap
2010-04-13 20:44       ` Aristeu Rozanski
2010-04-13 21:03       ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v2) Aristeu Rozanski
2010-04-13 21:26         ` Kyle McMartin
2010-04-14 13:22         ` Michal Marek
2010-05-06 16:48           ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig (v3) Aristeu Rozanski
2010-05-07  7:02             ` Américo Wang
2010-05-07 14:28               ` Randy Dunlap
2010-05-12  6:12                 ` Américo Wang
2010-06-02 12:44             ` Michal Marek
2010-04-13 20:43 ` [PATCH] kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig Arjan van de Ven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).