From e72c4afd99c06e29b4f73f61ee0ff9091bf7fa02 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 14 Jun 2017 16:05:57 +0000 Subject: [PATCH] Recognize '-' as special -MF argument (write to stdout) Sometimes it is useful to generate pre-processed output to a file and the dependency information to stdout for further analysis/processing. For example: g++ -E -MD -fdirectives-only -o test.ii test.cxx This will generate the dependency information to test.d (as per the documentation). While changing this behavior is probably unwise, one traditional (e.g., supported by -o) way to handle this is to recognize the special '-' file name as an instruction to write to stdout: g++ -E -MD -fdirectives-only -o test.ii -MF - test.cxx Currently this will create a file named '-'. The included patch changes this behavior to write to stdout. Note also that Clang has supported this from at least version 3.5. gcc: 2017-06-14 Boris Kolpackov * doc/cppopts.texi: Document '-' special value to -MF. gcc/c-family: 2017-06-14 Boris Kolpackov * c-opts.c (c_common_finish): Handle '-' special value to -MF. From-SVN: r249201 --- gcc/ChangeLog | 4 ++++ gcc/c-family/ChangeLog | 4 ++++ gcc/c-family/c-opts.c | 4 +++- gcc/doc/cppopts.texi | 2 ++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59ca50606de..2987e5ee8ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2017-06-14 Boris Kolpackov + + * doc/cppopts.texi: Document '-' special value to -MF. + 2017-06-14 Wilco Dijkstra * config/arm/cortex-a53.md (cortex_a53_fpalu) Adjust latency. diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 9387bb079c6..1eba1c6533a 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2017-06-14 Boris Kolpackov + + * c-opts.c (c_common_finish): Handle '-' special value to -MF. + 2017-06-13 Marek Polacek PR objc/80949 diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index be4478f5ce9..1657e7a4390 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -1150,6 +1150,8 @@ c_common_finish (void) output stream. */ if (!deps_file) deps_stream = out_stream; + else if (deps_file[0] == '-' && deps_file[1] == '\0') + deps_stream = stdout; else { deps_stream = fopen (deps_file, deps_append ? "a": "w"); @@ -1163,7 +1165,7 @@ c_common_finish (void) with cpp_destroy (). */ cpp_finish (parse_in, deps_stream); - if (deps_stream && deps_stream != out_stream + if (deps_stream && deps_stream != out_stream && deps_stream != stdout && (ferror (deps_stream) || fclose (deps_stream))) fatal_error (input_location, "closing dependency file %s: %m", deps_file); diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi index 0497712bee9..16bf22a6f38 100644 --- a/gcc/doc/cppopts.texi +++ b/gcc/doc/cppopts.texi @@ -125,6 +125,8 @@ preprocessed output. When used with the driver options @option{-MD} or @option{-MMD}, @option{-MF} overrides the default dependency output file. +If @var{file} is @file{-}, then the dependencies are written to @file{stdout}. + @item -MG @opindex MG In conjunction with an option such as @option{-M} requesting -- 2.30.2