--- make-3.80/function.c.orig 2002-10-04 05:13:42.000000000 +0300 +++ make-3.80/function.c 2003-03-15 19:05:57.000000000 +0200 @@ -1750,6 +1750,47 @@ #endif /* _AMIGA */ #endif /* !VMS */ +/* + Apply VPATH to each word + */ +static char * +func_vpath(char *o, char **argv, char *funcname) +{ + char *list_iterator = argv[0]; + char *p; + int doneany = 0; + unsigned int len; + + while ((p = find_next_token(&list_iterator, &len)) != 0) + { + char *ep = p + len; + char c = *ep; + + /* String needs to be zero terminated for vpath_search() */ + *ep ='\0'; + if (vpath_search(&p, NULL)) + { + /* Found name in VPATH, memory allocated for new name */ + o = variable_buffer_output (o, p, strlen(p)); + free(p); + } + else + { + o = variable_buffer_output (o, p, len); + } + o = variable_buffer_output (o, " ", 1); + doneany = 1; + + /* Restore character */ + *ep = c; + } + if (doneany) + /* Kill last space. */ + --o; + + return o; +} + #ifdef EXPERIMENTAL /* @@ -1827,6 +1868,7 @@ { STRING_SIZE_TUPLE("if"), 2, 3, 0, func_if}, { STRING_SIZE_TUPLE("value"), 0, 1, 1, func_value}, { STRING_SIZE_TUPLE("eval"), 0, 1, 1, func_eval}, + { STRING_SIZE_TUPLE("vpath"), 0, 1, 1, func_vpath}, #ifdef EXPERIMENTAL { STRING_SIZE_TUPLE("eq"), 2, 2, 1, func_eq}, { STRING_SIZE_TUPLE("not"), 0, 1, 1, func_not},