mirror of
https://github.com/mirror/make.git
synced 2025-01-27 12:51:07 +08:00
Allow loaded objects to opt out of the "auto-rebuild" feature.
This commit is contained in:
parent
f69922b335
commit
0296e40fc7
@ -1,5 +1,9 @@
|
|||||||
2013-09-22 Paul Smith <psmith@gnu.org>
|
2013-09-22 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* read.c (eval): If load_file() returns -1, don't add this to the
|
||||||
|
"to be rebuilt" list.
|
||||||
|
* doc/make.texi (load Directive): Document it.
|
||||||
|
|
||||||
* guile.c (guile_gmake_setup): Don't initialize Guile so early.
|
* guile.c (guile_gmake_setup): Don't initialize Guile so early.
|
||||||
(func_guile): Lazily initialize Guile the first time the $(guile ..)
|
(func_guile): Lazily initialize Guile the first time the $(guile ..)
|
||||||
function is invoked. Guile can steal file descriptors which
|
function is invoked. Guile can steal file descriptors which
|
||||||
|
@ -10910,7 +10910,8 @@ The @code{load} directive and extension capability is considered a
|
|||||||
``technology preview'' in this release of GNU make. We encourage you
|
``technology preview'' in this release of GNU make. We encourage you
|
||||||
to experiment with this feature and we appreciate any feedback on it.
|
to experiment with this feature and we appreciate any feedback on it.
|
||||||
However we cannot guarantee to maintain backward-compatibility in the
|
However we cannot guarantee to maintain backward-compatibility in the
|
||||||
next release.
|
next release. Consider using GNU Guile instead for extending GNU make
|
||||||
|
(@pxref{Guile Function, ,The @code{guile} Function}).
|
||||||
@end quotation
|
@end quotation
|
||||||
@end cartouche
|
@end cartouche
|
||||||
|
|
||||||
@ -10978,7 +10979,9 @@ same directive.
|
|||||||
The initializing function will be provided the file name and line
|
The initializing function will be provided the file name and line
|
||||||
number of the invocation of the @code{load} operation. It should
|
number of the invocation of the @code{load} operation. It should
|
||||||
return a value of type @code{int}, which must be @code{0} on failure
|
return a value of type @code{int}, which must be @code{0} on failure
|
||||||
and non-@code{0} on success.
|
and non-@code{0} on success. If the return value is @code{-1}, then
|
||||||
|
GNU make will @emph{not} attempt to rebuild the object file
|
||||||
|
(@pxref{Remaking Loaded Objects, ,How Loaded Objects Are Remade}).
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
|
14
read.c
14
read.c
@ -947,19 +947,27 @@ eval (struct ebuffer *ebuf, int set_default)
|
|||||||
PARSEFS_NOAR);
|
PARSEFS_NOAR);
|
||||||
free (p);
|
free (p);
|
||||||
|
|
||||||
/* Load each file and add it to the list "to be rebuilt". */
|
/* Load each file. */
|
||||||
while (files != 0)
|
while (files != 0)
|
||||||
{
|
{
|
||||||
struct nameseq *next = files->next;
|
struct nameseq *next = files->next;
|
||||||
const char *name = files->name;
|
const char *name = files->name;
|
||||||
struct dep *deps;
|
struct dep *deps;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
/* Load the file. 0 means failure. */
|
||||||
|
r = load_file (&ebuf->floc, &name, noerror);
|
||||||
|
if (! r && ! noerror)
|
||||||
|
fatal (&ebuf->floc, _("%s: failed to load"), name);
|
||||||
|
|
||||||
free_ns (files);
|
free_ns (files);
|
||||||
files = next;
|
files = next;
|
||||||
|
|
||||||
if (! load_file (&ebuf->floc, &name, noerror) && ! noerror)
|
/* Return of -1 means a special load: don't rebuild it. */
|
||||||
fatal (&ebuf->floc, _("%s: failed to load"), name);
|
if (r == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* It succeeded, so add it to the list "to be rebuilt". */
|
||||||
deps = alloc_dep ();
|
deps = alloc_dep ();
|
||||||
deps->next = read_files;
|
deps->next = read_files;
|
||||||
read_files = deps;
|
read_files = deps;
|
||||||
|
Loading…
Reference in New Issue
Block a user