libcpp: dependency emission tidying
authorNathan Sidwell <nathan@acm.org>
Tue, 3 Nov 2020 12:59:48 +0000 (04:59 -0800)
committerNathan Sidwell <nathan@acm.org>
Tue, 3 Nov 2020 13:16:19 +0000 (05:16 -0800)
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.

gcc/c-family/c.opt
gcc/fortran/cpp.c
libcpp/directives.c
libcpp/include/mkdeps.h
libcpp/init.c
libcpp/mkdeps.c

index 10e53ea67c90191d72928eaf787ff92371b5e8f2..426636be83956304535dbb61041c20b8b17fd8ce 100644 (file)
@@ -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++
index dcde5576cd5640850cfa8ce3b7c30b38d0da2cc4..51baf141711353079cef0a20b00cd277959349c1 100644 (file)
@@ -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.  */
index d7b59aae90149e10843f6f2f8bc3d9e8eb87ed56..4295a67f1e5de812e7c6281e221571fdf9075d69 100644 (file)
@@ -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;
 }
index 6d05351cb4ada44212ffdc24c69904ead9730b4d..593b718aaeb07238dab0abdcd3041b9435b52bb2 100644 (file)
@@ -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
index 454a183134af9d4eea8be5a0d02915419141af08..5b2607e3767ee2dad7ae4c073055ceba0fba68e7 100644 (file)
@@ -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))
index 09a111fcdd5038d208ad677234ed089ee7e2e3b4..ea5f060c380e3e0231bda11fefba2381b216a538 100644 (file)
@@ -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