On Fri, 2007-10-12 at 19:01 +0200, Eli Zaretskii wrote:
> > And if it's expanded right here then won't the automatic variables like
> > $@, $^, and $? not be set yet?
>
> Yes. That is why the modified patch below installs the original
> value, not the expanded one (as the original patch mistakenly did).
Ah! That makes more sense to me. Thanks!
> Btw, I wonder whether I should recursively_expand the value, not just
> expand it once, in case the first expansion still yields variables
> and/or functions. WDYT?
All expansion in make is recursive; there's no such thing as an
expansion that just does "the first level". It already does what you'd
expect, as far as I can see, just by using allocated_variable_expand().
> Oh, and I think there's no memory leak introduced by the patch,
> because do_variable_definition does this just before it returns:
>
> if (alloc_value)
> free (alloc_value);
True, but before that happens you drop whatever memory alloc_value is
set to, here:
> + else if (find_and_set_default_shell (alloc_value =
> allocated_variable_expand (p)))
so that's the memory leak. But, I fixed this and applied this patch;
let me know if I messed something up:
2007-10-12 Eli Zaretskii <[EMAIL PROTECTED]>
* variable.c (do_variable_definition): Allow $(SHELL) to expand to
a more complex value than a simple shell: if it's not a default
shell now then expand it and see if is a default shell then.
--
-------------------------------------------------------------------------------
Paul D. Smith <[EMAIL PROTECTED]> Find some GNU make tips at:
http://www.gnu.org http://make.mad-scientist.us
"Please remain calm...I may be mad, but I am a professional." --Mad Scientist
Index: variable.c
===================================================================
RCS file: /sources/make/make/variable.c,v
retrieving revision 1.92
diff -u -r1.92 variable.c
--- variable.c 4 Jul 2007 19:35:20 -0000 1.92
+++ variable.c 13 Oct 2007 01:23:37 -0000
@@ -1188,7 +1188,24 @@
no_default_sh_exe = 0;
}
else
- v = lookup_variable (varname, strlen (varname));
+ {
+ if (alloc_value)
+ free (alloc_value);
+
+ alloc_value = allocated_variable_expand (p);
+ if (find_and_set_default_shell (alloc_value))
+ {
+ v = define_variable_in_set (varname, strlen (varname), p,
+ origin, flavor == f_recursive,
+ (target_var
+ ? current_variable_set_list->set
+ : NULL),
+ flocp);
+ no_default_sh_exe = 0;
+ }
+ else
+ v = lookup_variable (varname, strlen (varname));
+ }
}
else
#endif
_______________________________________________
Make-w32 mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/make-w32