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 <s...@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);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to