Module Name:    src
Committed By:   apb
Date:           Wed Oct 30 15:15:12 UTC 2013

Modified Files:
        src/etc: Makefile.params

Log Message:
Instead of stupid postprocessor tricks, use redirect tricks
to ensure that the output from ${PRINT_PARAMS} contains only
the desired information without any debugging noise.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/etc/Makefile.params

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/etc/Makefile.params
diff -u src/etc/Makefile.params:1.3 src/etc/Makefile.params:1.4
--- src/etc/Makefile.params:1.3	Fri Oct 18 11:42:59 2013
+++ src/etc/Makefile.params	Wed Oct 30 15:15:12 2013
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.params,v 1.3 2013/10/18 11:42:59 njoly Exp $
+#	$NetBSD: Makefile.params,v 1.4 2013/10/30 15:15:12 apb Exp $
 #
 # Makefile fragment for printing build parameters.
 #
@@ -7,7 +7,8 @@
 #		List of variables whose value should be printed.
 #
 #	PRINT_PARAMS
-#		A command to print the desired variables and values.
+#		A command to print the desired variables and values
+#		to stdout, without any additional debugging information.
 #		Values are printed as single-quoted strings, with
 #		embedded quotes and newlines escaped in a way that's
 #		acceptable to sh(1).  Undefined values are printed
@@ -15,15 +16,18 @@
 #
 # Internal targets:
 # 	_params:
-# 		Prints the names and values of all the variables
-# 		listed in ${RELEASEVARS}.  The output may be intermixed
-# 		with debugging information, which can be removed by the
-# 		${_PARAMS_POSTPROCESS} command.
+#		Prints the names and values of all the variables
+#		listed in ${RELEASEVARS}.  The desired results may be
+#		redirected somewhere other than stdout, for example by
+#		setting _params_redirect='>&3'.	 stdout and stderr may
+#		contain unwanted debugging information, from make and
+#		the shell.
 #
 # Internal variables:
-#	_PARAMS_POSTPROCESS
-#		A command to postprocess the output from "make _params",
-#		to remove debugging information and other noise.
+#	_params_redirect:
+#		If set, this should be a shell redirection specification, such
+#		as '>&3', controlling where the output from "make _params" will
+#		be sent.
 #
 # Example:
 #	. ${NETBSDSRCDIR}/etc/Makefile.params
@@ -31,8 +35,6 @@
 #		@${PRINT_PARAMS}
 #
 
-.include <bsd.sys.mk>		# for TOOL_AWK, ...
-
 RELEASEVARS=	BSDOBJDIR BSDSRCDIR BUILDID \
 		DESTDIR DISTRIBVER EXTERNAL_TOOLCHAIN HAVE_GCC HAVE_GDB \
 		HAVE_LLVM HAVE_PCC INSTALLWORLDDIR \
@@ -59,23 +61,25 @@ RELEASEVARS=	BSDOBJDIR BSDSRCDIR BUILDID
 		USETOOLS USR_OBJMACHINE \
 		X11SRCDIR X11FLAVOUR
 
-PRINT_PARAMS= (cd ${.CURDIR}; ${MAKE} _params) | ${_PARAMS_POSTPROCESS}
+_params_redirect?= # empty
 
 _params: .PHONY
 .for var in ${RELEASEVARS}
 .if defined(${var})
-	@printf "%20s = '%-s'\n" ${var} ${${var}:C/'/'\\\\''/gW:Q}
+	@printf "%20s = '%-s'\n" ${var} ${${var}:C/'/'\\\\''/gW:Q} \
+	    ${_params_redirect}
 .else
-	@printf "%20s = (undefined)\n" ${var}
+	@printf >&3 "%20s = (undefined)\n" ${var} \
+	    ${_params_redirect}
 .endif
 .endfor
 
-# _PARAMS_POSTPROCESS:
+# PRINT_PARAMS:
 #
 # The output from the "make _params" can include the following types of
 # unwanted lines:
 #
-#     make -j prints "--- params ---";
+#     make -j prints "--- _params ---";
 #
 #     if MAKEVERBOSE is set to 3 or more then make prints each "printf"
 #     command in addition to executing it;
@@ -85,7 +89,7 @@ _params: .PHONY
 #
 # So the resulting output can look like this:
 #
-#	--- params ---
+#	--- _params ---
 #	+ echo 'printf "%20s = '\''%-s'\''\n" BSDOBJDIR /usr/obj'
 #	printf "%20s = '%-s'\n" BSDOBJDIR /usr/obj
 #	+ printf '%20s = '\''%-s'\''\n' BSDOBJDIR /usr/obj
@@ -102,49 +106,11 @@ _params: .PHONY
 #	           BSDSRCDIR = '/usr/src'
 #	           [...]
 #
-# The awk program in ${PARAMS_POSTPROCESS} removes the unwanted noise,
-# taking care with variables whose values contain embedded newlines
-# (assuming that embedded newlines appear only inside single quotes).
-#
-_PARAMS_POSTPROCESS= ${TOOL_AWK} '\
-	BEGIN { single_quote = "'\''"; \
-		NORMAL = 0; \
-		SKIP_HEADING = 1; \
-		SKIP_MULTILINE = 2; \
-		PRINT_MULTILINE = 3; \
-		state = SKIP_HEADING; \
-	} \
-	function quotes_balanced_p(line) { \
-		return (line ~ /^([^\\"'\'']|\\.|'\''[^'\'']*'\''|"(\\.|[^\\"])*")*$$/); \
-	} \
-	state == SKIP_MULTILINE { \
-		if (quotes_balanced_p(single_quote $$0)) { \
-			state = NORMAL; \
-		} \
-		next; \
-	} \
-	state == PRINT_MULTILINE { \
-		if (quotes_balanced_p(single_quote $$0)) { \
-			state = NORMAL; \
-		} \
-		print; next; \
-	} \
-	state == SKIP_HEADING && $$0 ~ /^--- .* ---$$/ { next; } \
-	state == SKIP_HEADING && $$0 ~ / ===> / { next; } \
-	/^(\+ )?(echo ["'\''])?printf.* = / { \
-		if (quotes_balanced_p($$0)) { \
-			state = NORMAL; \
-		} else { \
-			state = SKIP_MULTILINE; \
-		} \
-		next; \
-	} \
-	// { \
-		if (quotes_balanced_p($$0)) { \
-			state = NORMAL; \
-		} else { \
-			state = PRINT_MULTILINE; \
-		} \
-		print; next; \
-	} \
-	'
+# The shell redirections in ${PRINT_PARAMS} ensure that the unwanted
+# noise is discarded (via ">/dev/null"), while the desired information
+# ends up on the subshell's stdout (via ">&3" and "3>&1").  The value
+# of _params_redirect is passed in the environment instead of on the
+# command line, to prevent it from appearing in MAKEFLAGS (which would
+# appear in the output).
+#
+PRINT_PARAMS:=	(_params_redirect='>&3' ${MAKE} -f ${.PARSEDIR:Q}/${.PARSEFILE:Q} _params 3>&1 >/dev/null)

Reply via email to