mirror of
https://github.com/mirror/make.git
synced 2025-01-30 06:11:02 +08:00
Sun Jul 30 00:49:53 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* file.h (struct file): New field `secondary'. * file.c (snap_deps): Check for .INTERMEDIATE and .SECONDARY. (remove_intermediates): Don't delete .SECONDARY files.
This commit is contained in:
parent
b8ea37e31c
commit
8b2aca5930
41
file.c
41
file.c
@ -303,7 +303,8 @@ remove_intermediates (sig)
|
|||||||
doneany = 0;
|
doneany = 0;
|
||||||
for (i = 0; i < FILE_BUCKETS; ++i)
|
for (i = 0; i < FILE_BUCKETS; ++i)
|
||||||
for (f = files[i]; f != 0; f = f->next)
|
for (f = files[i]; f != 0; f = f->next)
|
||||||
if (f->intermediate && (f->dontcare || !f->precious))
|
if (f->intermediate && (f->dontcare || !f->precious)
|
||||||
|
&& !f->secondary)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
if (f->update_status == -1)
|
if (f->update_status == -1)
|
||||||
@ -349,7 +350,8 @@ remove_intermediates (sig)
|
|||||||
/* For each dependency of each file, make the `struct dep' point
|
/* For each dependency of each file, make the `struct dep' point
|
||||||
at the appropriate `struct file' (which may have to be created).
|
at the appropriate `struct file' (which may have to be created).
|
||||||
|
|
||||||
Also mark the files depended on by .PRECIOUS and .PHONY. */
|
Also mark the files depended on by .PRECIOUS, .PHONY, .SILENT,
|
||||||
|
and various other special targets. */
|
||||||
|
|
||||||
void
|
void
|
||||||
snap_deps ()
|
snap_deps ()
|
||||||
@ -387,6 +389,41 @@ snap_deps ()
|
|||||||
f2->last_mtime = (time_t) -1;
|
f2->last_mtime = (time_t) -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (f = lookup_file (".INTERMEDIATE"); f != 0; f = f->prev)
|
||||||
|
{
|
||||||
|
/* .INTERMEDIATE with deps listed
|
||||||
|
marks those deps as intermediate files. */
|
||||||
|
for (d = f->deps; d != 0; d = d->next)
|
||||||
|
for (f2 = d->file; f2 != 0; f2 = f2->prev)
|
||||||
|
f2->intermediate = 1;
|
||||||
|
/* .INTERMEDIATE with no deps does nothing.
|
||||||
|
Marking all files as intermediates is useless
|
||||||
|
since the goal targets would be deleted after they are built. */
|
||||||
|
}
|
||||||
|
|
||||||
|
for (f = lookup_file (".SECONDARY"); f != 0; f = f->prev)
|
||||||
|
{
|
||||||
|
/* .SECONDARY with deps listed
|
||||||
|
marks those deps as intermediate files
|
||||||
|
in that they don't get rebuilt if not actually needed;
|
||||||
|
but unlike real intermediate files,
|
||||||
|
these are not deleted after make finishes. */
|
||||||
|
if (f->deps)
|
||||||
|
{
|
||||||
|
for (d = f->deps; d != 0; d = d->next)
|
||||||
|
for (f2 = d->file; f2 != 0; f2 = f2->prev)
|
||||||
|
f2->intermediate = f2->secondary = 1;
|
||||||
|
}
|
||||||
|
/* .SECONDARY with no deps listed marks *all* files that way. */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < FILE_BUCKETS; i++)
|
||||||
|
for (f2 = files[i]; f2; f2= f2->next)
|
||||||
|
f2->intermediate = f2->secondary = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
f = lookup_file (".EXPORT_ALL_VARIABLES");
|
f = lookup_file (".EXPORT_ALL_VARIABLES");
|
||||||
if (f != 0 && f->is_target)
|
if (f != 0 && f->is_target)
|
||||||
export_all_variables = 1;
|
export_all_variables = 1;
|
||||||
|
13
file.h
13
file.h
@ -72,6 +72,9 @@ struct file
|
|||||||
unsigned int phony:1; /* Nonzero if this is a phony file
|
unsigned int phony:1; /* Nonzero if this is a phony file
|
||||||
i.e., a dependency of .PHONY. */
|
i.e., a dependency of .PHONY. */
|
||||||
unsigned int intermediate:1;/* Nonzero if this is an intermediate file. */
|
unsigned int intermediate:1;/* Nonzero if this is an intermediate file. */
|
||||||
|
/* Nonzero, for an intermediate file,
|
||||||
|
means remove_intermediates should not delete it. */
|
||||||
|
unsigned int secondary:1;
|
||||||
unsigned int dontcare:1; /* Nonzero if no complaint is to be made if
|
unsigned int dontcare:1; /* Nonzero if no complaint is to be made if
|
||||||
this target cannot be remade. */
|
this target cannot be remade. */
|
||||||
};
|
};
|
||||||
@ -89,11 +92,17 @@ extern void rename_file (), file_hash_enter ();
|
|||||||
extern void set_command_state ();
|
extern void set_command_state ();
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the mtime of file F (a struct file *), caching it.
|
||||||
|
The value is -1 if the file does not exist. */
|
||||||
|
#define file_mtime(f) file_mtime_1 ((f), 1)
|
||||||
|
/* Return the mtime of file F (a struct file *), caching it.
|
||||||
|
Don't search using vpath for the file--if it doesn't actually exist,
|
||||||
|
we don't find it.
|
||||||
|
The value is -1 if the file does not exist. */
|
||||||
|
#define file_mtime_no_search(f) file_mtime_1 ((f), 0)
|
||||||
extern time_t f_mtime ();
|
extern time_t f_mtime ();
|
||||||
#define file_mtime_1(f, v) \
|
#define file_mtime_1(f, v) \
|
||||||
((f)->last_mtime != (time_t) 0 ? (f)->last_mtime : f_mtime ((f), v))
|
((f)->last_mtime != (time_t) 0 ? (f)->last_mtime : f_mtime ((f), v))
|
||||||
#define file_mtime(f) file_mtime_1 ((f), 1)
|
|
||||||
#define file_mtime_no_search(f) file_mtime_1 ((f), 0)
|
|
||||||
|
|
||||||
/* Modtime value to use for `infinitely new'. We used to get the current time
|
/* Modtime value to use for `infinitely new'. We used to get the current time
|
||||||
from the system and use that whenever we wanted `new'. But that causes
|
from the system and use that whenever we wanted `new'. But that causes
|
||||||
|
Loading…
Reference in New Issue
Block a user