Module Name:    src
Committed By:   sjg
Date:           Wed Feb  1 18:39:27 UTC 2017

Modified Files:
        src/usr.bin/make: make.1 var.c

Log Message:
Since we are avoiding VAR_INTERNAL, allow the variable :_ stores to
to be specified, also allows for multiple stages of modification to
be stashed.


To generate a diff of this commit:
cvs rdiff -u -r1.265 -r1.266 src/usr.bin/make/make.1
cvs rdiff -u -r1.212 -r1.213 src/usr.bin/make/var.c

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

Modified files:

Index: src/usr.bin/make/make.1
diff -u src/usr.bin/make/make.1:1.265 src/usr.bin/make/make.1:1.266
--- src/usr.bin/make/make.1:1.265	Mon Jan 30 02:46:20 2017
+++ src/usr.bin/make/make.1	Wed Feb  1 18:39:27 2017
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.265 2017/01/30 02:46:20 sjg Exp $
+.\"	$NetBSD: make.1,v 1.266 2017/02/01 18:39:27 sjg Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	from: @(#)make.1	8.4 (Berkeley) 3/19/94
 .\"
-.Dd January 29, 2017
+.Dd February 1, 2017
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -1425,24 +1425,22 @@ For example.
 .Pp
 However a single character variable is often more readable:
 .Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
-.It Cm \&:_
+.It Cm \&:_[=var]
 Save the current variable value in
 .Ql $_
+or the named
+.Va var
 for later reference.
-This
-.Ql $_
-is internal to the variable modifier processing and
-will not conflict with any set in a makefile.
 Example usage:
 .Bd -literal -offset indent
-M_cmpv.units = 1 100 10000
+M_cmpv.units = 1 1000 1000000
 M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \&\\
 \\* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh
 
 .Dv .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}}
 
 .Ed
-Here the 
+Here
 .Ql $_
 is used to save the result of the
 .Ql :S

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.212 src/usr.bin/make/var.c:1.213
--- src/usr.bin/make/var.c:1.212	Wed Feb  1 18:00:14 2017
+++ src/usr.bin/make/var.c	Wed Feb  1 18:39:27 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.212 2017/02/01 18:00:14 sjg Exp $	*/
+/*	$NetBSD: var.c,v 1.213 2017/02/01 18:39:27 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.212 2017/02/01 18:00:14 sjg Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.213 2017/02/01 18:39:27 sjg Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)var.c	8.3 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: var.c,v 1.212 2017/02/01 18:00:14 sjg Exp $");
+__RCSID("$NetBSD: var.c,v 1.213 2017/02/01 18:39:27 sjg Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -2742,11 +2742,24 @@ ApplyModifiers(char *nstr, const char *t
 		break;
 	    }
 	case '_':			/* remember current value */
-	    if CHARMOD_MATCH(tstr[1]) {
-		Var_Set("_", nstr, ctxt, 0);
+	    cp = tstr + 1;	/* make sure it is set */
+	    if (STRMOD_MATCHX(tstr, "_", 1)) {
+		if (tstr[1] == '=') {
+		    char *np;
+		    int n;
+
+		    cp++;
+		    n = strcspn(cp, ":)}");
+		    np = bmake_strndup(cp, n+1);
+		    np[n] = '\0';
+		    cp = tstr + 2 + n;
+		    Var_Set(np, nstr, ctxt, 0);
+		    free(np);
+		} else {
+		    Var_Set("_", nstr, ctxt, 0);
+		}
 		newStr = nstr;
-		cp = ++tstr;
-		termc = *tstr;
+		termc = *cp;
 		break;
 	    }
 	    goto default_case;

Reply via email to