Module Name:    src
Committed By:   sjg
Date:           Sat Feb 20 01:19:03 UTC 2016

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

Log Message:
Add a knob .MAKE.SAVE_DOLLARS to control the behavior of $$ during :=

If TRUE '$$' are not consumed (saved).
If FALSE '$$' becomes '$' just like normal expansion rules.

default is TRUE.

Reviewed by: christos


To generate a diff of this commit:
cvs rdiff -u -r1.252 -r1.253 src/usr.bin/make/make.1
cvs rdiff -u -r1.204 -r1.205 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.252 src/usr.bin/make/make.1:1.253
--- src/usr.bin/make/make.1:1.252	Thu Feb 18 20:25:08 2016
+++ src/usr.bin/make/make.1	Sat Feb 20 01:19:03 2016
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.252 2016/02/18 20:25:08 sjg Exp $
+.\"	$NetBSD: make.1,v 1.253 2016/02/20 01:19:03 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 February 18, 2016
+.Dd February 19, 2016
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -941,6 +941,18 @@ The process-id of
 .It Va .MAKE.PPID
 The parent process-id of
 .Nm .
+.It Va .MAKE.SAVE_DOLLARS
+value should be a boolen that controls wether
+.Ql $$
+are preserved when doing
+.Ql :=
+assignments.
+The default is true, for compatability with other makes.
+If set to false,
+.Ql $$
+becomes
+.Ql $
+per normal evaluation rules.
 .It Va MAKE_PRINT_VAR_ON_ERROR
 When
 .Nm

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.204 src/usr.bin/make/var.c:1.205
--- src/usr.bin/make/var.c:1.204	Thu Feb 18 23:33:25 2016
+++ src/usr.bin/make/var.c	Sat Feb 20 01:19:03 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.204 2016/02/18 23:33:25 sjg Exp $	*/
+/*	$NetBSD: var.c,v 1.205 2016/02/20 01:19:03 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.204 2016/02/18 23:33:25 sjg Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.205 2016/02/20 01:19:03 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.204 2016/02/18 23:33:25 sjg Exp $");
+__RCSID("$NetBSD: var.c,v 1.205 2016/02/20 01:19:03 sjg Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -162,6 +162,16 @@ char 	var_Error[] = "";
 static char	varNoError[] = "";
 
 /*
+ * Traditionally we consume $$ during := like any other expansion.
+ * Other make's do not.
+ * This knob allows controlling the behavior.
+ * FALSE for old behavior.
+ * TRUE for new compatible.
+ */
+#define SAVE_DOLLARS ".MAKE.SAVE_DOLLARS"
+static Boolean save_dollars = TRUE;
+
+/*
  * Internally, variables are contained in four different contexts.
  *	1) the environment. They may not be changed. If an environment
  *	    variable is appended-to, the result is placed in the global
@@ -992,7 +1002,11 @@ Var_Set(const char *name, const char *va
 
 	Var_Append(MAKEOVERRIDES, name, VAR_GLOBAL);
     }
-	
+    if (*name == '.') {
+	if (strcmp(name, SAVE_DOLLARS) == 0)
+	    save_dollars = s2Boolean(val, save_dollars);
+    }
+
  out:
     free(expanded_name);
     if (v != NULL)
@@ -3989,7 +4003,7 @@ Var_Subst(const char *var, const char *s
 	     * In such a case, we skip over the escape character and store the
 	     * dollar sign into the buffer directly.
 	     */
-	    if (flags & VARF_ASSIGN)
+	    if (save_dollars && (flags & VARF_ASSIGN))
 		Buf_AddByte(&buf, *str);
 	    str++;
 	    Buf_AddByte(&buf, *str);

Reply via email to