mirror of
https://github.com/mirror/make.git
synced 2025-03-29 21:50:30 +08:00
* Fix backward incompatibility in new function implementation.
* Add support for ARFZMAG archive formats.
This commit is contained in:
parent
ec50fe2a2b
commit
6d2984e0b2
19
ChangeLog
19
ChangeLog
@ -38,6 +38,18 @@
|
|||||||
dmalloc (http://www.dmalloc.com/) with make. Use --enable-dmalloc
|
dmalloc (http://www.dmalloc.com/) with make. Use --enable-dmalloc
|
||||||
with configure to enable it.
|
with configure to enable it.
|
||||||
|
|
||||||
|
* function.c (function_table_entry): Whoops! The function.c
|
||||||
|
rewrite breaks backward compatibility: all text to a function is
|
||||||
|
broken into arguments, and extras are ignored. So $(sort a,b,c)
|
||||||
|
returns "a"! Etc. Ouch. Fix it by making a positive value in
|
||||||
|
the REQUIRED_ARGS field mean exactly that many arguments to the
|
||||||
|
function; any "extras" are considered part of the last argument as
|
||||||
|
before. A negative value means at least that many, but may be
|
||||||
|
more: in this case all text is broken on commas.
|
||||||
|
(handle_function): Stop when we've seen REQUIRED_ARGS args, if >0.
|
||||||
|
(expand_builtin_function): Compare number of args to the absolute
|
||||||
|
value of REQUIRED_ARGS.
|
||||||
|
|
||||||
1999-07-20 Paul D. Smith <psmith@gnu.org>
|
1999-07-20 Paul D. Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* job.c (start_job_command): Ensure that the state of the target
|
* job.c (start_job_command): Ensure that the state of the target
|
||||||
@ -264,6 +276,13 @@
|
|||||||
(struct file): Per-file considered toggle bit. * file.c: New
|
(struct file): Per-file considered toggle bit. * file.c: New
|
||||||
global toggle variable considered.
|
global toggle variable considered.
|
||||||
|
|
||||||
|
1999-04-05 Paul D. Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* arscan.c (ar_scan): Added support for ARFZMAG (compressed
|
||||||
|
archives?) for Digital UNIX C++. Information provided by
|
||||||
|
Patrick E. Krogel <pekrogel@mtu.edu>.
|
||||||
|
(ar_member_touch): Ditto.
|
||||||
|
|
||||||
1999-04-03 Paul D. Smith <psmith@gnu.org>
|
1999-04-03 Paul D. Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* remake.c (f_mtime): If: a) we found a file and b) we didn't
|
* remake.c (f_mtime): If: a) we found a file and b) we didn't
|
||||||
|
18
arscan.c
18
arscan.c
@ -517,8 +517,20 @@ ar_scan (archive, function, arg)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
if (nread != AR_HDR_SIZE
|
if (nread != AR_HDR_SIZE
|
||||||
#ifdef ARFMAG
|
#if defined(ARFMAG) || defined(ARFZMAG)
|
||||||
|| bcmp (member_header.ar_fmag, ARFMAG, 2)
|
|| (
|
||||||
|
# ifdef ARFMAG
|
||||||
|
bcmp (member_header.ar_fmag, ARFMAG, 2)
|
||||||
|
# else
|
||||||
|
1
|
||||||
|
# endif
|
||||||
|
&&
|
||||||
|
# ifdef ARFZMAG
|
||||||
|
bcmp (member_header.ar_fmag, ARFZMAG, 2)
|
||||||
|
# else
|
||||||
|
1
|
||||||
|
# endif
|
||||||
|
)
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -768,7 +780,7 @@ ar_member_touch (arname, memname)
|
|||||||
#else
|
#else
|
||||||
fstat (fd, &statbuf);
|
fstat (fd, &statbuf);
|
||||||
#endif
|
#endif
|
||||||
#if defined(ARFMAG) || defined(AIAMAG)
|
#if defined(ARFMAG) || defined(ARFZMAG) || defined(AIAMAG)
|
||||||
/* Advance member's time to that time */
|
/* Advance member's time to that time */
|
||||||
for (i = 0; i < sizeof ar_hdr.ar_date; i++)
|
for (i = 0; i < sizeof ar_hdr.ar_date; i++)
|
||||||
ar_hdr.ar_date[i] = ' ';
|
ar_hdr.ar_date[i] = ' ';
|
||||||
|
34
function.c
34
function.c
@ -33,8 +33,8 @@ struct function_table_entry
|
|||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
int len;
|
int len;
|
||||||
int required_arguments;
|
int required_args;
|
||||||
int expand_all_arguments;
|
int expand_args;
|
||||||
char *(*func_ptr) PARAMS((char *output, char **argv, const char*funcname));
|
char *(*func_ptr) PARAMS((char *output, char **argv, const char*funcname));
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -315,7 +315,11 @@ expand_builtin_function (o, argc, argv, entry_p)
|
|||||||
char **argv;
|
char **argv;
|
||||||
struct function_table_entry *entry_p;
|
struct function_table_entry *entry_p;
|
||||||
{
|
{
|
||||||
if (argc < entry_p->required_arguments && entry_p->required_arguments >= 0)
|
int min = (entry_p->required_args > 0
|
||||||
|
? entry_p->required_args
|
||||||
|
: -entry_p->required_args);
|
||||||
|
|
||||||
|
if (argc < min)
|
||||||
fatal (reading_file,
|
fatal (reading_file,
|
||||||
"Insufficient number of arguments (%d) to function `%s'",
|
"Insufficient number of arguments (%d) to function `%s'",
|
||||||
argc, entry_p->name);
|
argc, entry_p->name);
|
||||||
@ -383,10 +387,12 @@ handle_function (op, stringp)
|
|||||||
/* Get some memory to store the arg pointers. */
|
/* Get some memory to store the arg pointers. */
|
||||||
argvp = argv = (char **) alloca (sizeof(char *) * (nargs + 2));
|
argvp = argv = (char **) alloca (sizeof(char *) * (nargs + 2));
|
||||||
|
|
||||||
/* Chop the string into arguments, then store the end pointer and a nul. */
|
/* Chop the string into arguments, then store the end pointer and a nul.
|
||||||
|
If REQUIRED_ARGS is positive, as soon as we hit that many assume the
|
||||||
|
rest of the string is part of the last argument. */
|
||||||
*argvp = argbeg;
|
*argvp = argbeg;
|
||||||
nargs = 1;
|
nargs = 1;
|
||||||
while (1)
|
while (entry_p->required_args > 0 && nargs < entry_p->required_args)
|
||||||
{
|
{
|
||||||
char *next = find_next_argument (openparen, closeparen, *argvp, p);
|
char *next = find_next_argument (openparen, closeparen, *argvp, p);
|
||||||
|
|
||||||
@ -401,7 +407,7 @@ handle_function (op, stringp)
|
|||||||
*(++argvp) = 0;
|
*(++argvp) = 0;
|
||||||
|
|
||||||
/* If we should expand, do it. */
|
/* If we should expand, do it. */
|
||||||
if (entry_p->expand_all_arguments)
|
if (entry_p->expand_args)
|
||||||
{
|
{
|
||||||
for (argvp=argv; argvp[1] != 0; ++argvp)
|
for (argvp=argv; argvp[1] != 0; ++argvp)
|
||||||
*argvp = expand_argument (*argvp, argvp[1]-1);
|
*argvp = expand_argument (*argvp, argvp[1]-1);
|
||||||
@ -414,7 +420,7 @@ handle_function (op, stringp)
|
|||||||
*op = expand_builtin_function (*op, nargs, argv, entry_p);
|
*op = expand_builtin_function (*op, nargs, argv, entry_p);
|
||||||
|
|
||||||
/* If we allocated memory for the expanded args, free it again. */
|
/* If we allocated memory for the expanded args, free it again. */
|
||||||
if (entry_p->expand_all_arguments)
|
if (entry_p->expand_args)
|
||||||
for (argvp=argv; *argvp != 0; ++argvp)
|
for (argvp=argv; *argvp != 0; ++argvp)
|
||||||
free (*argvp);
|
free (*argvp);
|
||||||
|
|
||||||
@ -1805,12 +1811,14 @@ func_call (o, argv, funcname)
|
|||||||
some efficiency by moving most often used functions to the start of the
|
some efficiency by moving most often used functions to the start of the
|
||||||
table.
|
table.
|
||||||
|
|
||||||
REQUIRED_ARGUMENTS is the minimum number of arguments. A function
|
If REQUIRED_ARGS is positive, the function takes exactly that many
|
||||||
can have more, but if they have less an error will be generated.
|
arguments. All subsequent text is included with the last argument. So,
|
||||||
|
since $(sort a,b,c) takes only one argument, it will be the full string
|
||||||
|
"a,b,c". If the value is negative, it's the minimum number of arguments.
|
||||||
|
A function can have more, but if it has less an error is generated.
|
||||||
|
|
||||||
EXPAND_ALL_ARGUMENTS means that all arguments should be expanded
|
EXPAND_ARGS means that all arguments should be expanded before invocation.
|
||||||
before invocation. Functions that do namespace tricks (foreach)
|
Functions that do namespace tricks (foreach) don't automatically expand. */
|
||||||
don't automatically expand. */
|
|
||||||
|
|
||||||
static struct function_table_entry function_table[] =
|
static struct function_table_entry function_table[] =
|
||||||
{
|
{
|
||||||
@ -1837,7 +1845,7 @@ static struct function_table_entry function_table[] =
|
|||||||
{ STRING_SIZE_TUPLE("words"), 1, 1, func_words},
|
{ STRING_SIZE_TUPLE("words"), 1, 1, func_words},
|
||||||
{ STRING_SIZE_TUPLE("origin"), 1, 1, func_origin},
|
{ STRING_SIZE_TUPLE("origin"), 1, 1, func_origin},
|
||||||
{ STRING_SIZE_TUPLE("foreach"), 3, 0, func_foreach},
|
{ STRING_SIZE_TUPLE("foreach"), 3, 0, func_foreach},
|
||||||
{ STRING_SIZE_TUPLE("call"), 1, 1, func_call},
|
{ STRING_SIZE_TUPLE("call"), -1, 1, func_call},
|
||||||
{ STRING_SIZE_TUPLE("error"), 1, 1, func_error},
|
{ STRING_SIZE_TUPLE("error"), 1, 1, func_error},
|
||||||
{ STRING_SIZE_TUPLE("warning"), 1, 1, func_error},
|
{ STRING_SIZE_TUPLE("warning"), 1, 1, func_error},
|
||||||
#ifdef EXPERIMENTAL
|
#ifdef EXPERIMENTAL
|
||||||
|
Loading…
Reference in New Issue
Block a user