Commit feb4589d by Martin Liska Committed by Martin Liska

gcov: add new option -t that prints output to stdout (PR gcov-profile/84846).

2018-05-18  Martin Liska  <mliska@suse.cz>

	PR gcov-profile/84846
	* gcov.c (print_usage): Add new -t option.
	(process_args): Handle the option.
	(generate_results): Use stdout as output when requested by
	the option.
2018-05-18  Martin Liska  <mliska@suse.cz>

	PR gcov-profile/84846
	* doc/gcov.texi: Document -t option of gcov tool.

From-SVN: r260361
parent c74bd3fb
2018-05-18 Martin Liska <mliska@suse.cz> 2018-05-18 Martin Liska <mliska@suse.cz>
PR gcov-profile/84846 PR gcov-profile/84846
* doc/gcov.texi: Document -t option of gcov tool.
2018-05-18 Martin Liska <mliska@suse.cz>
PR gcov-profile/84846
* gcov.c (print_usage): Add new -t option.
(process_args): Handle the option.
(generate_results): Use stdout as output when requested by
the option.
2018-05-18 Martin Liska <mliska@suse.cz>
PR gcov-profile/84846
* coverage.c (coverage_init): Write PWD to .gcno file. * coverage.c (coverage_init): Write PWD to .gcno file.
* doc/gcov.texi: Document how working directory is printed. * doc/gcov.texi: Document how working directory is printed.
* gcov-dump.c (dump_gcov_file): Print PWD. * gcov-dump.c (dump_gcov_file): Print PWD.
......
...@@ -134,6 +134,7 @@ gcov [@option{-v}|@option{--version}] [@option{-h}|@option{--help}] ...@@ -134,6 +134,7 @@ gcov [@option{-v}|@option{--version}] [@option{-h}|@option{--help}]
[@option{-p}|@option{--preserve-paths}] [@option{-p}|@option{--preserve-paths}]
[@option{-r}|@option{--relative-only}] [@option{-r}|@option{--relative-only}]
[@option{-s}|@option{--source-prefix} @var{directory}] [@option{-s}|@option{--source-prefix} @var{directory}]
[@option{-t}|@option{--stdout}]
[@option{-u}|@option{--unconditional-branches}] [@option{-u}|@option{--unconditional-branches}]
[@option{-x}|@option{--hash-filenames}] [@option{-x}|@option{--hash-filenames}]
@var{files} @var{files}
...@@ -319,6 +320,10 @@ directory, and the pathname to the source directory is not wanted when ...@@ -319,6 +320,10 @@ directory, and the pathname to the source directory is not wanted when
determining the output file names. Note that this prefix detection is determining the output file names. Note that this prefix detection is
applied before determining whether the source file is absolute. applied before determining whether the source file is absolute.
@item -t
@itemx --stdout
Output to standard output instead of output files.
@item -u @item -u
@itemx --unconditional-branches @itemx --unconditional-branches
When branch probabilities are given, include those of unconditional branches. When branch probabilities are given, include those of unconditional branches.
......
...@@ -462,6 +462,10 @@ static int flag_unconditional = 0; ...@@ -462,6 +462,10 @@ static int flag_unconditional = 0;
static int flag_gcov_file = 1; static int flag_gcov_file = 1;
/* Output to stdout instead to a gcov file. */
static int flag_use_stdout = 0;
/* Output progress indication if this is true. This is off by default /* Output progress indication if this is true. This is off by default
and can be turned on by the -d option. */ and can be turned on by the -d option. */
...@@ -831,6 +835,7 @@ print_usage (int error_p) ...@@ -831,6 +835,7 @@ print_usage (int error_p)
fnotice (file, " -p, --preserve-paths Preserve all pathname components\n"); fnotice (file, " -p, --preserve-paths Preserve all pathname components\n");
fnotice (file, " -r, --relative-only Only show data for relative sources\n"); fnotice (file, " -r, --relative-only Only show data for relative sources\n");
fnotice (file, " -s, --source-prefix DIR Source prefix to elide\n"); fnotice (file, " -s, --source-prefix DIR Source prefix to elide\n");
fnotice (file, " -t, --stdout Output to stdout instead of a file\n");
fnotice (file, " -u, --unconditional-branches Show unconditional branch counts too\n"); fnotice (file, " -u, --unconditional-branches Show unconditional branch counts too\n");
fnotice (file, " -v, --version Print version number, then exit\n"); fnotice (file, " -v, --version Print version number, then exit\n");
fnotice (file, " -w, --verbose Print verbose informations\n"); fnotice (file, " -w, --verbose Print verbose informations\n");
...@@ -874,6 +879,7 @@ static const struct option options[] = ...@@ -874,6 +879,7 @@ static const struct option options[] =
{ "object-directory", required_argument, NULL, 'o' }, { "object-directory", required_argument, NULL, 'o' },
{ "object-file", required_argument, NULL, 'o' }, { "object-file", required_argument, NULL, 'o' },
{ "source-prefix", required_argument, NULL, 's' }, { "source-prefix", required_argument, NULL, 's' },
{ "stdout", no_argument, NULL, 't' },
{ "unconditional-branches", no_argument, NULL, 'u' }, { "unconditional-branches", no_argument, NULL, 'u' },
{ "display-progress", no_argument, NULL, 'd' }, { "display-progress", no_argument, NULL, 'd' },
{ "hash-filenames", no_argument, NULL, 'x' }, { "hash-filenames", no_argument, NULL, 'x' },
...@@ -888,7 +894,7 @@ process_args (int argc, char **argv) ...@@ -888,7 +894,7 @@ process_args (int argc, char **argv)
{ {
int opt; int opt;
const char *opts = "abcdfhijklmno:prs:uvwx"; const char *opts = "abcdfhijklmno:prs:tuvwx";
while ((opt = getopt_long (argc, argv, opts, options, NULL)) != -1) while ((opt = getopt_long (argc, argv, opts, options, NULL)) != -1)
{ {
switch (opt) switch (opt)
...@@ -952,6 +958,9 @@ process_args (int argc, char **argv) ...@@ -952,6 +958,9 @@ process_args (int argc, char **argv)
case 'w': case 'w':
flag_verbose = 1; flag_verbose = 1;
break; break;
case 't':
flag_use_stdout = 1;
break;
case 'v': case 'v':
print_version (); print_version ();
/* print_version will exit. */ /* print_version will exit. */
...@@ -1293,7 +1302,7 @@ generate_results (const char *file_name) ...@@ -1293,7 +1302,7 @@ generate_results (const char *file_name)
file_name = canonicalize_name (file_name); file_name = canonicalize_name (file_name);
} }
if (flag_gcov_file && flag_intermediate_format) if (flag_gcov_file && flag_intermediate_format && !flag_use_stdout)
{ {
/* Open the intermediate file. */ /* Open the intermediate file. */
gcov_intermediate_filename = get_gcov_intermediate_filename (file_name); gcov_intermediate_filename = get_gcov_intermediate_filename (file_name);
...@@ -1325,7 +1334,9 @@ generate_results (const char *file_name) ...@@ -1325,7 +1334,9 @@ generate_results (const char *file_name)
} }
accumulate_line_counts (src); accumulate_line_counts (src);
function_summary (&src->coverage, "File");
if (!flag_use_stdout)
function_summary (&src->coverage, "File");
total_lines += src->coverage.lines; total_lines += src->coverage.lines;
total_executed += src->coverage.lines_executed; total_executed += src->coverage.lines_executed;
if (flag_gcov_file) if (flag_gcov_file)
...@@ -1333,14 +1344,25 @@ generate_results (const char *file_name) ...@@ -1333,14 +1344,25 @@ generate_results (const char *file_name)
if (flag_intermediate_format) if (flag_intermediate_format)
/* Output the intermediate format without requiring source /* Output the intermediate format without requiring source
files. This outputs a section to a *single* file. */ files. This outputs a section to a *single* file. */
output_intermediate_file (gcov_intermediate_file, src); output_intermediate_file ((flag_use_stdout
? stdout : gcov_intermediate_file), src);
else else
output_gcov_file (file_name, src); {
fnotice (stdout, "\n"); if (flag_use_stdout)
{
if (src->coverage.lines)
output_lines (stdout, src);
}
else
{
output_gcov_file (file_name, src);
fnotice (stdout, "\n");
}
}
} }
} }
if (flag_gcov_file && flag_intermediate_format) if (flag_gcov_file && flag_intermediate_format && !flag_use_stdout)
{ {
/* Now we've finished writing the intermediate file. */ /* Now we've finished writing the intermediate file. */
fclose (gcov_intermediate_file); fclose (gcov_intermediate_file);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment