Subject: Re: make: extra debug info
To: None <tech-toolchain@netbsd.org>
From: Simon J. Gerraty <sjg@crufty.net>
List: tech-toolchain
Date: 07/11/2006 10:09:13
>The following changes proved useful while tracking down an odd
>makefile bug.
>Eg. when doing a complex set of modifiers - especially involving :?
>it can be very tedious to match the "Result is" lines up with the
>"Applying :%c" lines. This patch addresses that and
>also adds a clue as to how exists() is behaving in the case of say
>:@d@${exists(${d:S,foo,goo,}):?$d:${d:H:S,foo,goo,}}@
Of course I only included part of the patch ;-)
Repeated here. Unless anyone objects I'll commit this week.
Thanks
--sjg
Index: cond.c
===================================================================
RCS file: /cvsroot/src/usr.bin/make/cond.c,v
retrieving revision 1.32
diff -u -p -r1.32 cond.c
--- cond.c 22 Apr 2006 18:53:32 -0000 1.32
+++ cond.c 11 Jul 2006 16:06:06 -0000
@@ -420,6 +420,10 @@ CondDoExists(int argLen, char *arg)
result = FALSE;
}
arg[argLen] = savec;
+ if (DEBUG(COND)) {
+ printf("exists(%s) result is \"%s\"\n",
+ arg, path ? path : "");
+ }
return (result);
}
Index: main.c
===================================================================
RCS file: /cvsroot/src/usr.bin/make/main.c,v
retrieving revision 1.127
diff -u -p -r1.127 main.c
--- main.c 29 Jun 2006 22:02:06 -0000 1.127
+++ main.c 11 Jul 2006 16:06:06 -0000
@@ -1736,6 +1736,8 @@ PrintOnError(const char *s)
s = Var_Subst(NULL, tmp, VAR_GLOBAL, 0);
if (s && *s)
printf("%s", s);
+ if (s)
+ free(s);
}
void
Index: var.c
===================================================================
RCS file: /cvsroot/src/usr.bin/make/var.c,v
retrieving revision 1.111
diff -u -p -r1.111 var.c
--- var.c 29 Jun 2006 22:01:17 -0000 1.111
+++ var.c 11 Jul 2006 16:06:07 -0000
@@ -1989,6 +1989,7 @@ ApplyModifiers(char *nstr, const char *t
int cnt; /* Used to count brace pairs when variable in
* in parens or braces */
char delim;
+ int modifier; /* that we are processing */
Var_Parse_State parsestate; /* Flags passed to helper functions */
delim = '\0';
@@ -2040,7 +2041,7 @@ ApplyModifiers(char *nstr, const char *t
printf("Applying :%c to \"%s\"\n", *tstr, nstr);
}
newStr = var_Error;
- switch (*tstr) {
+ switch ((modifier = *tstr)) {
case ':':
{
if (tstr[1] == '=' ||
@@ -2937,7 +2938,7 @@ ApplyModifiers(char *nstr, const char *t
}
}
if (DEBUG(VAR)) {
- printf("Result is \"%s\"\n", newStr);
+ printf("Result of :%c is \"%s\"\n", modifier, newStr);
}
if (newStr != nstr) {