summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2012-05-31 00:36:56 +0000
committerobrien <obrien@FreeBSD.org>2012-05-31 00:36:56 +0000
commit0a0b64846677c0b6ca231245db078844282ad05d (patch)
treeb1ba2d47fe68ed98009dc79572005fd2b21ea789
parente58f0a7d2ffac924d6141bd8fe6b68ac99118d3a (diff)
downloadFreeBSD-src-0a0b64846677c0b6ca231245db078844282ad05d.zip
FreeBSD-src-0a0b64846677c0b6ca231245db078844282ad05d.tar.gz
Add "-V '${VAR}'" variable expansion from Portable Berkeley Make.
Submitted by: Simon Gerraty <sjg@juniper.net>
-rw-r--r--usr.bin/make/make.15
-rw-r--r--usr.bin/make/var.c14
2 files changed, 14 insertions, 5 deletions
diff --git a/usr.bin/make/make.1 b/usr.bin/make/make.1
index fc91f3c..d15428b 100644
--- a/usr.bin/make/make.1
+++ b/usr.bin/make/make.1
@@ -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.
diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c
index 341ee79..477c4a9 100644
--- a/usr.bin/make/var.c
+++ b/usr.bin/make/var.c
@@ -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);
OpenPOWER on IntegriCloud