From 73287a0b22a0feec743bd3266acca019103f21df Mon Sep 17 00:00:00 2001 From: rillig Date: Sun, 13 Dec 2020 18:57:44 +0000 Subject: [PATCH] make(1): document variable expansion in the .END node --- usr.bin/make/compat.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/usr.bin/make/compat.c b/usr.bin/make/compat.c index f2319b33c72b..6612ae17a7d8 100644 --- a/usr.bin/make/compat.c +++ b/usr.bin/make/compat.c @@ -1,4 +1,4 @@ -/* $NetBSD: compat.c,v 1.213 2020/12/13 18:12:29 christos Exp $ */ +/* $NetBSD: compat.c,v 1.214 2020/12/13 18:57:44 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -96,7 +96,7 @@ #include "pathnames.h" /* "@(#)compat.c 8.2 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: compat.c,v 1.213 2020/12/13 18:12:29 christos Exp $"); +MAKE_RCSID("$NetBSD: compat.c,v 1.214 2020/12/13 18:57:44 rillig Exp $"); static GNode *curTarg = NULL; static pid_t compatChild; @@ -258,6 +258,17 @@ Compat_RunCommand(const char *cmdp, GNode *gn) if (gn->type & OP_SAVE_CMDS) { GNode *endNode = Targ_GetEndNode(); if (gn != endNode) { + /* + * Append the expanded command, to prevent the + * local variables from being interpreted in the + * context of the .END node. + * + * A probably unintended side effect of this is that + * the expanded command will be expanded again in the + * .END node. Therefore, a literal '$' in these + * commands must be written as '$$$$' instead of the + * usual '$$'. + */ Lst_Append(&endNode->commands, cmdStart); return 0; }