mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 15:55:23 +08:00
libcpp: dependency emission tidying
This patch cleans up the interface to the dependency generation a little. We now only check the option in one place, and the cpp_get_deps function returns nullptr if there are no dependencies. I also reworded the -MT and -MQ help text to be make agnostic -- as there are ideas about emitting, say, JSON. libcpp/ * include/mkdeps.h: Include cpplib.h (deps_write): Adjust first parm type. * mkdeps.c: Include internal.h (make_write): Adjust first parm type. Check phony option directly. (deps_write): Adjust first parm type. * init.c (cpp_read_main_file): Use get_deps. * directives.c (cpp_get_deps): Check option before initializing. gcc/c-family/ * c.opt (MQ,MT): Reword description to be make-agnostic. gcc/fortran/ * cpp.c (gfc_cpp_add_dep): Only add dependency if we're recording them. (gfc_cpp_init): Likewise for target.
This commit is contained in:
parent
f7d6961126
commit
918e8b10a7
@ -242,11 +242,11 @@ Generate phony targets for all headers.
|
||||
|
||||
MQ
|
||||
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing makefile target after %qs)
|
||||
-MQ <target> Add a MAKE-quoted target.
|
||||
-MQ <target> Add a target that may require quoting.
|
||||
|
||||
MT
|
||||
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing makefile target after %qs)
|
||||
-MT <target> Add an unquoted target.
|
||||
-MT <target> Add a target that does not require quoting.
|
||||
|
||||
P
|
||||
C ObjC C++ ObjC++
|
||||
|
@ -222,13 +222,15 @@ void
|
||||
gfc_cpp_add_dep (const char *name, bool system)
|
||||
{
|
||||
if (!gfc_cpp_option.deps_skip_system || !system)
|
||||
deps_add_dep (cpp_get_deps (cpp_in), name);
|
||||
if (mkdeps *deps = cpp_get_deps (cpp_in))
|
||||
deps_add_dep (deps, name);
|
||||
}
|
||||
|
||||
void
|
||||
gfc_cpp_add_target (const char *name)
|
||||
{
|
||||
deps_add_target (cpp_get_deps (cpp_in), name, 0);
|
||||
if (mkdeps *deps = cpp_get_deps (cpp_in))
|
||||
deps_add_target (deps, name, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -605,8 +607,8 @@ gfc_cpp_init (void)
|
||||
cpp_assert (cpp_in, opt->arg);
|
||||
}
|
||||
else if (opt->code == OPT_MT || opt->code == OPT_MQ)
|
||||
deps_add_target (cpp_get_deps (cpp_in),
|
||||
opt->arg, opt->code == OPT_MQ);
|
||||
if (mkdeps *deps = cpp_get_deps (cpp_in))
|
||||
deps_add_target (deps, opt->arg, opt->code == OPT_MQ);
|
||||
}
|
||||
|
||||
/* Pre-defined macros for non-required INTEGER kind types. */
|
||||
|
@ -2572,7 +2572,7 @@ cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
|
||||
class mkdeps *
|
||||
cpp_get_deps (cpp_reader *pfile)
|
||||
{
|
||||
if (!pfile->deps)
|
||||
if (!pfile->deps && CPP_OPTION (pfile, deps.style) != DEPS_NONE)
|
||||
pfile->deps = deps_init ();
|
||||
return pfile->deps;
|
||||
}
|
||||
|
@ -23,6 +23,8 @@ along with this program; see the file COPYING3. If not see
|
||||
#ifndef LIBCPP_MKDEPS_H
|
||||
#define LIBCPP_MKDEPS_H
|
||||
|
||||
#include "cpplib.h"
|
||||
|
||||
/* This is the data structure used by all the functions in mkdeps.c.
|
||||
It's quite straightforward, but should be treated as opaque. */
|
||||
|
||||
@ -55,9 +57,9 @@ extern void deps_add_default_target (class mkdeps *, const char *);
|
||||
dependency entered should be the primary source file. */
|
||||
extern void deps_add_dep (class mkdeps *, const char *);
|
||||
|
||||
/* Write out a deps buffer to a specified file. The third argument
|
||||
/* Write out a deps buffer to a specified file. The last argument
|
||||
is the number of columns to word-wrap at (0 means don't wrap). */
|
||||
extern void deps_write (const class mkdeps *, FILE *, bool, unsigned int);
|
||||
extern void deps_write (const cpp_reader *, FILE *, unsigned int);
|
||||
|
||||
/* Write out a deps buffer to a file, in a form that can be read back
|
||||
with deps_restore. Returns nonzero on error, in which case the
|
||||
|
@ -667,14 +667,9 @@ cpp_post_options (cpp_reader *pfile)
|
||||
const char *
|
||||
cpp_read_main_file (cpp_reader *pfile, const char *fname, bool injecting)
|
||||
{
|
||||
if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
|
||||
{
|
||||
if (!pfile->deps)
|
||||
pfile->deps = deps_init ();
|
||||
|
||||
/* Set the default target (if there is none already). */
|
||||
deps_add_default_target (pfile->deps, fname);
|
||||
}
|
||||
if (mkdeps *deps = cpp_get_deps (pfile))
|
||||
/* Set the default target (if there is none already). */
|
||||
deps_add_default_target (pfile->deps, fname);
|
||||
|
||||
pfile->main_file
|
||||
= _cpp_find_file (pfile, fname, &pfile->no_search_path, /*angle=*/0,
|
||||
@ -813,9 +808,8 @@ cpp_finish (cpp_reader *pfile, FILE *deps_stream)
|
||||
while (pfile->buffer)
|
||||
_cpp_pop_buffer (pfile);
|
||||
|
||||
if (CPP_OPTION (pfile, deps.style) != DEPS_NONE && deps_stream)
|
||||
deps_write (pfile->deps, deps_stream,
|
||||
CPP_OPTION (pfile, deps.phony_targets), 72);
|
||||
if (deps_stream)
|
||||
deps_write (pfile, deps_stream, 72);
|
||||
|
||||
/* Report on headers that could use multiple include guards. */
|
||||
if (CPP_OPTION (pfile, print_include_names))
|
||||
|
@ -23,6 +23,7 @@ along with this program; see the file COPYING3. If not see
|
||||
#include "config.h"
|
||||
#include "system.h"
|
||||
#include "mkdeps.h"
|
||||
#include "internal.h"
|
||||
|
||||
/* Not set up to just include std::vector et al, here's a simple
|
||||
implementation. */
|
||||
@ -367,8 +368,10 @@ make_write_vec (const mkdeps::vec<const char *> &vec, FILE *fp,
|
||||
.PHONY targets for all the dependencies too. */
|
||||
|
||||
static void
|
||||
make_write (const class mkdeps *d, FILE *fp, bool phony, unsigned int colmax)
|
||||
make_write (const cpp_reader *pfile, FILE *fp, unsigned int colmax)
|
||||
{
|
||||
const mkdeps *d = pfile->deps;
|
||||
|
||||
unsigned column = 0;
|
||||
if (colmax && colmax < 34)
|
||||
colmax = 34;
|
||||
@ -380,7 +383,7 @@ make_write (const class mkdeps *d, FILE *fp, bool phony, unsigned int colmax)
|
||||
column++;
|
||||
make_write_vec (d->deps, fp, column, colmax);
|
||||
fputs ("\n", fp);
|
||||
if (phony)
|
||||
if (CPP_OPTION (pfile, deps.phony_targets))
|
||||
for (unsigned i = 1; i < d->deps.size (); i++)
|
||||
fprintf (fp, "%s:\n", munge (d->deps[i]));
|
||||
}
|
||||
@ -388,11 +391,12 @@ make_write (const class mkdeps *d, FILE *fp, bool phony, unsigned int colmax)
|
||||
|
||||
/* Write out dependencies according to the selected format (which is
|
||||
only Make at the moment). */
|
||||
/* Really we should be opening fp here. */
|
||||
|
||||
void
|
||||
deps_write (const class mkdeps *d, FILE *fp, bool phony, unsigned int colmax)
|
||||
deps_write (const cpp_reader *pfile, FILE *fp, unsigned int colmax)
|
||||
{
|
||||
make_write (d, fp, phony, colmax);
|
||||
make_write (pfile, fp, colmax);
|
||||
}
|
||||
|
||||
/* Write out a deps buffer to a file, in a form that can be read back
|
||||
|
Loading…
Reference in New Issue
Block a user