Provided by: lcov_2.1-1_all bug

NAME

       genhtml - Generate HTML view from LCOV coverage data files

SYNOPSIS

       genhtml [-h|--help] [--version]
               [-q|--quiet] [-v|--verbose] [--debug]
               [-s|--show-details]
               [-f|--frames]
               [-b|--baseline-file baseline-file-pattern]
               [-o|--output-directory output-directory]
               [--header-title banner]
               [--footer string]
               [-t|--title title]
               [-d|--description-file description-file]
               [-k|--keep-descriptions] [-c|--css-file css-file]
               [-p|--prefix prefix] [--no-prefix]
               [--source-directory dirname]
               [--no-source] [--num-spaces num] [--highlight]
               [--legend] [--html-prolog prolog-file]
               [--html-epilog epilog-file] [--html-extension extension]
               [--html-gzip] [--sort] [--no-sort]
               [--function-coverage] [--no-function-coverage]
               [--branch-coverage] [--no-branch-coverage]
               [--demangle-cpp [param]]
               [--ignore-errors errors]
               [--keep-going] [--config-file config-file] [--rc keyword=value]
               [--precision num] [--missed]
               [--suppress-aliases]
               [--forget-test-names]
               [--dark-mode]
               [--baseline-title title]
               [--baseline-date date]
               [--current-date date]
               [--diff-file diff-file]
               [--annotate-script script]
               [--criteria-script script]
               [--version-script script]
               [--resolve-script script]
               [--select-script script]
               [--checksum]
               [--new-file-as-baseline]
               [--elide-path-mismatch]
               [--synthesize-missing]
               [--date-bins day[,day,...]]
               [--show-owners [all]]
               [--show-noncode]
               [--show-zero-columns]
               [--show-navigation]
               [--show-proportions]
               [--simplified-colors]
               [--hierarchical] [--flat]
               [--filter filters]
               [--include glob_pattern]
               [--exclude glob_pattern]
               [--erase-functions regexp_pattern]
               [--substitute regexp_pattern]
               [--omit-lines regexp_pattern]
               [--parallel|-j [integer]]
               [--memory integer_num_Mb]
               [--tempdir dirname]
               [--preserve]
               [--save]
               tracefile_pattern(s)

DESCRIPTION

       genhtml  creates  an HTML view of coverage data found in tracefiles geninfo and lcov tools
       which are found from glob-match pattern(s) tracefile_pattern.
        Features include:

       •  Differential coverage comparison against baseline coverage data

       •  Annotation of reports with date and owner information ("binning")

       The basic concepts of differential coverage and date/owner binning are  described  in  the
       paper found at https://arxiv.org/abs/2008.07947

   Differential coverage
       Differential  coverage compares two versions of source code - the baseline and the current
       versions - and the coverage results for each to segment the code into categories.

       To create a differential coverage report, genhtml requires

       1. one or more baseline-files specified via --baseline-file, and

       2. a patch file in unified format specified using --diff-file.

       Both tracefile_pattern and baseline-file are treated as glob patterns which match  one  or
       more files.

       The  difference in coverage between the set of tracefiles and baseline-files is classified
       line-by-line into categories based on changes in 2 aspects:

       1. Test coverage results: a line of code can be tested (1), untested (0), or  unused  (#).
          An  unused line is a source code line that has no associated coverage data, for example
          due to a disabled #ifdef statement.

       2. Source code changes: a line can be unchanged, added (+ =>), or  removed  (=> -).   Note
          that  the  diff-file  format used by genhtml reports changes in lines as removal of old
          line and addition of new line.

       Below are the resulting 12 categories, sorted by priority (assuming that untested code  is
       more interesting than tested code, and new code is more interesting than old code):

       UNC
              Uncovered New Code (+ => 0): newly added code is not tested.

       LBC
              Lost Baseline Coverage (1 => 0): unchanged code is no longer tested.

       UIC
              Uncovered Included Code (# => 0): previously unused code is untested.

       UBC
              Uncovered  Baseline  Code (0 => 0): unchanged code was untested before, is untested
              now.

       GBC
              Gained Baseline Coverage (0 => 1): unchanged code is tested now.

       GIC
              Gained Included Coverage (# => 1): previously unused code is tested now.

       GNC
              Gained New Coverage (+ => 1): newly added code is tested.

       CBC
              Covered Baseline Code (1 => 1): unchanged code  was  tested  before  and  is  still
              tested.

       EUB
              Excluded Uncovered Baseline (0 => #): previously untested code is unused now.

       ECB
              Excluded Covered Baseline (1 => #): previously tested code is unused now.

       DUB
              Deleted Uncovered Baseline (0 => -): previously untested code has been deleted.

              Note:  Because  these lines are not represented in the current source version, they
              are only represented in the classification summary table.

       DCB
              Deleted Covered Baseline (1 => -): previously tested code has been deleted.

              Note: Because these lines are not represented in the current source  version,  they
              are only represented in the classification summary table.

       The  differential  coverage  report  colorizes categorized regions in the source code view
       using unique colors for each.  You can use the --simplified-colors option to  instead  use
       one color for 'covered' code and another for 'uncovered'.

   Date and owner binning
       Date binning annotates coverage reports with age-of-last-change information to distinguish
       recently added or modified code which has not been tested from older, presumed stable code
       which  is  also  not  tested.   Owner  binning  adds  annotation identifying the author of
       changes.

       Both age and ownership reporting can be used to enhance  team  efforts  to  maintain  good
       coverage discipline by spotlighting coverage shortfalls in recently modified code, even in
       the absence of baseline coverage data.

       To enable date and owner binning, the --annotate-script option must be used to  specify  a
       script that provides source code line age and ownership information.

       For  each source line, age is the interval since the most recent modification date and the
       owner is the user identity responsible for the most recent change to that line.

       Line coverage overall totals and counts for each of the 12 classification  categories  are
       collected for each of the specified age ranges (see the --date-bins option, below).

   Script conventions
       Some  genhtml  options  expect  the  name of an external script or tool as argument. These
       scripts are then run as part of the  associated  function.  This  includes  the  following
       options:

              --annotate-script
              --criteria-script
              --resolve-script
              --select-script
              --version-script

       While  each  script  performs a separate function there are some common aspects in the way
       these options are handled:

       1. If the callback script name ends in .pm then the script is assumed to be a Perl module.
          A perl module may offer performance advantages  over  an  external  script,  as  it  is
          compiled  once  and  loaded  into  the interpreter and because it can load and maintain
          internal state.
          The module is expected to export a method 'new', which is called with the  script  name
          and  the  script  parameters (if any) as arguments.  It is expected to return an object
          which implements several standard methods:
          $callback_obj = packagename->new(perl_module_file, args);

          version-script
             $version = $callback_obj->extract_version($source_file_ename);
             $match       =       $callback_obj->check_version($old_version,        $new_version,
             $source_file_name);

             $match
                 is  expected  to  be  1  (true) if the version keys refer to the came file and 0
                (false) otherwise.

             $version
                 is a string representing a unique identifier of the particular  version  of  the
                file

          See  example  implementations  $LCOV_HOME/share/lcov/support-scripts/gitversion.pm  and
          $LCOV_HOME/share/lcov/support-scripts/getp4version.pm.

          annotate-script
             ($status, $array) = $callback_obj->annotate($source_file_name);

             where

             $status
                 is 0 if the command succeeded and nonzero otherwise.  $status is interpreted  in
                same way as the return code from 'system(..)'

             $array
                is a list of line data of the form:
                [$text, $abbrev, $full_name, $when, $changelist].

             and

             $text
                is the source text from the corresponding line (without newline termination)

             $abbrev
                is  the "abbreviated author name" responsible for this line of code.  This is the
                name  that  will  be  used  in  the  various  HTML  tables.   For  example,   for
                brevity/readability,  you  may  want  to strip the domain from developers who are
                inside your organization.  If there is  no  associated  author,  then  the  value
                should be

             $full_name
                is  the  "full  author  name"  which  is  used  in  annotation tooltips.  See the
                genhtml_annotate_tooltip entry in man lcovrc(5).  $fullname may be undef  if  the
                full name and abbreviated names are the same.

             $when
                is  the  timestamp associated with the most recent edit of the corresponding line
                and may be if there is no associated time.

             $changelist
                is the commit identifier associated with the most recent change to this line,  or
                if there isn't one.

             See  example  implementations  $LCOV_HOME/share/lcov/support-scripts/gitblame.pm and
             $LCOV_HOME/share/lcov/support-scripts/p4annotate.pm.

          criteria-script
             ($status, $array) = $callback_obj->check_criteria($obj_name, $type, $json);

             where

             $obj_name
                is the source file or directory name, or

             $type
                is the object type - either

             $json
                is the coverage data associated with this object, in JSON format - see below.

             $status
                is the return status of the operation, interpreted the same way as  the  annotate
                callback status, described above.

             $array
                is  a  reference  to  a  possibly empty list of strings which will be reported by
                genhtml.  The strings are are expected  to  explain  why  the  coverage  criteria
                failed.

             See example implementations $LCOV_HOME/share/lcov/support-scripts/criteria.pm.

          resolve-script
             $newpath = $callback_obj->resolve($source_file_name)

             where  $newpath  is  the  correct  path to the indicated source file or undef if the
             source file is not found by the callback.

       2. The option may be specified as a single split_char separated  string  which  is  divied
          into words (see man lcovrc(5) ), or as a list of arguments.  The resulting command line
          is passed to a shell interpreter to be executed.  The command line includes the  script
          path followed by optional additional parameters separated by spaces. Care must be taken
          to provide proper quoting if script path or any  parameter  contains  spaces  or  shell
          special characters.

       3. If  an  option  is specified multiple times, then the parameters are not split, but are
          simply concatentated to form the command line - see the examples, below.
          For simplicity and ease of understanding:  your command line should pass all  arguments
          individually, or all as a comma-separated list - not a mix of the two.

       4. genhtml  passes  any  additional  parameters specified via option arguments between the
          script path and the parameters required by the script's function.

       Example:

              genhtml --annotate-script /bin/script.sh
                      --annotate-script arg0 ...

              results in the same callback as

              genhtml --annotate-script "/bin/script.sh arg0" ...

              or

              genhtml --annotate-script /bin/script.sh,arg0 ...

              Note that the first form is preferred.

       The resulting genhtml callback executes the command line:

              /bin/script.sh arg0 source_file_name

       Similarly
              genhtml --annotate-script /bin/myMoodule.pm
                      --annotate-script arg0 --annotate-script arg1 ...

              or
              genhtml --annotate-script /bin/myMoodule.pm,arg0,arg1

       result in genhtml executing

              $annotateCallback = myModule->new(arg0, arg1);

       to initialize the class object - arg0 and arg1 passed as strings - and then to execute

              ($status, $arrayRef) = $annotateCallback( source_file_name );

       to retrieve the annotation information.

       In contrast, the command
              genhtml --annotate-script /bin/myMoodule.pm
                      --annotate-script arg0,arg1 ...
       would result in genhtml initializing the callback object via

              $annotateCallback = myModule->new("arg0,arg1");
       where "arg0,arg1" is passed as single comma-separated string.

       Similarly, the command
              genhtml --annotate-script /bin/myMoodule.pm,arg0
                      --annotate-script arg1 ...
       would very likely result  in  an  error  when  genhtml  tries  to  find  a  script  called
       "/bin/mymodule.pm,arg0".

       Note  that  multiple instances of each script may execute simultaneously if the --parallel
       option was specified. Therefore each script must either be reentrant or should arrange for
       its own synchronization, if necessary.
       In particular, if your callback is implemented via a perl module:

       -  the  class  object  associated  with  the  module  will initialized once (in the parent
          process)

       -  The callback will occur in the child process (possibly simultaneously with other  child
          processes).

       As  a  result:   if  your callback needs to pass data back to the parent, you will need to
       arrange a communication mechanism to do so.

   Additional considerations
       If the --criteria-script option is  used,  genhtml  will  use  the  referenced  script  to
       determine whether your coverage criteria have been met - and will return a non-zero status
       and print a message if the criteria are not met.

       The --version-script option is  used  to  verify  that  the  same/compatible  source  code
       versions  are  displayed  as were used to capture coverage data, as well as to verify that
       the same source code was used to capture coverage information which is going to be  merged
       and to verify that the source version used for filtering operations is compatible with the
       version used to generate the data.

       HTML  output  files  are  created  in   the   current   working   directory   unless   the
       --output-directory  option  is  used. If tracefile or baseline-file ends with ".gz", it is
       assumed to be  GZIP-compressed  and  the  gunzip  tool  will  be  used  to  decompress  it
       transparently.

       Note  that  all source code files have to be present and readable at the exact file system
       location they were compiled, and all path references in the input data ".info" and  "diff"
       files must match exactly (i.e., exact string match).

       Further,  the  --version-script,  --annotate-script, and --criteria-script scripts use the
       same path strings. However, see  the  --substitute  and  --resolve-script  options  for  a
       mechanism  to  adjust  extracted  paths  so they match your source and/or revision control
       layout.

       You can use the check_exisitence_before_callback configuration option to tell the tool  to
       check  that  the  file  exists  before  calling  the --version-script or --annotate-script
       callback. See man lcovrc(5) for details.

   Additional options
       Use option --diff-file to supply a unified diff file that represents the  changes  to  the
       source  code  files  between  the  version  used to compile and capture the baseline trace
       files, and the version used to compile and capture the current trace files.

       Use option --css-file to modify layout and colors of the generated HTML output. Files  are
       marked in different colors depending on the associated coverage rate.

       By default, the coverage limits for low, medium and high coverage are set to 0-75%, 75-90%
       and 90-100% percent respectively. To change these values, use configuration file options.

              genhtml_hi_limit and genhtml_med_limit

       or type-specific limits:

              genhtml_line_hi_limit and genhtml_line_med_limit
              genhtml_branch_hi_limit and genhtml_branch_med_limit
              genhtml_function_hi_limit and genhtml_function_med_limit

       See man lcovrc(5) for details.

       Also note that when displaying percentages, 0% and 100% are only printed when  the  values
       are  exactly  0% and 100% respectively. Other values which would conventionally be rounded
       to 0% or 100% are instead printed as nearest  non-boundary  value.  This  behavior  is  in
       accordance with that of the gcov(1) tool.

       By  default,  genhtml  reports  will include both line and function coverage data.  Branch
       data is not displayed by default; you can  use  the  --branch-coverage  option  to  enable
       branch  coverage - or you can permanently enable branch coverage by adding the appropriate
       settings to your personal, group, or site lcov configuration file.  See man lcovrc(5)  for
       details.

OPTIONS

       -h
       --help
              Print a short help text, then exit.

       --version
              Print version number, then exit.

       -v
       --verbose
              Increment  informational  message verbosity.  This is mainly used for script and/or
              flow debugging - e.g., to figure out which data files are found, where.   Also  see
              the --quiet flag.

       -q
       --quiet
              Decrement informational message verbosity.

              Decreased verbosity will suppress 'progress' messages for example - while error and
              warning messages will continue to be printed.

       --debug
              Increment 'debug messages' verbosity.  This is useful primarily to  developers  who
              want to enhance the lcov tool suite.

       --flat
       --hierarchical
              Use the specified HTML report hierarchy layout.

              The default HTML report is 3 levels:

                1. top-level: table of all directories,

                2. directory: table of source files in a directory, and

                3. source file detail: annotated source code.

              Option  --hierarchical  produces  a  multilevel  report which follows the directory
              structure of the source code (similar to the file tool in Microsoft Windows).

              Option --flat produces a two-level HTML report:

                1. top-level: table of all project source files, and

                2. source file detail: annotated source code.

              The 'flat' view can reduce the number of clicks required  to  navigate  around  the
              coverage  report  -  but is unwieldy except for rather small projects consisting of
              only a few source files.  It can be useful in 'code review'  mode,  even  for  very
              large projects (see the --select-script option).
              Most  large  projects  follow  a  rational  directory  structure - which favors the
              'hierarchical' report format.  Teams responsible for a particular module can  focus
              on a specific subdirectory or set of subdirectories.

              Only one of options --flat or --hierarchical can be specified at the same time.

              These  options can also be persistently set via the lcovrc configuration file using
              either:

                     genhtml_hierarchical = 1

              or

                     genhtml_flat_view = 1

              See man lcovrc(5) for details.

       -f
       --frames
              Use HTML frames for source code view.

              If enabled, a frameset is created for each source code file, providing an  overview
              of  the  source  code  as a "clickable" image. Note that this option will slow down
              output creation noticeably because each source code character has to  be  inspected
              once.  Note  also that the GD.pm Perl module has to be installed for this option to
              work (it may be obtained from http://www.cpan.org).

              This option can also be controlled from the  genhtml_frames  entry  of  the  lcovrc
              file.

              Please note that there is a bug in firefox and in chrome, such that enabling frames
              will disable hyperlinks from the 'directory' level summary table entry to the first
              line  in  the  corresponding  file  in the particular category - e.g., to the first
              'MIS' line (vanilla coverage report - see the option, below), to  the  first  'UNC'
              branch  (differential  coverage  repot), etc.  Hyperlinks from the summary table at
              the top of the 'source detail' page are not affected.

       -s
       --show-details
              Generate detailed directory view.

              When this option is enabled, genhtml generates two versions  of  each  source  file
              file entry in the corresponding summary table:

                     one containing the standard information plus a link to a "detailed" version,
                     and

                     a second which contains the  number  of  coverpoints  in  the  hit  by  each
                     testcase.
                     Note  that  missed coverpoints are not shown in the per-testcase table entry
                     data.

              The corresponding summary table is found on the 'directory'  page  of  the  default
              3-level  genthm  report, or on the top-level page of the 'flat' report (see genhtml
              --flat ...  ), or on the parent directory page of the  'hierarchical'  report  (see
              genhtml --hierarchical ...  ).

       -b baseline-file-pattern
       --baseline-file baseline-file-pattern
              Use  data  in  the  files found from glob pattern baseline-file-pattern as coverage
              baseline.

              --baseline-file may be specified multiple times - for example, if you have multiple
              trace  data files for each of several test suites and you do not want to go through
              the additional step of merging all of them into a single aggregated data file.

              The coverage data files specified by baseline-file-pattern is read and used as  the
              baseline  for classifying the change in coverage represented by the coverage counts
              in tracefile-patterns.  If baseline-file-pattern is a directory, then genhtml  will
              search  the directory for all files ending in '.info'.  See the info_file_extension
              section in man(5) lcovrc for how to change this pattern.

              In general, you should specify a diff file in unified diff format  via  --diff-file
              when  you  specify  a  --baseline-file-pattern.   Without a diff file, genhtml will
              assume that there are no source differences between 'baseline' and 'current'.   For
              example:   this might be used to find incremental changes caused by the addition of
              more testcases, or to compare coverage results between gcc versions, or between gcc
              and llvm.

       --baseline-title title
              Use title as the descriptive label text for the source of coverage baseline data.

       --baseline-date date
              Use  date as the collection date in text format for the coverage baseline data.  If
              this argument is not specified, the default is to use  the  creation  time  of  the
              first  file  matched  by  baseline-file-pattern as the baseline date.  If there are
              multiple baseline files, then the creation date of the first file is used.

       --current-date date
              Use date as the collection date in text format for the coverage baseline data.   If
              this  argument  is  not  specified,  the default is to use the creation time of the
              current tracefile.

       --diff-file diff-file
              Use the diff-file as the definition for source  file  changes  between  the  sample
              points for baseline-file-pattern and tracefile(s).

              A suitable diff-file can be generated using the command:

                     git diff --relative <SHA_base> <SHA_current>

              or  using  the  "p4udiff"  or "gitdiff" sample scripts that are provided as part of
              this package in the following locations:

                     /usr/share/lcov//support-scripts/p4udiff

              and

                     /usr/share/lcov//support-scripts/gitdiff

              p4udiff accepts either a changelist ID or the literal string  "sandbox";  "sandbox"
              indicates that there are modified files which have not been checked in.

              These  scripts  post-process  the 'p4' or 'git' output to (optionally) remove files
              that are not of interest and to explicitly note files which have not  changed.   It
              is useful to note unchanged files denoted by lines of the form:

                     diff [optional header strings]
                     === file_path

              in the p4diff/gitdiff output as this knowledge will help to suppress spurious 'path
              mismatch' warnings.  See the --elide-path-mismatch option, below.

              In general, you will specify --baseline-file when  you  specify  --diff-file.   The
              baseline_files  are  used to compute coverage differences ( e.g.  gains and losses)
              between the baseline and current, where the  diff_file  is  used  to  compute  code
              changes:   source  text  is  identical  between  'baseline'  and 'current'.  If you
              specify baseline_files but no diff_file, the tool will assume  that  there  are  no
              code  changes  between  baseline  and  current.   If you specify a diff_file but no
              baseline_files, the tool will assume that there is no baseline  coverage  data  (no
              baseline  code was covered); as result unchanged code ( i.e., which does not appear
              in the diff_file will be categorized as eiher GIC (covered) or  UIC  (not  covered)
              while new or changed code will be categorized as either GNC or UNC.

       --annotate-script script
              Use script to get source code annotation data.

              Use this option to specify an external tool or command line that genhtml can use to
              obtain source code annotation data such as age and author of the  last  change  for
              each source code line.

              This option also instructs genhtml to add a summary table to the HTML report header
              that shows counts in the various coverage categories,  associated  with  each  date
              bin.  In  addition,  each  source  code  line  will show age and owner information.
              Annotation data is also used to populate a 'tooltip' which appears when  the  mouse
              hovers  over the associated source code.  See the genhtml_annotate_tooltip entry in
              man lcovrc(5) for details.

              The specified script is expected to obtain age and ownership information  for  each
              source code line from the revision management system and to output this information
              in the format described below.

              If the annotate script fails and annotation errors are ignored via --ignore-errors,
              then genhtml will try to load the source file normally.  If the file is not present
              or not readable, and the --synthesize-missing flag is specified, then genhtml  will
              synthesize fake data for the file.

              genhtml  will emit an error if you have specified an annotation script but no files
              are successfully annotated (see below).  This can  happen,  for  example,  if  your
              P4USER,  P4CLIENT,  or P4PORT environment variables are not set correctly - e.g. if
              the Jenkins user who generates coverage reports is not the same and  the  user  who
              checked out the code and owns the sandbox.

              Sample  annotation  scripts  for  Perforce  ("p4annotate") and git ("gitblame") are
              provided as part of this package in the following locations:

                     /usr/share/lcov//support-scripts/p4annotate

              and

                     /usr/share/lcov//support-scripts/gitblame

              Note that these scripts generate annotations from the file version  checked  in  to
              the repository - not the locally modified file in the build directory.  If you need
              annotations for locally modified files, you can shelve your changes in P4, or check
              them in to a local branch in git.

              Creating your own script

              When  creating  your  own  script, please first see Script considerations above for
              general calling conventions and script requirements.

              script is called by genhtml with the following command line:

                     script [additional_parameters]  source_file_name

              where

                     script
                            is the script executable

                     additional_parameters
                            includes any optional parameters specified  (see  Script  conventions
                            above)

                     source_file_name
                            is the source code file name

              The  script  executable  should  output a line to the standard output stream in the
              following format for each line in file source_file_name:

                     commit_id|author_data|date|source_code

              where

                     commit_id
                            is an ID identifying the last change to the line or NONE if this file
                            is not checked in to your revision control system.
                            genhtml  counts the file as not 'successfully annotated' if commit_id
                            is NONE and as 'successfully annotated' otherwise.

                     author_data
                            identifies the author of the last change.
                            For   backward   compatibility    with    existing    annotate-script
                            implementations, two author_data formats are supported:

                            -  string  :  the string used as both the 'abbreviated name' (used as
                               'owner' name in HTML output and  callbacks)  and  as  'full  name'
                               (used in tooltip callbacks)

                            -  abbrev_string;full_name  : the author_data string contains both an
                               'abbreviated name' and a 'full name' - separated  by  a  semicolon
                               character (';').
                               This  is  useful  when  generating coverage reports for opensource
                               software components where there are many  'External'  contributors
                               who  you  do not want to distinguish in 'owner' summary tables but
                               you still want to know  who  the  actual  author  was.   (See  the
                               gitblame callback script for an example.)

                     date
                            is     the     data    of    last    change    in    W3CDTF    format
                            (<YYYY>-<MM>-<DD>T<hh>:<mm>:<ss><TZD>)

                     source_code
                            is the line's source code

              The script should return 0 (zero) if processing was successful and non-zero  if  it
              encountered an error.

       --criteria-script script
              Use script to test for coverage acceptance criteria.

              Use this option to specify an external tool or command line that genhtml can use to
              determine if coverage results meet custom acceptance criteria.   Criteria  checking
              results  are  shown  in  the standard output log of genhtml.  If at least one check
              fails, genhtml will exit with a non-zero exit code after completing its processing.

              A sample coverage criteria script is provided  as  part  of  this  package  in  the
              following location:

                     /usr/share/lcov//support-scripts/criteria

              The sample script checks that top-level line coverage meets the criteria "UNC + LBC
              + UIC == 0" (added code and newly activated  code  must  be  tested,  and  existing
              tested code must not become untested).

              As  another  example,  it  is  possible  to  create  scripts  that  mimic  the lcov
              --fail-under-lines feature by checking that the ratio of exercised lines  to  total
              lines  ("(GNC  + GIC + CBC) / (GNC + GIC + CBC + UNC + UIC + UBC)") is greater than
              the threshold - either only at the top  level,  in  every  directory,  or  wherever
              desired. Similarly, criteria may include branch and function coverage metrics.

              By  default  the  criteria  script  is called for all source code hierarchy levels,
              i.e.:  top-level,   directory,   and   file-level.   The   criteria_callback_levels
              configuration  file  option  can  be  used  to  limit  the  hierarchy levels to any
              combination of 'top', 'directory', or 'file' levels.

              Example:

                     genhtml --rc criteria_callback_levels=directory,top ...

              You  can  increase  the  amount  of  data  passed  to  the  criteria  script  using
              configuration  file  option  criteria_callback_data.  By default, only total counts
              are included. Specifying "date" adds per date-bin counts, "owner" adds  per  owner-
              bin counts.

              Example:

                     genhtml --rc criteria_callback_data=date,owner ...

              See man lcovrc(5) for more details.

              Creating your own script

              When  creating  your  own  script, please first see Script considerations above for
              general calling conventions and script requirements.

              script is run with the following command line for  each  source  code  file,  leaf-
              directory, and top-level coverage results:

                     script [additional_parameters]  name   type coverage_data

              where

                     script
                            is the script executable

                     additional_parameters
                            includes  any  optional  parameters specified (see Script conventions
                            above)

                     name
                            is the name of the object  for  which  coverage  criteria  should  be
                            checked, that is either the source code file name, directory name, or
                            "top" if the script is called for top-level data

                     type
                            is the type of source code object for which coverage criteria  should
                            be checked, that is one of "file", "directory", or "top"

                     coverage_data
                            is  either  a coverage data hash or a JSON representation of coverage
                            data hash of the corresponding source code object.  If  the  callback
                            is  a  Perl module, then the it is passes a hash object - other wise,
                            it is passed a JSON representation of that data.

              The JSON data format is defined as follows:

              {
                "<type>": {
                  "found": <count>,
                  "hit": <count>,
                  "<category>": <count>,
                  ...
                },
                "<bin_type>": {
                  "<bin_id>" : {
                    "found": <count>,
                    "hit": <count>,
                    "<category>": <count>,
                    ...
                  },
                  ...
                },
                ...
              }

              where

                     type
                            specifies the type of coverage  as  one  of  "line",  "function",  or
                            "branch"

                     bin_type
                            specifies  the  type  of  per-bin  coverage  as  one  of  "line_age",
                            "function_age", or "branch_age" for date-bin data, and  "line_owners"
                            or "branch_owners" for owner-bin data

                     bin_id
                            specifies  the  date-bin  index  for  date-bin data, and owner ID for
                            owner-bin data.

                     found
                            defines the number of found lines, functions, or branches

                     hit
                            defines the number of hit lines, functions, or branches

                     category
                            defines the number of lines, functions, or branches that fall in  the
                            specified category (see Differential coverage above)

              Note that data is only reported for non-empty coverage types and bins.

              The script should return 0 (zero) if the criteria are met and non-zero otherwise.

              If  desired, it may print a single line output string which will be appended to the
              error log if the return status is  non-zero.   Additionally,  non-empty  lines  are
              appended to the genhtml standard output log.

       --version-script script
              Use script to get source code file version data.

              Use this option to specify an external tool or command line that genhtml can use to
              obtain a source code file's version ID when  generating  HTML  or  applying  source
              filters (see --filter option).

              A  version  ID can be a file hash or commit ID from revision control. It is used to
              check the version of the source file which is loaded against the version which  was
              used to generate coverage data (i.e., the file version seen by lcov/geninfo). It is
              important that source code versions match -  otherwise  inconsistent  or  confusing
              results may be produced.

              Version  mismatches  typically  happen  when the tasks of capture, aggregation, and
              report generation are split between multiple jobs - e.g., when the same source code
              is used in multiple projects, a unified/global coverage report is required, and the
              projects accidentally use different revisions.

              If your .info (coverage data) file does  not  contain  version  information  -  for
              example, because it was generated by a tool which did not support versioning - then
              you can use the compute_file_version  = 1 config file option to generate  the  data
              afterward.   A  convenient  way  to do this might be to use lcov --add-tracefile to
              read the original file, insert version information, and write out the result.   See
              man lcovrc(5) for more details.

              Sample  scripts  for Perforce ("getp4version"), git ("gitversion") and using an md5
              hash ("get_signature") are provided as  part  of  this  package  in  the  following
              locations:

                     /usr/share/lcov//support-scripts/getp4version

                     /usr/share/lcov//support-scripts/gitversion

              and

                     /usr/share/lcov//support-scripts/get_signature

              Note that you must use the same script/same mechanism to determine the file version
              when you extract, merge, and  display  coverage  data  -  otherwise,  you  may  see
              spurious mismatch reports.

              Creating your own script

              When  creating  your  own  script, please first see Script considerations above for
              general calling conventions and script requirements.

              script is used both to generate and to compare the version ID to  enable  retaining
              history  between  calls  or to do more complex processing to determine equivalence.
              It will be called by genhtml with either of the following command lines:

              1. Determine source file version ID

                     script source_file_name

              It should write the version ID of  source_file_name to stdout and return a  0  exit
              status.  If the file is not versioned, it should write an empty string and return a
              0 exit status.

              2. Compare source file version IDs

                     script --compare  source_file_name source_file_id
                                       info_file_id

              where

                     source_file_name
                            is the source code file name

                     source_file_id
                            is the version ID returned by calling "script source_file_name"

                     info_file_id
                            is the version ID found in the corresponding .info file

              It should return non-zero if the IDs do not match.

       --resolve-script script
              Use script to find the file path for some source file which  which  appears  in  an
              input  data  file if the file is not found after applying --substitute patterns and
              searching  the  --source-directory  list.   This  option  is  equivalent   to   the
              resolve_script config file option. See man lcovrc(5) for details.

       --select-script callback
              Use  callback  to decide whether a particular source line is interesting and should
              be included in the output data/generated report or not.

              This option is  equivalent  to  the  select_script  config  file  option.  See  man
              lcovrc(5) for details.

       --checksum
              Specify  whether to compare stored tracefile checksum to checksum computed from the
              source code.

              Checksum verification is disabled by default.

              When checksum verification is enabled, a checksum will be computed for each  source
              code line and compared to the checksum found in the 'current' tracefile.  This will
              help to prevent attempts to display source code which is not identical to the  code
              used to generate the coverage data.

              Note  that  this option is somewhat subsumed by the --version-script option - which
              does something similar, but at the 'whole file' level.

       --new-file-as-baseline
              By default, when code is identified on source lines in  the  'current'  data  which
              were  not  identified  as  code in the 'baseline' data, but the source text has not
              changed, their coverpoints are categorized as "included code": GIC or UIC.

              However, if the configuration of the coverage job  has  been  recently  changed  to
              instrument  additional files, then all un-exercised coverpoints in those files will
              fall into the GIC category - which may cause certain coverage  criteria  checks  to
              fail.

              When this option is specified, genhtml pretends that the baseline data for the file
              is the same as the current data - so coverpoints are  categorized  as  CBC  or  UBC
              which do not trigger the coverage criteria check.

              Please note that coverpoints in the file are re-categorized only if:

                     •  There is no 'baseline' data for any coverpoint in this file, AND

                     •  The  file  pre-dates  the baseline:  the oldest line in the file is older
                        than  the  'baseline'  data  file  (or  the  value   specified   by   the
                        --baseline-date option).

       --elide-path-mismatch
              Differential  categorization uses file pathnames to match coverage entries from the
              ".info" file with file difference entries in the unified-diff-file.  If the entries
              are not identical, then categorization may be incorrect or strange.

              When  paths  do  not  match, genhtml will produce "path" error messages to tell you
              about the mismatches.

              If mismatches occur, the best solution is to fix the incorrect entries in the .info
              and/or  unified-diff-file  files.   However,  fixing these entries is not possible,
              then you can use this option to attempt to automatically work around them.

              When this option is specified, genhtml  will  pretend  that  the  unified-diff-file
              entry matches the .info file entries if:

                     •  the  same path is found in both the 'baseline' and 'current' .info files,
                        and

                     •  the basename of  the  path  in  the  .info  file  and  the  path  in  the
                        unified-diff-file are the same, and

                     •  there is only one unmatched unified-diff-file entry with that basename.

              See  the  --diff-file  discussion  above  for a discussion of how to avoid spurious
              warnings and/or incorrect matches.

       --synthesize-missing
              Generate (fake) file content if source file does not exist.   This  option  can  be
              used to work around otherwise fatal annotation errors.

              When generating annotated file content, genhtml assumes that the source was written
              'now' (so age is zero), the author is no.body and the  commit  ID  is  synthesized.
              These names and ages will appear in your HTML reports.

       --date-bins day[,day,...]
              The   --date-bins  option  is  used  to  specify  age  boundaries  (cutpoints)  for
              date-binning classification.  If not specified, the default is to use 4 age ranges:
              less  than  7  days,  7  to  30 days, 30 to 180 days, and more than 180 days.  This
              argument has no effect if there is no source-annotation-script .

       --show-owners [all]
              If the --show-owners option is used, each coverage report header report  contain  a
              summary  table,  showing counts in the various coverage categories for everyone who
              appears in the revision control  annotation  as  the  most  recent  editor  of  the
              corresponding  line.   If  the  optional argument 'all' is not specified, the table
              will show only users who are responsible  for  un-exercised  code  lines.   If  the
              optional  argument  is  specified,  then  users responsible for any code lines will
              appear.  In both  cases,  users  who  are  responsible  for  non-code  lines  (e.g,
              comments)  are  not  shown.   This  option does nothing if --annotate-script is not
              used; it needs revision control information provided by calling the script.

              Please note: if the all option is not specified, the  summary  table  will  contain
              "Total"  rows  for  all  date/owner bins which are not empty - but there will be no
              secondary "File/Directory" entries for elements which have no "missed" coverpoints.

       --show-noncode
              By default, the source code detail view does not show owner or date annotations  in
              the  far-left  column  for  non-code  lines (e.g., comments). If the --show-noncode
              option is used, then the source code view will show annotations for both  code  and
              non-code    lines.     This    argument    has   no   effect   if   there   is   no
              source-annotation-script .

       --show-zero-columns
              By default, columns whose entries are all zero  are  removed  (not  shown)  in  the
              summary  table  at the top of each HTML page.  If the --show-zero-columns option is
              used, then those columns will be shown.

              When columns are retained, then all the tables have the same width/contain the same
              number of columns - which may be a benefit in some situations.

              When  columns  are  removed,  then  the tables are more compact and easier to read.
              This is especially true in relatively mature development environments,  when  there
              are very few un-exercised coverpoints in the project.

       --show-navigation
              By  default,  the  summary  table  in  the source code detail view does not contain
              hyperlinks from the number to the first line in the corresponding  category  ('Hit'
              or  'Missed')  and  from  the  current location to the next location in the current
              category, in non-differential coverage reports.  (This is the  lcov  'legacy'  view
              non-differential reports.)

              If the --show-navigation option is used, then the source code summary table will be
              generated with navigation links.  Hyperlinks are always generated for  differential
              coverage reports.

              This feature enables developers to find and understand coverage issues more quickly
              than they might otherwise, if they had to rely on scrolling.

              See the --frames description above  for  a  description  of  a  browser  bug  which
              disables these hyperlinks in certain conditions.

              Navigation hyperlinks are always enabled in differential coveage report.

       --show-proportions
              In  the  'function  coverage  detail'  table, also show the percentage of lines and
              branches within the function which are exercised.

              This feature enables developers to focus attention  on  functions  which  have  the
              largest effect on overall code coverage.

              This feature is disabled by default.  Note that this option requires that you use a
              compiler version which is new enough to support function begin/end line reports  or
              that   you   configure   the   tool   to   derive  the  required  data  -  see  the
              derive_function_end_line discussion in man lcovrc(5).

       --simplified-colors
              By default, each differential category is colorized uniquely  in  the  source  code
              detail view.  With this option, only two colors are used:  one for covered code and
              another for uncovered code.  Note that ECB and EUB  code  is  neither  covered  nor
              uncovered - and so may be difficult to distinguish in the source code view, as they
              will be presented in normal background color.

       --exclude pattern
              pattern is a glob-match pattern of filenames to exclude  from  the  report.   Files
              which do NOT match will be included.  See the lcov man page for details.

       --include pattern
              pattern is a glob-match pattern of filenames to include in processing.  Files which
              do not match will be excluded from the report.  See the lcov man page for details.

       --erase-functions regexp
              Exclude coverage data from lines which fall within a function  whose  name  matches
              the  supplied  regexp.  Note that this is a mangled or demangled name, depending on
              whether the --demangle-cpp option is used or not.

              Note that this option requires that you use a compiler version which is new  enough
              to support function begin/end line reports or that you configure the tool to derive
              the required data - see the derive_function_end_line discussion in man lcovrc(5).

       --substitute regexp_pattern
              Apply Perl regexp regexp_pattern to source  file  names  found  during  processing.
              This  is  useful  when some file paths in the baseline or current .info file do not
              match your source layout and so the source code is not found.   See  the  lcov  man
              page for more details.

              Note  that the substitution patterns are applied to the --diff-file entries as well
              as the baseline and current .info files.

       --omit-lines regexp_pattern
              Exclude coverage data from lines whose content matches regexp.

              Use this switch if you want to exclude line  and  branch  coverage  data  for  some
              particular  constructs  in  your code (e.g., some complicated macro).  See the lcov
              man page for details.

       --parallel [ integer ]
       -j [ integer ]
              Specify parallelism to use  during  processing  (maximum  number  of  forked  child
              processes).   If  the optional integer parallelism parameter is zero or is missing,
              then use to use up the number of cores on the machine.  Default is  not  to  use  a
              single process (no parallelism).
              Also  see  the  memory,  memory_percentage,  max_fork_fails  and  fork_fail_timeout
              entries in man lcovrc(5).

       --memory integer
              Specify the maximum amount of memory to use  during  parallel  processing,  in  Mb.
              Effectively,  the process will not fork() if this limit would be exceeded.  Default
              is 0 (zero) - which means that there is no limit.

              This option may be useful if the compute farm environment imposes strict limits  on
              resource  utilization  such that the job will be killed if it tries to use too many
              parallel children - but the user does  not  know  a  priori  what  the  permissible
              maximum  is.   This  option enables the tool to use maximum parallelism - up to the
              limit imposed by the memory restriction.

              The configuration file memory_percentage option provided another  way  to  set  the
              maximum memory consumption.  See man lcovrc (5) for details.

       --filter filters
              Specify a list of coverpoint filters to apply to input data.

              Note that certain filters apply only to C/C++ source files.  genhtml associates the
              file  extension  ('.c',  '.vhd',  etc.   )  with  its  source  language.   See  the
              c_file_extentions   and   rtl_file_extensions  sections  of  man  lcovrc(5)  for  a
              description of the default associations and how they can be changed.

              filters can be a comma-separated list of the following keywords:

              branch:
                 ignore branch counts for C/C++ source code lines which do not appear to  contain
                 conditionals.   These may be generated automatically by the compiler (e.g., from
                 C++ exception handling) - and are not interesting to users.  This option has  no
                 effect unless --branch-coverage is used.

                 See  also  man lcovrc(5) - which describes several variables which affect branch
                 filtering: filter_lookahead and filter_bitwise_conditional.

                 The most common  use  for  branch  filtering  is  to  remove  compiler-generated
                 branches related to C++ exception handlers.  See the no_exception_branch' option
                 in man lcovrc(5) for a way to remove all identified exception branches.

              brace:
                 ignore line coverage counts on the closing brace of C/C++  code  block,  if  the
                 line  contains only a closing brace and the preceding line has the same count or
                 if the close brace has a zero count and either the preceding line has a non-zero
                 count, or the close brace is not the body of a conditional.

                 These lines seem to appear and disappear in gcov output - and cause differential
                 coverage to report bogus LBC and/or GIC and/or UIC counts.   Bogus  LBC  or  UIC
                 counts  are  a  problem because an automated regression which uses pass criteria
                 "LBC + UIC + UNC == 0" will fail.

              blank:
                 ignore lines which contain only whitespace  (or  whitespace  +  comments)  whose
                 'hit'  count is zero.  These appear to be a 'gcov' artifact related to compiler-
                 generated code - such as exception handlers and destructor calls at the  end  of
                 scope - and can confuse differential coverage criteria.
                 If  lcovrc  option filter_blank_aggressive = 1 is enabled, then blank lines will
                 be ignored whether their 'hit' count is zero or not.  Aggressive  filtering  may
                 be  useful in LLVM-generated coverage data, which tends to include large numbers
                 of such lines.

              directive:
                 ignore lines which look like C compiler directives: #ifdef,  #include,  #define,
                 etc.   These  lines are sometimes included by llvm-cov when LLVM profile data is
                 translated to LCOV format.

              line:
                 alias for "--filter brace,blank".

              range:
                 Ignore line and branch coverpoints on lines which are  out-of  range/whose  line
                 number  is beyond the end of the source file.  These appear to be gcov artifacts
                 caused by a macro instantiation on the last line of the file.

              region:
                 apply LCOV_EXCL_START/LCOV_EXCL_STOP directives found  in  source  text  to  the
                 coverpoints  found  in the current and baseline .info files.  This option may be
                 useful in cases that the source code was not found during 'lcov  --capture  ...'
                 but is accessible now.

              branch_region:
                 apply  LCOV_EXCL_BR_START/LCOV_EXCL_BR_STOP  directives  found in source text to
                 the coverpoints found in the current and baseline .info files.  This is  similar
                 to the 'region option, above - but applies to branch coverpoints only.

              function:
                 combine data for every "unique" function which is defined at the same file/line.
                 geninfo/gcov seem to have a bug such that they create multiple entries  for  the
                 same  function.   This  feature  also  merges all instances of the same template
                 function/template method.

              trivial:
                 remove trivial functions and associated coverpoints.   'Trivial'  functions  are
                 whose  body  is  empty/do  not  contain any statements.  Commonly, these include
                 compiler-generated methods (e.g., default constructors and assignment operators)
                 as well as static initialization wrappers, etc.

                 Note  that  the  trivial  filter requires function end line information - and so
                 requires that you use  a  compiler  veraion  which  is  new  enough  to  support
                 begin/end   line   reports   (   e.g.,  gcc/9  or  newer)  or  that  you  enable
                 lcov/genhtml/geninfo to derive the information:

                 In man lcovrc(5), see  the  derive_function_end_line  setting  as  well  as  the
                 trivial_function_threshold  setting.   The  former  is  used  to  turn  end line
                 calculation on or off, and the latter to change the lookahead used to  determine
                 whether  the  function  body  is  empty.   Also see the lcov_filter_parallel and
                 lcov_filter_chunk_size settings, which may improve CPU performance if the number
                 of files to process is very large.

       -o output-directory
       --output-directory output-directory
              Create files in output-directory.

              Use  this  option to tell genhtml to write the resulting files to a directory other
              than the current one. If output-directory does not exist, it will be created.

              It is advisable to use this option since depending on the project size,  a  lot  of
              files and subdirectories may be created.

       -t title
       --title title
              Display title in header table of all pages.

              title  is  written  to  the  "Test:"-field  in  the header table at the top of each
              generated HTML page to identify the  context  in  which  a  particular  output  was
              created. By default, this is the name of the 'current; tracefile.

              A  common use is to specify a test run name, or a version control system identifier
              (perforce changelist or git SHA, for example) that indicates the  code  level  that
              was tested.

       --header-title BANNER
              Display BANNER in header of all pages.

              BANNER  is  written to the header portion of each generated HTML page.  By default,
              this simply identifies this as an LCOV (differential) coverage report.

              A common use is to specify the name of  the  project  or  project  branch  and  the
              Jenkins build ID.

       --footer FOOTER
              Display FOOTER in footer of all pages.

              FOOTER  is  written to the footer portion of each generated HTML page.  The default
              simply identifies the LCOV tool version used to generate the report.

       -d description-file
       --description-file description-file
              Read test case descriptions from description-file.

              All test case descriptions found in description-file and referenced  in  the  input
              data file are read and written to an extra page which is then incorporated into the
              HTML output.

              The file format of description-file is:

              for each test case:
                     TN:<testname>
                     TD:<test description>

              Valid test case names can consist of letters, numbers and the underscore  character
              ('_').

       -k
       --keep-descriptions
              Do not remove unused test descriptions.

              Keep descriptions found in the description file even if the coverage data indicates
              that the associated test case did not cover any lines of code.

              This option can also be configured permanently using the configuration file  option
              genhtml_keep_descriptions.

       -c css-file
       --css-file css-file
              Use external style sheet file css-file.

              Using  this  option,  an  extra  .css  file may be specified which will replace the
              default one. This may be helpful if the default colors make your eyes want to  jump
              out of their sockets :)

              This  option can also be configured permanently using the configuration file option
              genhtml_css_file.

       --source-directory dirname
              Add 'dirname' to the list of places to look for source files.

              For relative source file paths e.g.  paths found in tracefile, or  in  diff-file  -
              possibly  after  substitutions  have been applied - genhtml will first look for the
              path from 'cwd' (where genhtml was invoked) and then from each alternate  directory
              name in the order specified.  The first location matching location is used.

              This  option can be specified multiple times, to add more directories to the source
              search path.

       -p prefix
       --prefix prefix
              Remove prefix from all directory names.

              Because lists containing long filenames are difficult to read, there is a mechanism
              implemented  that  will  automatically  try  to  shorten all directory names on the
              overview page beginning with a common prefix. By default, this  is  done  using  an
              algorithm  that  tries  to  find  the prefix which, when applied, will minimize the
              resulting sum of characters of all directory names.

              Use this option to specify the prefix to be removed by yourself.

       --no-prefix
              Do not remove prefix from directory names.

              This switch will completely disable the prefix mechanism described in the  previous
              section.

              This  option can also be configured permanently using the configuration file option
              genhtml_no_prefix.

       --no-source
              Do not create source code view.

              Use this switch if you don't want to get a source code view for each file.

              This option can also be configured permanently using the configuration file  option
              genhtml_no_source.

       --num-spaces spaces
              Replace tabs in source view with num spaces.

              Default value is 8.

              This  option can also be configured permanently using the configuration file option
              genhtml_num_spaces.

       --highlight
              Highlight lines with converted-only coverage data.

              Use this option in conjunction with the --diff option of lcov  to  highlight  those
              lines  which  were  only  covered  in  data sets which were converted from previous
              source code versions.

              This option can also be configured permanently using the configuration file  option
              genhtml_highlight.

       --legend
              Include color legend in HTML output.

              Use  this  option to include a legend explaining the meaning of color coding in the
              resulting HTML output.

              This option can also be configured permanently using the configuration file  option
              genhtml_legend.

       --html-prolog prolog-file
              Read customized HTML prolog from prolog-file.

              Use  this  option  to replace the default HTML prolog (the initial part of the HTML
              source code leading up to and including  the  <body>  tag)  with  the  contents  of
              prolog-file.   Within  the prolog text, the following words will be replaced when a
              page is generated:

              @pagetitle@
              The title of the page.

              @basedir@
              A relative path leading to the base directory (e.g., for locating css-files).

              This option can also be configured permanently using the configuration file  option
              genhtml_html_prolog.

       --html-epilog epilog-file
              Read customized HTML epilog from epilog-file.

              Use  this  option  to  replace  the default HTML epilog (the final part of the HTML
              source including </body>) with the contents of epilog-file.

              Within the epilog text, the following  words  will  be  replaced  when  a  page  is
              generated:

              @basedir@
              A relative path leading to the base directory (e.g., for locating css-files).

              This  option can also be configured permanently using the configuration file option
              genhtml_html_epilog.

       --html-extension extension
              Use customized filename extension for generated HTML pages.

              This option is  useful  in  situations  where  different  filename  extensions  are
              required  to render the resulting pages correctly (e.g., php). Note that a '.' will
              be inserted between the filename and the extension specified by this option.

              This option can also be configured permanently using the configuration file  option
              genhtml_html_extension.

       --html-gzip
              Compress  all  generated  html  files with gzip and add a .htaccess file specifying
              gzip-encoding in the root output directory.

              Use this option if you want to save space on your webserver. Requires  a  webserver
              with .htaccess support and a browser with support for gzip compressed html.

              This  option can also be configured permanently using the configuration file option
              genhtml_html_gzip.

       --sort
       --no-sort
              Specify whether to include sorted views of file and directory overviews.

              Use --sort to include sorted views or --no-sort to not include them.  Sorted  views
              are enabled by default.

              When  sorted  views  are enabled, each overview page will contain links to views of
              that page sorted by coverage rate.

              This option can also be configured permanently using the configuration file  option
              genhtml_sort.

       --function-coverage
       --no-function-coverage
              Specify whether to display function coverage summaries in HTML output.

              Use    --function-coverage    to    enable    function    coverage   summaries   or
              --no-function-coverage to disable it. Function coverage summaries  are  enabled  by
              default.

              This  option can also be configured permanently using the configuration file option
              genhtml_function_coverage.

              When function coverage summaries are enabled, each overview page will  contain  the
              number  of  functions  found  and  hit  per  file  or  directory, together with the
              resulting coverage rate. In addition, each source code view will contain a link  to
              a  page which lists all functions found in that file plus the respective call count
              for those functions.  The function coverage page groups the data for every alias of
              each  function,  sorted by name or execution count.  The representative name of the
              group of functions is the shorted (i.e., containing the fewest characters).

              If using differential coverage and a sufficiently  recent  compiler  version  which
              report both begin and end line of functions ( e.g., gcc/9 and newer), functions are
              considered 'new' if any of their source lines have changed.   With  older  compiler
              versions,  functions  are considered 'new' if the function signature has changed or
              if the entire function is new.

       --branch-coverage
       --no-branch-coverage
              Specify whether to display branch coverage data in HTML output.

              Use --branch-coverage to enable branch coverage display or --no-branch-coverage  to
              disable it. Branch coverage data display is disabled by default.

              When branch coverage display is enabled, each overview page will contain the number
              of branches found and hit per  file  or  directory,  together  with  the  resulting
              coverage  rate.  In  addition,  each  source code view will contain an extra column
              which lists all branches of a line with indications of whether the branch was taken
              or not. Branches are shown in the following format:

               ' + ': Branch was taken at least once
               ' - ': Branch was not taken
               ' # ': The basic block containing the branch was never executed

              Note  that  it might not always be possible to relate branches to the corresponding
              source code statements: during compilation, GCC might shuffle  branches  around  or
              eliminate some of them to generate better code.

              This  option can also be configured permanently using the configuration file option
              genhtml_branch_coverage.

       --demangle-cpp [param]
              Specify whether to demangle C++ function names.

              Use this option if you want  to  convert  C++  internal  function  names  to  human
              readable format for display on the HTML function overview page.

              If  called  with  no  parameters,  genhtml  will  use c++filt for demangling.  This
              requires that the c++filt tool is installed (see c++filt(1)).

              If param is specified, it is treated as th tool to call to  demangle  source  code.
              The --demangle-cpp option can be used multiple times to specify the demangling tool
              and a set of command line options that are passed to the tool - similar to how  the
              gcc  -Xlinker  parameter  works.  In that case, you callback will be executed as: |
              demangle_param0 demangle_param1 ...  Note that the demangle tool  is  called  as  a
              pipe and is expected to read from stdin and write to stdout.

       --ignore-errors errors
              Specify a list of errors after which to continue processing.

              Use  this  option  to  specify  a  list of error classes after which genhtml should
              continue processing with a warning message instead of aborting.   To  suppress  the
              warning message, specify the error class twice.

              errors can be a comma-separated list of the following keywords:

              annotate:
                 --annotate-script  returned non-zero exit status - likely a file path or related
                 error.  HTML  source  code  display  will  not  be  correct  and  ownership/date
                 information may be missing.

              branch:
                 Branch  ID  (2nd  field in the .info file 'BRDA' entry) does not follow expected
                 integer sequence.

              callback:
                 Annotate, version, or criteria script error.

              category:
                 Line number categorizations are incorrect in the .info file, so branch  coverage
                 line number turns out to not be an executable source line.

              child:
                 child  process  returned  non-zero  exit code during --parallel execution.  This
                 typically indicates that the child encountered  an  error:   see  the  log  file
                 immediately  above  this message.  In contrast:  the parallel error indicates an
                 unexpected/unhandled exception in the child  process  -  not  a  'typical'  lcov
                 error.

              count:
                 An  excessive  number  of  messages of some class has been reported - subsequent
                 messages of that type will be suppressed.  The limit can be  controlled  by  the
                 'max_message_count' variable. See man lcovrc(5).

              corrupt:
                 Corrupt/unreadable coverage data file found.

              deprecated:
                 You  are  using a deprecated option.  This option will be removed in an upcoming
                 release - so you should change your scripts now.

              empty:
                 The patch file specified by  the  --diff-file  argument  does  not  contain  any
                 differences.   This  may  be  OK  if  there  were no source code changes between
                 'baseline' and 'current' (e.g., the only change was to modify a Makefile)  -  or
                 may indicate an unsupported file format.

              excessive:
                 your  coverage  data contains a suspiciously large 'hit' count which is unlikely
                 to be  correct  -  possibly  indicating  a  bug  in  your  toolchain.   See  the
                 excessive_count_threshold section in man lcorc(5) for details.

              fork:
                 Unable to create child process during --parallel execution.
                 If  the  message  is  ignored ( --ignore-errors fork ), then genhtml will wait a
                 brief period and then retry the failed execution.
                 If you see continued errors, either turn off or reduce parallelism, set a memory
                 limit, or find a larger server to run the task.

              format:
                 Unexpected syntax found in .info file.

              inconsistent:
                 Files have been moved or repository history presented by --diff-file data is not
                 consistent with coverage data; for example,  an  'inserted'  line  has  baseline
                 coverage data.  These issues are likely to be caused by inconsistent handling in
                 the 'diff' data compared to the 'baseline' and 'current'  coverage  data  (e.g.,
                 using  different  source versions to collect the data but incorrectly annotating
                 those differences), or by  inconsistent  treatment  in  the  'annotate'  script.
                 Consider using a --version-script to guard against version mismatches.

              internal:
                 internal tool issue detected.  Please report this bug along with a testcase.

              mismatch:
                 Inconsistent entries found in trace file:

                 •  branch  expression  (3rd  field in the .info file 'BRDA' entry) of merge data
                    does not match, or

                 •  function execution count (FNDA:...) but no function declaration (FN:...).

              missing:
                 File does not exist or is not readable.

              negative:
                 negative 'hit' count found.

                 Note that negative counts may be caused by a known GCC bug - see

                   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68080

                 and try compiling with "-fprofile-update=atomic". You will  need  to  recompile,
                 re-run your tests, and re-capture coverage data.

              package:
                 A  required  perl package is not installed on your system.  In some cases, it is
                 possible to ignore this message and continue - however, certain features will be
                 disabled in that case.

              parallel:
                 various  types of errors related to parallelism - i.e., a child process died due
                 to  an  error.   The  corresponding  error  message  appears  in  the  log  file
                 immediately  before the parallel error.  If you see an error related to parallel
                 execution that seems invalid, it may be a good idea  to  remove  the  --parallel
                 flag  and  try  again.  If removing the flag leads to a different result, please
                 report the issue (along with a testcase) so that the tool can be fixed.

              path:
                 File name found in --diff-file file but does not appear in  either  baseline  or
                 current  trace  data.   These  may be mapping issues - different pathname in the
                 tracefile vs. the diff file.

              range:
                 Coverage data refers to a line number which is larger than the number  of  lines
                 in  the source file.  This can be caused by a version mismatch or by an issue in
                 the gcov data.

              source:
                 The source code file for a data set could not be found.

              unmapped:
                 Coverage data for a particular line cannot be found, possibly because the source
                 code  was  not  found,  or  because the line number mapping in the .info file is
                 wrong.

                 This can happen if the source file used in HTML generation is not  the  same  as
                 the file used to generate the coverage data - for example, lines have been added
                 or removed.

              unsupported:
                 The requested feature  is  not  supported  for  this  tool  configuration.   For
                 example,  function  begin/end  line range exclusions use some GCOV features that
                 are not available in older GCC releases.

              unused:
                 The  include/exclude/erase/substitute/omit  pattern  did  not  match  any   file
                 pathnames.

              usage:
                 unsupported usage detected - e.g. an unsupported option combination.

              utility:
                 a tool called during processing returned an error code (e.g., 'find' encountered
                 an unreadable directory).

              version:
                 --version-script comparison returned non-zero mismatch  indication.   It  likely
                 that  the  version  of  the  file  which was used in coverage data extraction is
                 different than the source version which was  found.   File  annotations  may  be
                 incorrect.

              Also see 'man lcovrc(5)

       --keep-going
              Do not stop if error occurs: attempt to generate a result, however flawed.

              This  command  line option corresponds to the stop_on_error lcovrc option.  See man
              lcovrc(5) for more details.

       --config-file config-file
              Specify a configuration file to use.  See man lcovrc(5) for  details  of  the  file
              format and options.

              When   this  option  is  specified,  neither  the  system-wide  configuration  file
              /etc/lcovrc, nor the per-user configuration file ~/.lcovrc is read.

              This option may be useful when there is a need to run several instances of  genhtml
              with different configuration file options in parallel.

              Note that this option must be specified in full - abbreviations are not supported.

       --rc keyword=value
              Override a configuration directive.

              Use   this  option  to  specify  a  keyword=value  statement  which  overrides  the
              corresponding configuration statement in the lcovrc  configuration  file.  You  can
              specify  this  option more than once to override multiple configuration statements.
              See man lcovrc(5) for a list of available keywords and their meaning.

       --precision num
              Show coverage rates with num number of digits after the decimal point.

              Default value is 1.

              This option can also be configured permanently using the configuration file  option
              genhtml_precision.

       --suppress-aliases
              Suppress list of aliases in function detail table.

              Functions  whose  file/line  is the same are considered to be aliases; genthml uses
              the shortest name in the list of aliases (fewest characters) as the leader.

              The number of aliases can be large, for example due  to  instantiated  templates  -
              which  can  make  function coverage results difficult to read.  This option removes
              the list of aliases, making it easier to focus on  the  overall  function  coverage
              number, which is likely more interesting.

              Note that this option has an effect only when --filter function is applied.

              This  option can also be configured permanently using the configuration file option
              suppress_function_aliases.

       --forget-test-names
              If non-zero, ignore testcase names in .info file - i.e., treat all coverage data as
              if  it came from the same testcase.  This may improve performance and reduce memory
              consumption if user  does  not  need  per-testcase  coverage  summary  in  coverage
              reports.

              This  option can also be configured permanently using the configuration file option
              forget_testcase_names.

       --missed
              Show counts of missed lines, functions, or branches.

              Use this option to change overview pages to show the count of lines, functions,  or
              branches that were not hit. These counts are represented by negative numbers.

              When  specified  together  with  --sort, file and directory views will be sorted by
              missed counts.

              This option can also be configured permanently using the configuration file  option
              genhtml_missed.

       --dark-mode
              Use  a  light-display-on-dark-background  color  scheme  rather  than  the  default
              dark-display-on-light-background.

              The idea is to reduce eye strain due to viewing dark text  on  a  bright  screen  -
              particularly at night.

       --tempdir dirname
              Write temporary and intermediate data to indicated directory.  Default is "/tmp".

       --preserve
              Preserve intermediate data files generated by various steps in the tool - e.g., for
              debugging.  By default, these files are deleted.

       --save
              Copy unified-diff-file, baseline_trace_files, and tracefile(s) to output-directory.

              Keeping copies of the input  data  files  may  help  to  debug  any  issues  or  to
              regenerate report files later.

FILES

       /etc/lcovrc
              The system-wide configuration file.

       ~/.lcovrc
              The per-user configuration file.

       /usr/share/lcov//support-scripts/p4udiff
              Sample  script  for  use  with  --diff-file  that  creates  a unified diff file via
              Perforce.

       /usr/share/lcov//support-scripts/gitdiff
              Sample script for use with --diff-file that creates a unified diff file via git.

       /usr/share/lcov//support-scripts/p4annotate.pm
              Sample script written as Perl module for use with --annotate-script  that  provides
              annotation data via Perforce.

       /usr/share/lcov//support-scripts/gitblame.pm
              Sample  script  written as Perl module for use with --annotate-script that provides
              annotation data via git.

       /usr/share/lcov//support-scripts/criteria.pm
              Sample script written as Perl module for use with --criteria-script that implements
              a check for "UNC + LBC + UIC == 0".

       /usr/share/lcov//support-scripts/getp4version
              Sample script for use with --version-script that obtains version IDs via Perforce.

       /usr/share/lcov//support-scripts/get_signature
              Sample script for use with --version-script that uses md5hash as version IDs.

AUTHORS

       Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>

       Henry Cox <henry.cox@mediatek.com>
              Differential coverage and date/owner binning, filtering, error management, parallel
              execution sections,

SEE ALSO

       lcov(1), lcovrc(5), geninfo(1), genpng(1), gendesc(1), gcov(1)

       https://github.com/linux-test-project/lcov