mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-12-26 14:00:55 +00:00
- Fix Savannah bug 17825
- Fix Savannah bug 21231
This commit is contained in:
parent
c8840352ac
commit
bf9822658f
13 changed files with 79 additions and 40 deletions
18
ChangeLog
18
ChangeLog
|
@ -1,5 +1,23 @@
|
|||
2009-06-13 Paul Smith <psmith@gnu.org>
|
||||
|
||||
* function.c (string_glob): Rely on multi_glob() to determine
|
||||
whether files exist or not. Remove call to file_exists_p() which
|
||||
is not always correct. Fixes Savannah bug #21231.
|
||||
* read.c (multi_glob): Add a new argument EXISTS_ONLY; if true
|
||||
then only files that really exist will be returned.
|
||||
* dep.h: Add new argument to multi_glob().
|
||||
* rule.c (install_pattern_rule): Ditto.
|
||||
* read.c (eval): Ditto.
|
||||
* main.c (main): Ditto.
|
||||
* implicit.c (pattern_search): Ditto.
|
||||
* file.c (parse_prereqs): Ditto.
|
||||
* default.c (set_default_suffixes): Ditto.
|
||||
|
||||
2009-06-09 Paul Smith <psmith@gnu.org>
|
||||
|
||||
* commands.c (set_file_variables): If always_make_flag is set,
|
||||
always add the prereq to $?. Fixes Savannah bug #17825.
|
||||
|
||||
* remake.c (update_file_1): When rebuilding deps of FILE, also try
|
||||
to rebuild the deps of all the also_make targets for that file.
|
||||
Fixes Savannah bug #19108.
|
||||
|
|
|
@ -240,7 +240,7 @@ set_file_variables (struct file *file)
|
|||
memcpy (cp, c, len);
|
||||
cp += len;
|
||||
*cp++ = FILE_LIST_SEPARATOR;
|
||||
if (d->changed)
|
||||
if (d->changed || always_make_flag)
|
||||
{
|
||||
memcpy (qp, c, len);
|
||||
qp += len;
|
||||
|
|
|
@ -544,7 +544,7 @@ set_default_suffixes (void)
|
|||
char *p = default_suffixes;
|
||||
suffix_file->deps = (struct dep *)
|
||||
multi_glob (parse_file_seq (&p, '\0', sizeof (struct dep), 1),
|
||||
sizeof (struct dep));
|
||||
sizeof (struct dep), 0);
|
||||
define_variable ("SUFFIXES", 8, default_suffixes, o_default, 0);
|
||||
}
|
||||
}
|
||||
|
|
2
dep.h
2
dep.h
|
@ -55,7 +55,7 @@ struct nameseq
|
|||
};
|
||||
|
||||
|
||||
struct nameseq *multi_glob (struct nameseq *chain, unsigned int size);
|
||||
struct nameseq *multi_glob (struct nameseq *chain, unsigned int size, int exists_only);
|
||||
#ifdef VMS
|
||||
struct nameseq *parse_file_seq ();
|
||||
#else
|
||||
|
|
4
file.c
4
file.c
|
@ -416,7 +416,7 @@ parse_prereqs (char *p)
|
|||
{
|
||||
struct dep *new = (struct dep *)
|
||||
multi_glob (parse_file_seq (&p, '|', sizeof (struct dep), 1),
|
||||
sizeof (struct dep));
|
||||
sizeof (struct dep), 0);
|
||||
|
||||
if (*p)
|
||||
{
|
||||
|
@ -427,7 +427,7 @@ parse_prereqs (char *p)
|
|||
++p;
|
||||
ood = (struct dep *)
|
||||
multi_glob (parse_file_seq (&p, '\0', sizeof (struct dep), 1),
|
||||
sizeof (struct dep));
|
||||
sizeof (struct dep), 0);
|
||||
|
||||
if (! new)
|
||||
new = ood;
|
||||
|
|
30
function.c
30
function.c
|
@ -361,7 +361,7 @@ string_glob (char *line)
|
|||
That would break examples like:
|
||||
$(patsubst ./%.c,obj/%.o,$(wildcard ./?*.c)). */
|
||||
0),
|
||||
sizeof (struct nameseq));
|
||||
sizeof (struct nameseq), 1);
|
||||
|
||||
if (result == 0)
|
||||
{
|
||||
|
@ -372,26 +372,20 @@ string_glob (char *line)
|
|||
idx = 0;
|
||||
while (chain != 0)
|
||||
{
|
||||
const char *name = chain->name;
|
||||
unsigned int len = strlen (name);
|
||||
|
||||
struct nameseq *next = chain->next;
|
||||
unsigned int len = strlen (chain->name);
|
||||
|
||||
if (idx + len + 1 > length)
|
||||
{
|
||||
length += (len + 1) * 2;
|
||||
result = xrealloc (result, length);
|
||||
}
|
||||
memcpy (&result[idx], chain->name, len);
|
||||
idx += len;
|
||||
result[idx++] = ' ';
|
||||
|
||||
free (chain);
|
||||
chain = next;
|
||||
|
||||
/* multi_glob will pass names without globbing metacharacters
|
||||
through as is, but we want only files that actually exist. */
|
||||
if (file_exists_p (name))
|
||||
{
|
||||
if (idx + len + 1 > length)
|
||||
{
|
||||
length += (len + 1) * 2;
|
||||
result = xrealloc (result, length);
|
||||
}
|
||||
memcpy (&result[idx], name, len);
|
||||
idx += len;
|
||||
result[idx++] = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
/* Kill the last space and terminate the string. */
|
||||
|
|
|
@ -584,7 +584,7 @@ pattern_search (struct file *file, int archive,
|
|||
parse_file_seq (&p2,
|
||||
order_only ? '\0' : '|',
|
||||
sizeof (struct idep),
|
||||
1), sizeof (struct idep));
|
||||
1), sizeof (struct idep), 0);
|
||||
|
||||
/* @@ It would be nice to teach parse_file_seq or
|
||||
multi_glob to add prefix. This would save us some
|
||||
|
|
2
main.c
2
main.c
|
@ -2193,7 +2193,7 @@ main (int argc, char **argv, char **envp)
|
|||
struct nameseq *ns;
|
||||
|
||||
ns = multi_glob (parse_file_seq (&p, '\0', sizeof (struct nameseq), 1),
|
||||
sizeof (struct nameseq));
|
||||
sizeof (struct nameseq), 0);
|
||||
if (ns)
|
||||
{
|
||||
/* .DEFAULT_GOAL should contain one target. */
|
||||
|
|
20
read.c
20
read.c
|
@ -836,7 +836,7 @@ eval (struct ebuffer *ebuf, int set_default)
|
|||
files = multi_glob (parse_file_seq (&p2, '\0',
|
||||
sizeof (struct nameseq),
|
||||
1),
|
||||
sizeof (struct nameseq));
|
||||
sizeof (struct nameseq), 0);
|
||||
free (p);
|
||||
|
||||
/* Save the state of conditionals and start
|
||||
|
@ -1021,7 +1021,7 @@ eval (struct ebuffer *ebuf, int set_default)
|
|||
filenames = multi_glob (parse_file_seq (&p2, '\0',
|
||||
sizeof (struct nameseq),
|
||||
1),
|
||||
sizeof (struct nameseq));
|
||||
sizeof (struct nameseq), 0);
|
||||
*p2 = ':';
|
||||
|
||||
if (!filenames)
|
||||
|
@ -3069,10 +3069,12 @@ tilde_expand (const char *name)
|
|||
|
||||
SIZE is how big to construct chain elements.
|
||||
This is useful if we want them actually to be other structures
|
||||
that have room for additional info. */
|
||||
that have room for additional info.
|
||||
|
||||
If EXISTS_ONLY is true only return existing files. */
|
||||
|
||||
struct nameseq *
|
||||
multi_glob (struct nameseq *chain, unsigned int size)
|
||||
multi_glob (struct nameseq *chain, unsigned int size, int exists_only)
|
||||
{
|
||||
void dir_setup_glob (glob_t *);
|
||||
struct nameseq *new = 0;
|
||||
|
@ -3125,8 +3127,16 @@ multi_glob (struct nameseq *chain, unsigned int size)
|
|||
nlist = (const char **)gl.gl_pathv;
|
||||
break;
|
||||
|
||||
case GLOB_NOMATCH:
|
||||
if (exists_only)
|
||||
{
|
||||
i = 0;
|
||||
break;
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
|
||||
default:
|
||||
/* Not a match or another error; keep this name. */
|
||||
/* By default keep this name. */
|
||||
i = 1;
|
||||
nlist = &gname;
|
||||
break;
|
||||
|
|
2
rule.c
2
rule.c
|
@ -378,7 +378,7 @@ install_pattern_rule (struct pspec *p, int terminal)
|
|||
ptr = p->dep;
|
||||
r->deps = (struct dep *) multi_glob (parse_file_seq (&ptr, '\0',
|
||||
sizeof (struct dep), 1),
|
||||
sizeof (struct dep));
|
||||
sizeof (struct dep), 0);
|
||||
|
||||
if (new_pattern_rule (r, 0))
|
||||
{
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
2009-06-13 Paul Smith <psmith@gnu.org>
|
||||
|
||||
* scripts/functions/wildcard: Test that wildcards with
|
||||
non-existent glob matchers return empty.
|
||||
|
||||
2009-06-09 Paul Smith <psmith@gnu.org>
|
||||
|
||||
* scripts/options/dash-B: Test the $? works correctly with -B.
|
||||
Savannah bug #17825.
|
||||
|
||||
* scripts/features/patternrules: Test that dependencies of
|
||||
"also_make" targets are created properly. Savannah bug #19108.
|
||||
|
||||
|
|
|
@ -81,14 +81,11 @@ if ((-f "example.1")||(-f "example.two")||(-f "example.3")||(-f "example.for"))
|
|||
|
||||
&compare_output($answer,&get_logfile(1));
|
||||
|
||||
# TEST #4: Verify that failed wildcards don't return the pattern
|
||||
|
||||
run_make_test(q!
|
||||
all: ; @echo $(wildcard xz--y*.7)
|
||||
!,
|
||||
'', "\n");
|
||||
|
||||
1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -70,4 +70,16 @@ all');
|
|||
|
||||
rmfiles('foo.x', 'blah.x');
|
||||
|
||||
# Test that $? is set properly with -B; all prerequisites will be newer!
|
||||
|
||||
utouch(-10, 'x.b');
|
||||
touch('x.a');
|
||||
|
||||
run_make_test(q!
|
||||
x.a: x.b ; @echo $?
|
||||
!,
|
||||
'-B', "x.b\n");
|
||||
|
||||
unlink(qw(x.a x.b));
|
||||
|
||||
1;
|
||||
|
|
Loading…
Reference in a new issue