cppinit.c (init_dependency_output): Take deps output file from -o if none given with...
authorNeil Booth <neil@daikokuya.demon.co.uk>
Wed, 20 Feb 2002 07:24:10 +0000 (07:24 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Wed, 20 Feb 2002 07:24:10 +0000 (07:24 +0000)
* cppinit.c (init_dependency_output): Take deps output file
from -o if none given with -MF.  Suppress normal output.
* gcc.c (cpp_unique_options): Have -M and -MM imply -E.
* doc/cpp.texi, doc/invoke.texi: Update.

From-SVN: r49892

gcc/ChangeLog
gcc/cppinit.c
gcc/doc/cpp.texi
gcc/doc/invoke.texi
gcc/gcc.c

index e5bc35e6e3ff26ac9af00214e54066c9f1b85251..22577cd8da38b219fcc1c373aab2d2e0b00a93fa 100644 (file)
@@ -1,3 +1,10 @@
+2002-02-20  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+       * cppinit.c (init_dependency_output): Take deps output file
+       from -o if none given with -MF.  Suppress normal output.
+       * gcc.c (cpp_unique_options): Have -M and -MM imply -E. 
+       * doc/cpp.texi, doc/invoke.texi: Update.
+
 2002-02-19  Zack Weinberg  <zack@codesourcery.com>
 
        * toplev.c (output_quoted_string): Write unprintable
index b5ad93719e4c5e7b113919d5e13ed4a3e05bdf30..efaf3166afb6303b54e3add8d222c9f6ed1c7fc2 100644 (file)
@@ -1084,7 +1084,7 @@ output_deps (pfile)
   const char *const deps_mode =
     CPP_OPTION (pfile, print_deps_append) ? "a" : "w";
 
-  if (CPP_OPTION (pfile, deps_file) == 0)
+  if (CPP_OPTION (pfile, deps_file)[0] == '\0')
     deps_stream = stdout;
   else
     {
@@ -1835,7 +1835,8 @@ cpp_post_options (pfile)
     cpp_fatal (pfile, "you must additionally specify either -M or -MM");
 }
 
-/* Set up dependency-file output.  */
+/* Set up dependency-file output.  On exit, if print_deps is non-zero
+   then deps_file is not NULL; stdout is the empty string.  */
 static void
 init_dependency_output (pfile)
      cpp_reader *pfile;
@@ -1874,21 +1875,22 @@ init_dependency_output (pfile)
       else
        output_file = spec;
 
-      /* Command line overrides environment variables.  */
-      if (CPP_OPTION (pfile, deps_file) == 0)
-       CPP_OPTION (pfile, deps_file) = output_file;
       CPP_OPTION (pfile, print_deps_append) = 1;
     }
+  else
+    /* If -M or -MM was seen, default output to wherever was specified
+       with -o.  out_fname is non-NULL here.  */
+    output_file = CPP_OPTION (pfile, out_fname);
 
-  /* If dependencies go to standard output, or -MG is used, we should
-     suppress output, including -dM, -dI etc.  */
-  if (CPP_OPTION (pfile, deps_file) == 0
-      || CPP_OPTION (pfile, print_deps_missing_files))
-    {
-      CPP_OPTION (pfile, no_output) = 1;
-      CPP_OPTION (pfile, dump_macros) = 0;
-      CPP_OPTION (pfile, dump_includes) = 0;
-    }
+  /* Command line -MF overrides environment variables and default.  */
+  if (CPP_OPTION (pfile, deps_file) == 0)
+    CPP_OPTION (pfile, deps_file) = output_file;
+
+  /* When doing dependencies, we should suppress all output, including
+     -dM, -dI etc.  */
+  CPP_OPTION (pfile, no_output) = 1;
+  CPP_OPTION (pfile, dump_macros) = 0;
+  CPP_OPTION (pfile, dump_includes) = 0;
 }
 
 /* Handle --help output.  */
index 3572384613cf817b607d08e0b72978ba9c6660a1..f22e855d993e005a50b6ec42df68fc8f7fc595d8 100644 (file)
@@ -3956,6 +3956,8 @@ suffix replaced with object file suffix.  If there are many included
 files then the rule is split into several lines using @samp{\}-newline.
 The rule has no commands.
 
+Passing @option{-M} to the driver implies @option{-E}.
+
 @item -MM
 Like @option{-M}, but mention only the files included with @code{@w{#include
 "@var{file}"}} or with @option{-include} or @option{-imacros} command line
@@ -3963,10 +3965,14 @@ options.  System header files included with @code{@w{#include <@var{file}>}}
 are omitted.
 
 @item -MF @var{file}
-When used with @option{-M} or @option{-MM}, specifies a file to write the
-dependencies to.  This allows the preprocessor to write the preprocessed
-file to stdout normally.  If no @option{-MF} switch is given, CPP sends
-the rules to stdout and suppresses normal preprocessed output.
+@anchor{-MF}
+When used with @option{-M} or @option{-MM}, specifies a
+file to write the dependencies to.  If no @option{-MF} switch is given
+the preprocessor sends the rules to the same place it would have sent
+preprocessed output.
+
+When used with the driver options @option{-MD} or @option{-MMD},
+@option{-MF} overrides the default dependency output file.
 
 @item -MG
 When used with @option{-M} or @option{-MM}, @option{-MG} says to treat missing
@@ -4019,14 +4025,24 @@ $$(objpfx)foo.o: foo.c
 The default target is automatically quoted, as if it were given with
 @option{-MQ}.
 
-@item -MD @var{file}
-@itemx -MMD @var{file}
-@option{-MD @var{file}} is equivalent to @option{-M -MF @var{file}}, and
-@option{-MMD @var{file}} is equivalent to @option{-MM -MF @var{file}}.
+@item -MD
+@option{-MD} is equivalent to @option{-M -MF @var{file}}, except that
+@option{-E} is not implied.  The driver determines @var{file} based on
+whether an @option{-o} option is given.  If it is, the driver uses its
+argument but with a suffix of @file{.d}, otherwise it take the
+basename of the input file and applies a @file{.d} suffix.
+
+If @option{-MD} is used in conjunction with @option{-E}, any
+@option{-o} switch is understood to specify the dependency output file
+(but @pxref{-MF}), but if used without @option{-E}, each @option{-o}
+is understood to specify a target object file.
+
+Since @option{-E} is not implied, @option{-MD} can be used to generate
+a dependency output file as a side-effect of the compilation process.
 
-Due to limitations in the compiler driver, you must use these switches
-when you want to generate a dependency file as a side-effect of normal
-compilation.
+@item -MMD
+Like @option{-MD} except mention only user header files, not system
+-header files.
 
 @item -x c
 @itemx -x c++
index 10d9521ec96549e8969420b83179415286867fd1..a0e44d584a56b182eddc199756e5a001e5365ed7 100644 (file)
@@ -4029,15 +4029,19 @@ Used with the @option{-E} option.
 @item -M
 @opindex M
 Instead of outputting the result of preprocessing, output a rule
-suitable for @code{make} describing the dependencies of the main source
-file.  The preprocessor outputs one @code{make} rule containing the
-object file name for that source file, a colon, and the names of all the
-included files.  Unless overridden explicitly, the object file name
-consists of the basename of the source file with any suffix replaced with
-object file suffix.  If there are many included files then the
-rule is split into several lines using @samp{\}-newline.
+suitable for @command{make} describing the dependencies of the main
+source file.  The preprocessor outputs one @command{make} rule containing
+the object file name for that source file, a colon, and the names of all
+the included files, including those coming from @option{-include} or
+@option{-imacros} command line options.
 
-@option{-M} implies @option{-E}.
+Unless specified explicitly (with @option{-MT} or @option{-MQ}), the
+object file name consists of the basename of the source file with any
+suffix replaced with object file suffix.  If there are many included
+files then the rule is split into several lines using @samp{\}-newline.
+The rule has no commands.
+
+Passing @option{-M} to the driver implies @option{-E}.
 
 @item -MM
 @opindex MM
@@ -4047,13 +4051,19 @@ Like @option{-M}, but mention only the files included with @samp{#include
 
 @item -MD
 @opindex MD
-Like @option{-M} but the dependency information is written to a file
-rather than stdout.  @code{gcc} will use the same file name and
-directory as the object file, but with the suffix @file{.d} instead.
+@option{-MD} is equivalent to @option{-M -MF @var{file}}, except that
+@option{-E} is not implied.  The driver determines @var{file} based on
+whether an @option{-o} option is given.  If it is, the driver uses its
+argument but with a suffix of @file{.d}, otherwise it take the
+basename of the input file and applies a @file{.d} suffix.
+
+If @option{-MD} is used in conjunction with @option{-E}, any
+@option{-o} switch is understood to specify the dependency output file
+(but @pxref{-MF}), but if used without @option{-E}, each @option{-o}
+is understood to specify a target object file.
 
-This is in addition to compiling the main file as specified---@option{-MD}
-does not inhibit ordinary compilation the way @option{-M} does,
-unless you also specify @option{-MG}.
+Since @option{-E} is not implied, @option{-MD} can be used to generate
+a dependency output file as a side-effect of the compilation process.
 
 With Mach, you can use the utility @code{md} to merge multiple
 dependency files into a single dependency file suitable for using with
@@ -4066,10 +4076,14 @@ Like @option{-MD} except mention only user header files, not system
 
 @item -MF @var{file}
 @opindex MF
-When used with @option{-M} or @option{-MM}, specifies a file to write the
-dependencies to.  This allows the preprocessor to write the preprocessed
-file to stdout normally.  If no @option{-MF} switch is given, CPP sends
-the rules to stdout and suppresses normal preprocessed output.
+@anchor{-MF}
+When used with @option{-M} or @option{-MM}, specifies a
+file to write the dependencies to.  If no @option{-MF} switch is given
+the preprocessor sends the rules to the same place it would have sent
+preprocessed output.
+
+When used with the driver options @option{-MD} or @option{-MMD},
+@option{-MF} overrides the default dependency output file.
 
 Another way to specify output of a @code{make} rule is by setting
 the environment variable @env{DEPENDENCIES_OUTPUT} (@pxref{Environment
index ae4bc6379be2f63d88f33cc0583fbb5dbcdd42b6..1fcd8f328229b7b2e89f6f4f2fb65cba8499cc56 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -665,7 +665,8 @@ static const char *cpp_unique_options =
  %{nostdinc*} %{C} %{v} %{I*} %{P} %{$} %I\
  %{MD:-M -MF %W{!o: %b.d}%W{o*:%.d%*}}\
  %{MMD:-MM -MF %W{!o: %b.d}%W{o*:%.d%*}}\
- %{M} %{MM} %W{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{M|MD|MM|MMD:%{o*:-MQ %*}}}\
+ %{M} %{MM} %W{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
+ %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}}\
  %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
  %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
  %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
@@ -674,7 +675,7 @@ static const char *cpp_unique_options =
  %{ffreestanding:-D__STDC_HOSTED__=0} %{fno-hosted:-D__STDC_HOSTED__=0}\
  %{!ffreestanding:%{!fno-hosted:-D__STDC_HOSTED__=1}} %{remap}\
  %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i\
- %{E:%W{o*}}";
+ %{E|M|MM:%W{o*}}";
 
 /* This contains cpp options which are common with cc1_options and are passed
    only when preprocessing only to avoid duplication.  */