@c ----------------------------------------------------------------------------
@c This is the Texinfo source file for the gprofng-display-html man page.
@c
@c Author: Ruud van der Pas
@c ----------------------------------------------------------------------------
@ifset man
\input texinfo @c -*-texinfo-*-
@setfilename gprofng-display-html
@settitle Generate an HTML based directory structure to browse the profiles
@include gp-macros.texi
@end ifset

@c ----------------------------------------------------------------------------
@c This is from the man-pages(7) man page
@c
@c "The list below shows conventional or suggested sections.  Most manual pages
@c  should include at least the highlighted sections.  Arrange a new manual
@c  page so that sections are placed in the order shown in the list."
@c
@c              NAME
@c              SYNOPSIS
@c              CONFIGURATION    [Normally only in Section 4]
@c              DESCRIPTION
@c              OPTIONS          [Normally only in Sections 1, 8]
@c              EXIT STATUS      [Normally only in Sections 1, 8]
@c              RETURN VALUE     [Normally only in Sections 2, 3]
@c              ERRORS           [Typically only in Sections 2, 3]
@c              ENVIRONMENT
@c              FILES
@c              VERSIONS         [Normally only in Sections 2, 3]
@c              ATTRIBUTES       [Normally only in Sections 2, 3]
@c              CONFORMING TO
@c              NOTES
@c              BUGS
@c              EXAMPLES
@c              AUTHORS          [Discouraged]
@c              REPORTING BUGS   [Not used in man-pages]
@c              COPYRIGHT        [Not used in man-pages]
@c              SEE ALSO
@c
@c This is what the texi2pod.pl tool recognizes:
@c
@c for $sect (qw(NAME SYNOPSIS TARGET DESCRIPTION OPTIONS ENVIRONMENT FILES
@c               BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) {
@c
@c What is interesting is that it places "SEE ALSO" before "COPYRIGHT", which
@c makes sense and adhered to for the other formats.
@c ----------------------------------------------------------------------------

@c ----------------------------------------------------------------------------
@c NAME section
@c ----------------------------------------------------------------------------

@ManPageStart{NAME}
@c man begin NAME

gprofng-display-html - Generate an HTML based directory structure to browse the
profiles

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c SYNOPSIS section
@c ----------------------------------------------------------------------------

@ManPageStart{SYNOPSIS}
@c man begin SYNOPSIS

@command{gprofng display html} [@var{option(s)}] @var{experiment(s)}

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c DESCRIPTION section
@c ----------------------------------------------------------------------------

@ManPageStart{DESCRIPTION}
@c man begin DESCRIPTION

Process one or more experiments to generate a directory containing the
@file{index.html} file that may be used to browse the experiment data.

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c OPTIONS section
@c ----------------------------------------------------------------------------

@ManPageStart{OPTIONS}
@c man begin OPTIONS

@table @gcctabopt

@item --version
@ifclear man
@IndexSubentry{Options, @code{--version}}
@end ifclear

Print the version number and exit.

@item --help
@ifclear man
@IndexSubentry{Options, @code{--help}}
@end ifclear

Print usage information and exit.

@item --verbose
@ifclear man
@IndexSubentry{Options, @code{--verbose}}
@end ifclear

Enable verbose mode to show diagnostic messages about the processing of the
data.  By default verbose mode is disabled.

@item -d [@var{db-vol-size}], --debug[=@var{db-vol-size}]
@ifclear man
@IndexSubentry{Options, @code{-d}}
@IndexSubentry{Options, @code{--debug}}
@end ifclear

Control the printing of run time debug information to assist with the
troubleshooting, or further development of this tool.

The @var{db-vol-size} parameter controls the output volume and is one from
the list @samp{s}, @samp{S}, @samp{m}, @samp{M}, @samp{l}, @samp{L}, @samp{xl},
or @samp{XL}.  If @var{db-vol-size} is not set, a modest amount of information
is printed.  This is equivalent to select @samp{s}, or @samp{S}.  The volume
of data goes up as the size increases.  Note that currently @samp{l/L} is
equivalent to @samp{xl/XL}, but this is expected to change in future updates.
By default debug mode is disabled.

@item --highlight-percentage=@var{value}
@ifclear man
@IndexSubentry{Options, @code{--highlight-percentage}}
@end ifclear

Set a percentage value in the interval [0,100] to select and color code source
lines, as well as instructions, that are within this percentage of the maximum
metric value(s).  The default is 90 (%).  A value of zero disables this
feature.

@item -o @var{dirname}, --output=@var{dirname}
@ifclear man
@IndexSubentry{Options, @code{-o}}
@IndexSubentry{Options, @code{--output}}
@end ifclear

Use @var{dirname} as the directory name to store the results in.  In
absence of this option, the default name is @samp{display.<n>.html}.
This directory is created in the current directory.
The number @var{<n>} is the first positive integer number not in use in
this naming scheme.  An existing directory with the same name is not
overwritten.
In case the directory exists already, an error message is printed and
the tool terminates.

@item -O @var{dirname}, --overwrite=@var{dirname}
@ifclear man
@IndexSubentry{Options, @code{-O}}
@IndexSubentry{Options, @code{--overwrite}}
@end ifclear

Use @var{dirname} as the directory name to store the results in.  In
absence of this option, the default name is @samp{display.<n>.html}.
This directory is created in the current directory.
The number @var{<n>} is the first positive integer number not in use in
this naming scheme.  An existing directory with the same name is silently
overwritten.

@item -q,  --quiet
@ifclear man
@IndexSubentry{Options, @code{-q}}
@IndexSubentry{Options, @code{--quiet}}
@end ifclear

Disable the display of all warning, debug, verbose and any other messages.
If enabled, the settings for verbose and debug are accepted, but ignored.
With this option, there is no screen output, other than errors.  By default
quiet mode is disabled.

@item --nowarnings
@ifclear man
@IndexSubentry{Options, @code{--nowarnings}}
@end ifclear

Disable the printing of warning messages on stdout.  By default warning
messages are printed.

@end table

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c NOTES section
@c ----------------------------------------------------------------------------

@ManPageStart{NOTES}
@c man begin NOTES

@itemize @minus

@item
The options and values are case sensitive.

@item
In this release, the option syntax has changed to be more compliant with other
tools and commands.

The options that used to have an @samp{on} or @samp{off} value only, now act
as a switch.  The option negates the default setting.  For example, by
default, verbose mode is disabled.  It is enabled by using the
@samp{--verbose} option.

The long options, those starting with @code{--}, that require a value, expect
the @code{=} sign between the option and the value.

While the previous syntax and choices are accepted still, we strongly
recommend to change the usage of the options according to the new syntax
and values.  At some point, these legacy settings may no longer be accepted.

To assist with the transition, a warning message is shown if the legacy
syntax, or value, or both, are used.

@item
The @samp{-hp} option is still accepted, but it will be deprecated in a
future release.  Use the @samp{--highlight-percentage} option instead.

@item
When setting a directory name for the HTML files to be stored in, make sure
that umask is set to the correct access permissions.

@item
Regardless of the setting for the warning messages, if there are warnings, they
are accessible through the main @file{index.html} page.

@item
The tool tries to accumulate as many warnings and errors as possible, before
taking action.  In this way, it is easier to address multiple issues at
once.  As a result of this approach, it may be that the messages do not show
immediately.  In particular, warnings are shown towards the end of the
execution, but one or more errors will terminate execution before the
processing begins.

@end itemize

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c SEEALSO section
@c ----------------------------------------------------------------------------

@ManPageStart{SEE ALSO}
@c man begin SEEALSO

gprofng(1),
gprofng-archive(1),
gprofng-collect-app(1),
@c -- gprofng-display-gui(1),
gprofng-display-src(1),
gprofng-display-text(1)

@iftex
@vspace{1}
@end iftex

The user guide for gprofng is maintained as a Texinfo manual.  If the
@command{info} and @command{gprofng} programs are correctly installed, the
command @command{info gprofng} should give access to this document.

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c COPYRIGHT section
@c ----------------------------------------------------------------------------

@ManPageStart{COPYRIGHT}
@c man begin COPYRIGHT

Copyright @copyright{} 2022-2025 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts.  A copy of the license is included in the
section entitled ``GNU Free Documentation License''.

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c If this text is used for a man page, exit.  Otherwise we need to continue.
@c ----------------------------------------------------------------------------

@ifset man
@bye
@end ifset
