Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 31 May 2012 00:36:56 +0000 (UTC)
From:      "David E. O'Brien" <obrien@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r236346 - head/usr.bin/make
Message-ID:  <201205310036.q4V0auQh094934@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: obrien
Date: Thu May 31 00:36:56 2012
New Revision: 236346
URL: http://svn.freebsd.org/changeset/base/236346

Log:
  Add "-V '${VAR}'" variable expansion from Portable Berkeley Make.
  
  Submitted by:	Simon Gerraty <sjg@juniper.net>

Modified:
  head/usr.bin/make/make.1
  head/usr.bin/make/var.c

Modified: head/usr.bin/make/make.1
==============================================================================
--- head/usr.bin/make/make.1	Wed May 30 23:42:48 2012	(r236345)
+++ head/usr.bin/make/make.1	Thu May 31 00:36:56 2012	(r236346)
@@ -320,6 +320,11 @@ Do not build any targets.
 Multiple instances of this option may be specified;
 the variables will be printed one per line,
 with a blank line for each null or undefined variable.
+If
+.Ar variable
+contains a
+.Sq Ic $
+then the value will be expanded before printing.
 .It Fl v
 Be extra verbose.
 Print any extra information.

Modified: head/usr.bin/make/var.c
==============================================================================
--- head/usr.bin/make/var.c	Wed May 30 23:42:48 2012	(r236345)
+++ head/usr.bin/make/var.c	Thu May 31 00:36:56 2012	(r236346)
@@ -2593,7 +2593,7 @@ void
 Var_Print(Lst *vlist, Boolean expandVars)
 {
 	LstNode		*n;
-	const char	*name;
+	char		*name;
 
 	LST_FOREACH(n, vlist) {
 		name = Lst_Datum(n);
@@ -2601,13 +2601,17 @@ Var_Print(Lst *vlist, Boolean expandVars
 			char *value;
 			char *v;
 
-			v = emalloc(strlen(name) + 1 + 3);
-			sprintf(v, "${%s}", name);
-
+			if (*name == '$') {
+				v = name;
+			} else {
+				v = emalloc(strlen(name) + 1 + 3);
+				sprintf(v, "${%s}", name);
+			}
 			value = Buf_Peel(Var_Subst(v, VAR_GLOBAL, FALSE));
 			printf("%s\n", value);
 
-			free(v);
+			if (v != name)
+				free(v);
 			free(value);
 		} else {
 			const char *value = Var_Value(name, VAR_GLOBAL);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205310036.q4V0auQh094934>