Well, I've got a prototype up and running and IMHO it's quite cool.
All changes are in function.c. The net of the changes are:
* Added support for:
$(xargs command, list)
which is expanded to:
cat <tmpfile> | xargs command; rm -f <tmpfile>
* Added 'func_xargs' as shown below:
static int xargs_file_count = 0;
static char *
func_xargs(o, argv, funcname)
char *o;
char **argv;
const char* funcname;
{
char buff[256];
char filename[256];
FILE* fd;
sprintf (filename, "/tmp/gnumake.%d.%d.xargs", getpid(), xargs_file_count++);
fd = fopen(filename, "w");
fprintf(fd, "%s\n", argv[1]);
fclose(fd);
sprintf (buff, "cat %s | xargs ", filename);
o = variable_buffer_output(o, buff, strlen(buff));
o = variable_buffer_output(o, argv[0], strlen(argv[0]));
sprintf (buff, "; rm -f %s", filename);
o = variable_buffer_output(o, buff, strlen(buff));
return o;
}
This works perfectly! Well at least it works perfectly within my limited
understanding of GNUmake.
Additional considerations:
* On machines with dynamic command lines (i.e., Solaris), the $(xargs)
function should just expand to:
command list
No need for xargs in those cases.
* Allowing user definition of the XARGS command and options. Something like:
XARGS = myxargs
XARGS_OPTIONS = -blah -blah...
with the defaults being:
XARGS = xargs
XARGS_OPTIONS =
Let me know if you want to integrate this. Personally, I see this as a very
useful extension to GNUmake.
Regards,
Reid Madsen
--
Reid Madsen [EMAIL PROTECTED]
Senior Member, Tech. Staff (972) 536-3261 (Desk)
I2 Technologies (214) 850-9613 (Cellular)
--
Making incrementally (without 'clean') since May 18, 2000.
Long live incremental make!
_______________________________________________
Bug-make mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-make