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)