diff mbox

[2/2] kconfig: Do not print status messages in make -s mode

Message ID 1428493376-20197-2-git-send-email-mmarek@suse.cz (mailing list archive)
State New, archived
Headers show

Commit Message

Michal Marek April 8, 2015, 11:42 a.m. UTC
Add an -s option to the conf, mconf, qconf and gconf frontends and pass
it when make -s is used. Also, use $(kecho) instead of @echo in the
Makefile.

Signed-off-by: Michal Marek <mmarek@suse.cz>
---
 scripts/kconfig/Makefile | 38 +++++++++++++++++++++-----------------
 scripts/kconfig/conf.c   |  8 ++++++--
 scripts/kconfig/gconf.c  |  5 ++++-
 scripts/kconfig/mconf.c  | 29 +++++++++++++++++++----------
 scripts/kconfig/qconf.cc |  5 ++++-
 5 files changed, 54 insertions(+), 31 deletions(-)

Comments

Paul Bolle April 9, 2015, 12:47 p.m. UTC | #1
On Wed, 2015-04-08 at 13:42 +0200, Michal Marek wrote:
> Add an -s option to the conf, mconf, qconf and gconf frontends and pass
> it when make -s is used.

Basically this suppresses everything except warning and errors,
correct? 

I don't actually use nconf. Is it already silent?

>  Also, use $(kecho) instead of @echo in the
> Makefile.

(I had to look up $(kecho). I found:
    ###
    # Easy method for doing a status message
           kecho := :
     quiet_kecho := echo
    silent_kecho := :
    kecho := $($(quiet)kecho)

I'm not fluent in Makefilese. What does it provide beyond @echo?)

> --- a/scripts/kconfig/conf.c
> +++ b/scripts/kconfig/conf.c
> @@ -471,7 +471,7 @@ static struct option long_opts[] = {
>  static void conf_usage(const char *progname)
>  {
>  
> -	printf("Usage: %s [option] <kconfig-file>\n", progname);
> +	printf("Usage: %s [-s] [option] <kconfig-file>\n", progname);
>  	printf("[option] is _one_ of the following:\n");
>  	printf("  --listnewconfig         List new options\n");
>  	printf("  --oldaskconfig          Start a new configuration using a line-oriented program\n");
> @@ -501,7 +501,11 @@ int main(int ac, char **av)
>  
>  	tty_stdio = isatty(0) && isatty(1) && isatty(2);
>  
> -	while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
> +	while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) {
> +		if (opt == 's') {
> +			conf_set_message_callback(NULL);
> +			continue;
> +		}
>  		input_mode = (enum input_mode)opt;
>  		switch (opt) {
>  		case silentoldconfig:
> diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c
> index 344b9e3..26d208b 100644
> --- a/scripts/kconfig/gconf.c
> +++ b/scripts/kconfig/gconf.c
> @@ -1474,9 +1474,12 @@ int main(int ac, char *av[])
>  		case 'a':
>  			//showAll = 1;
>  			break;
> +		case 's':
> +			conf_set_message_callback(NULL);
> +			break;
>  		case 'h':
>  		case '?':
> -			printf("%s <config>\n", av[0]);
> +			printf("%s [-s] <config>\n", av[0]);
>  			exit(0);
>  		}
>  		name = av[2];
> diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
> index 4dd3755..01070f0 100644
> --- a/scripts/kconfig/mconf.c
> +++ b/scripts/kconfig/mconf.c
> @@ -279,6 +279,7 @@ static int child_count;
>  static int single_menu_mode;
>  static int show_all_options;
>  static int save_and_exit;
> +static int silent;
>  
>  static void conf(struct menu *menu, struct menu *active_menu);
>  static void conf_choice(struct menu *menu);
> @@ -777,10 +778,12 @@ static void conf_message_callback(const char *fmt, va_list ap)
>  	char buf[PATH_MAX+1];
>  
>  	vsnprintf(buf, sizeof(buf), fmt, ap);
> -	if (save_and_exit)
> -		printf("%s", buf);
> -	else
> +	if (save_and_exit) {
> +		if (!silent)
> +			printf("%s", buf);
> +	} else {
>  		show_textbox(NULL, buf, 6, 60);
> +	}
>  }
>  
>  static void show_help(struct menu *menu)

The patch adds this :
    conf_set_message_callback(NULL);

for conf, gconf, and qconf. That won't work for mconf?

> @@ -977,16 +980,18 @@ static int handle_exit(void)
>  		}
>  		/* fall through */
>  	case -1:
> -		printf(_("\n\n"
> -			 "*** End of the configuration.\n"
> -			 "*** Execute 'make' to start the build or try 'make help'."
> -			 "\n\n"));
> +		if (!silent)
> +			printf(_("\n\n"
> +				 "*** End of the configuration.\n"
> +				 "*** Execute 'make' to start the build or try 'make help'."
> +				 "\n\n"));
>  		res = 0;
>  		break;
>  	default:
> -		fprintf(stderr, _("\n\n"
> -				  "Your configuration changes were NOT saved."
> -				  "\n\n"));
> +		if (!silent)
> +			fprintf(stderr, _("\n\n"
> +					  "Your configuration changes were NOT saved."
> +					  "\n\n"));
>  		if (res != KEY_ESC)
>  			res = 0;
>  	}
> @@ -1010,6 +1015,10 @@ int main(int ac, char **av)
>  
>  	signal(SIGINT, sig_handler);
>  
> +	if (ac > 1 && strcmp(av[1], "-s") == 0) {
> +		silent = 1;
> +		av++;
> +	}
>  	conf_parse(av[1]);
>  	conf_read(NULL);
>  
> diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc
> index 9d3b04b..c3bb7fe 100644
> --- a/scripts/kconfig/qconf.cc
> +++ b/scripts/kconfig/qconf.cc
> @@ -1746,7 +1746,7 @@ static const char *progname;
>  
>  static void usage(void)
>  {
> -	printf(_("%s <config>\n"), progname);
> +	printf(_("%s [-s] <config>\n"), progname);
>  	exit(0);
>  }
>  
> @@ -1762,6 +1762,9 @@ int main(int ac, char** av)
>  	configApp = new QApplication(ac, av);
>  	if (ac > 1 && av[1][0] == '-') {
>  		switch (av[1][1]) {
> +		case 's':
> +			conf_set_message_callback(NULL);
> +			break;
>  		case 'h':
>  		case '?':
>  			usage();


Paul Bolle

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek April 9, 2015, 12:58 p.m. UTC | #2
On 2015-04-09 14:47, Paul Bolle wrote:
> On Wed, 2015-04-08 at 13:42 +0200, Michal Marek wrote:
>> Add an -s option to the conf, mconf, qconf and gconf frontends and pass
>> it when make -s is used.
> 
> Basically this suppresses everything except warning and errors,
> correct? 

Yes, that's what make -s is expected to do.


> I don't actually use nconf. Is it already silent?

Yes.


> (I had to look up $(kecho). I found:
>     ###
>     # Easy method for doing a status message
>            kecho := :
>      quiet_kecho := echo
>     silent_kecho := :
>     kecho := $($(quiet)kecho)
> 
> I'm not fluent in Makefilese. What does it provide beyond @echo?)

See Documentation/kbuild/makefiles.txt.


> The patch adds this :
>     conf_set_message_callback(NULL);
> 
> for conf, gconf, and qconf. That won't work for mconf?

Have you tried looking at the mconf code? It sets a message callback to
display ncurses dialogs.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Paul Bolle April 9, 2015, 2:58 p.m. UTC | #3
On Thu, 2015-04-09 at 14:58 +0200, Michal Marek wrote:
> On 2015-04-09 14:47, Paul Bolle wrote:
> > The patch adds this :
> >     conf_set_message_callback(NULL);
> > 
> > for conf, gconf, and qconf. That won't work for mconf?
> 
> Have you tried looking at the mconf code? It sets a message callback to
> display ncurses dialogs.

I see.

mconf sets that callback after it has already done a few things. So
"make -s menuconfig" without a .config will do
    main()
        conf_read(NULL)
            conf_read_simple([...])
                conf_message(_("using defaults found in %s"), [...])
                     conf_message_callback()

and at that point conf_message_callback() still points to
conf_default_message_callback(). This default uses stdout. So I think I
stumbled on a cornercase where one message still can be printed to
stdout. Shocking!

Neither conf nor gconf or qconf (assuming GTK and Qt are silent, that
is) seem to do anything serious before setting that callback, so I don't
expect there to be more messages that can break the silence.

Thanks,


Paul Bolle

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 1f5e453..75e3aed 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -11,27 +11,31 @@  else
 Kconfig := Kconfig
 endif
 
+ifeq ($(quiet),silent_)
+silent := -s
+endif
+
 # We need this, in case the user has it in its environment
 unexport CONFIG_
 
 xconfig: $(obj)/qconf
-	$< $(Kconfig)
+	$< $(silent) $(Kconfig)
 
 gconfig: $(obj)/gconf
-	$< $(Kconfig)
+	$< $(silent) $(Kconfig)
 
 menuconfig: $(obj)/mconf
-	$< $(Kconfig)
+	$< $(silent) $(Kconfig)
 
 config: $(obj)/conf
-	$< --oldaskconfig $(Kconfig)
+	$< $(silent) --oldaskconfig $(Kconfig)
 
 nconfig: $(obj)/nconf
 	$< $(Kconfig)
 
 silentoldconfig: $(obj)/conf
 	$(Q)mkdir -p include/config include/generated
-	$< --$@ $(Kconfig)
+	$< $(silent) --$@ $(Kconfig)
 
 localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
 	$(Q)mkdir -p include/config include/generated
@@ -40,18 +44,18 @@  localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
 			cmp -s .tmp.config .config ||			\
 			(mv -f .config .config.old.1;			\
 			 mv -f .tmp.config .config;			\
-			 $(obj)/conf --silentoldconfig $(Kconfig);	\
+			 $(obj)/conf $(silent) --silentoldconfig $(Kconfig); \
 			 mv -f .config.old.1 .config.old)		\
 	else								\
 			mv -f .tmp.config .config;			\
-			$(obj)/conf --silentoldconfig $(Kconfig);	\
+			$(obj)/conf $(silent) --silentoldconfig $(Kconfig); \
 	fi
 	$(Q)rm -f .tmp.config
 
 # Create new linux.pot file
 # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
 update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
-	$(Q)echo "  GEN     config.pot"
+	$(Q)$(kecho) "  GEN     config.pot"
 	$(Q)xgettext --default-domain=linux                         \
 	    --add-comments --keyword=_ --keyword=N_                 \
 	    --from-code=UTF-8                                       \
@@ -62,11 +66,11 @@  update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
 	$(Q)(for i in `ls $(srctree)/arch/*/Kconfig      \
 	    $(srctree)/arch/*/um/Kconfig`;               \
 	    do                                           \
-		echo "  GEN     $$i";                    \
+		$(kecho) "  GEN     $$i";                    \
 		$(obj)/kxgettext $$i                     \
 		     >> $(obj)/config.pot;               \
 	    done )
-	$(Q)echo "  GEN     linux.pot"
+	$(Q)$(kecho) "  GEN     linux.pot"
 	$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
 	    --output $(obj)/linux.pot
 	$(Q)rm -f $(obj)/config.pot
@@ -77,7 +81,7 @@  simple-targets := oldconfig allnoconfig allyesconfig allmodconfig \
 PHONY += $(simple-targets)
 
 $(simple-targets): $(obj)/conf
-	$< --$@ $(Kconfig)
+	$< $(silent) --$@ $(Kconfig)
 
 PHONY += oldnoconfig savedefconfig defconfig
 
@@ -87,18 +91,18 @@  PHONY += oldnoconfig savedefconfig defconfig
 oldnoconfig: olddefconfig
 
 savedefconfig: $(obj)/conf
-	$< --$@=defconfig $(Kconfig)
+	$< $(silent) --$@=defconfig $(Kconfig)
 
 defconfig: $(obj)/conf
 ifeq ($(KBUILD_DEFCONFIG),)
-	$< --defconfig $(Kconfig)
+	$< $(silent) --defconfig $(Kconfig)
 else
-	@echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
-	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
+	@$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
+	$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
 endif
 
 %_defconfig: $(obj)/conf
-	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
+	$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
 
 configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)
 
@@ -215,7 +219,7 @@  $(obj)/.tmp_qtcheck: $(src)/Makefile
 
 # QT needs some extra effort...
 $(obj)/.tmp_qtcheck:
-	@set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
+	@set -e; $(kecho) "  CHECK   qt"; dir=""; pkg=""; \
 	if ! pkg-config --exists QtCore 2> /dev/null; then \
 	    echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
 	    pkg-config --exists qt 2> /dev/null && pkg=qt; \
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index fef75fc..6c20431 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -471,7 +471,7 @@  static struct option long_opts[] = {
 static void conf_usage(const char *progname)
 {
 
-	printf("Usage: %s [option] <kconfig-file>\n", progname);
+	printf("Usage: %s [-s] [option] <kconfig-file>\n", progname);
 	printf("[option] is _one_ of the following:\n");
 	printf("  --listnewconfig         List new options\n");
 	printf("  --oldaskconfig          Start a new configuration using a line-oriented program\n");
@@ -501,7 +501,11 @@  int main(int ac, char **av)
 
 	tty_stdio = isatty(0) && isatty(1) && isatty(2);
 
-	while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
+	while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) {
+		if (opt == 's') {
+			conf_set_message_callback(NULL);
+			continue;
+		}
 		input_mode = (enum input_mode)opt;
 		switch (opt) {
 		case silentoldconfig:
diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c
index 344b9e3..26d208b 100644
--- a/scripts/kconfig/gconf.c
+++ b/scripts/kconfig/gconf.c
@@ -1474,9 +1474,12 @@  int main(int ac, char *av[])
 		case 'a':
 			//showAll = 1;
 			break;
+		case 's':
+			conf_set_message_callback(NULL);
+			break;
 		case 'h':
 		case '?':
-			printf("%s <config>\n", av[0]);
+			printf("%s [-s] <config>\n", av[0]);
 			exit(0);
 		}
 		name = av[2];
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 4dd3755..01070f0 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -279,6 +279,7 @@  static int child_count;
 static int single_menu_mode;
 static int show_all_options;
 static int save_and_exit;
+static int silent;
 
 static void conf(struct menu *menu, struct menu *active_menu);
 static void conf_choice(struct menu *menu);
@@ -777,10 +778,12 @@  static void conf_message_callback(const char *fmt, va_list ap)
 	char buf[PATH_MAX+1];
 
 	vsnprintf(buf, sizeof(buf), fmt, ap);
-	if (save_and_exit)
-		printf("%s", buf);
-	else
+	if (save_and_exit) {
+		if (!silent)
+			printf("%s", buf);
+	} else {
 		show_textbox(NULL, buf, 6, 60);
+	}
 }
 
 static void show_help(struct menu *menu)
@@ -977,16 +980,18 @@  static int handle_exit(void)
 		}
 		/* fall through */
 	case -1:
-		printf(_("\n\n"
-			 "*** End of the configuration.\n"
-			 "*** Execute 'make' to start the build or try 'make help'."
-			 "\n\n"));
+		if (!silent)
+			printf(_("\n\n"
+				 "*** End of the configuration.\n"
+				 "*** Execute 'make' to start the build or try 'make help'."
+				 "\n\n"));
 		res = 0;
 		break;
 	default:
-		fprintf(stderr, _("\n\n"
-				  "Your configuration changes were NOT saved."
-				  "\n\n"));
+		if (!silent)
+			fprintf(stderr, _("\n\n"
+					  "Your configuration changes were NOT saved."
+					  "\n\n"));
 		if (res != KEY_ESC)
 			res = 0;
 	}
@@ -1010,6 +1015,10 @@  int main(int ac, char **av)
 
 	signal(SIGINT, sig_handler);
 
+	if (ac > 1 && strcmp(av[1], "-s") == 0) {
+		silent = 1;
+		av++;
+	}
 	conf_parse(av[1]);
 	conf_read(NULL);
 
diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc
index 9d3b04b..c3bb7fe 100644
--- a/scripts/kconfig/qconf.cc
+++ b/scripts/kconfig/qconf.cc
@@ -1746,7 +1746,7 @@  static const char *progname;
 
 static void usage(void)
 {
-	printf(_("%s <config>\n"), progname);
+	printf(_("%s [-s] <config>\n"), progname);
 	exit(0);
 }
 
@@ -1762,6 +1762,9 @@  int main(int ac, char** av)
 	configApp = new QApplication(ac, av);
 	if (ac > 1 && av[1][0] == '-') {
 		switch (av[1][1]) {
+		case 's':
+			conf_set_message_callback(NULL);
+			break;
 		case 'h':
 		case '?':
 			usage();