| #!/usr/bin/perl |
| |
| # Copyright (C) 2021 Free Software Foundation, Inc. |
| # Contributed by Oracle. |
| # |
| # This file is part of GNU Binutils. |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3, or (at your option) |
| # any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, 51 Franklin Street - Fifth Floor, Boston, |
| # MA 02110-1301, USA. |
| |
| #------------------------------------------------------------------------------ |
| # gp-display-html, last updated July 2021 |
| # |
| # NOTE: This is a skeleton version. The real code will follow as an update. |
| #------------------------------------------------------------------------------ |
| |
| use strict; |
| use warnings; |
| |
| #------------------------------------------------------------------------------ |
| # Poor man's version of a boolean. |
| #------------------------------------------------------------------------------ |
| my $TRUE = 1; |
| my $FALSE = 0; |
| |
| #------------------------------------------------------------------------------- |
| # Define the driver command, tool name and version number. |
| #------------------------------------------------------------------------------- |
| my $driver_cmd = "gprofng display html"; |
| my $tool_name = "gp-display-html"; |
| my $binutils_version = "BINUTILS_VERSION"; |
| my $version_info = $tool_name . " GNU binutils version " . $binutils_version; |
| |
| #------------------------------------------------------------------------------ |
| # This is cosmetic, but helps with the scoping of variables. |
| #------------------------------------------------------------------------------ |
| |
| main (); |
| |
| exit (0); |
| |
| #------------------------------------------------------------------------------ |
| # THE SUBROUTINES |
| #------------------------------------------------------------------------------ |
| |
| #------------------------------------------------------------------------------ |
| # This is the driver part of the program. |
| #------------------------------------------------------------------------------ |
| sub |
| main |
| { |
| my $subr_name = "main"; |
| my $ignore_value; |
| |
| #------------------------------------------------------------------------------ |
| # If no options are given, print the help info and exit. |
| #------------------------------------------------------------------------------ |
| $ignore_value = early_scan_specific_options(); |
| |
| $ignore_value = be_patient (); |
| |
| return (0); |
| |
| } #-- End of subroutine main |
| |
| sub |
| be_patient |
| { |
| print "Functionality not implemented yet - please stay tuned for updates\n"; |
| |
| } #-- End of subroutine be_patient |
| |
| #------------------------------------------------------------------------------ |
| # Prints the version number and license information. |
| #------------------------------------------------------------------------------ |
| sub |
| print_version_info |
| { |
| print "$version_info\n"; |
| print "Copyright (C) 2021 Free Software Foundation, Inc.\n"; |
| print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n"; |
| print "This is free software: you are free to change and redistribute it.\n"; |
| print "There is NO WARRANTY, to the extent permitted by law.\n"; |
| |
| return (0); |
| |
| } #-- End of subroutine print_version_info |
| |
| #------------------------------------------------------------------------------- |
| # Print the help overview |
| #------------------------------------------------------------------------------- |
| sub |
| print_help_info |
| { |
| print |
| "Usage: $driver_cmd [OPTION(S)] EXPERIMENT(S)\n". |
| "\n". |
| "Process one or more experiments to generate a directory containing an index.html\n". |
| "file that can be used to browse the experiment data\n". |
| "\n". |
| "Options:\n". |
| "\n". |
| " --help print usage information and exit.\n". |
| " --version print the version number and exit.\n". |
| " --verbose {on|off} enable (on) or disable (off) verbose mode; the default is \"off\".\n". |
| "\n". |
| "\n". |
| " -o, --output <dir-name> use <dir-name> to store the results in; the default\n". |
| " name is ./display.<n>.html with <n> the first number\n". |
| " not in use; an existing directory is not overwritten.\n". |
| "\n". |
| " -O, --overwrite <dir-name> use <dir-name> to store the results in and overwrite\n". |
| " any existing directory with the same name; make sure\n". |
| " that umask is set to the correct access permissions.\n". |
| "\n". |
| " -fl, --func_limit <limit> impose a limit on the number of functions processed;\n". |
| " this is an integer number; set to 0 to process all\n". |
| " functions; the default value is 100.\n". |
| "\n". |
| " -ct, --calltree {on|off} enable or disable an html page with a call tree linked\n". |
| " from the bottom of the first page; default is off.\n". |
| "\n". |
| " -tp, --threshold_percentage <percentage> provide a percentage of metric accountability; the\n". |
| " inclusion of functions for each metric will take\n". |
| " place in sort order until the percentage has been\n". |
| " reached.\n". |
| "\n". |
| " -dm, --default_metrics {on|off} enable or disable automatic selection of metrics\n". |
| " and use a default set of metrics; the default is off.\n". |
| "\n". |
| " -im, --ignore_metrics <metric-list> ignore the metrics from <metric-list>.\n". |
| "\n". |
| " -db, --debug {on|off} enable/disable debug mode; print detailed information to assist with troubleshooting\n". |
| " or further development of this tool; default is off.\n". |
| "\n". |
| " -q, --quiet {on|off} disable/enable the display of warnings; default is off.\n". |
| "\n". |
| "Environment:\n". |
| "\n". |
| "The options can be set in a configuration file called .gp-display-html.rc. This\n". |
| "file needs to be either in the current directory, or in the home directory of the user.\n". |
| "The long name of the option without the leading dashes is supported. For example calltree\n". |
| "to enable or disable the call tree. Note that some options take a value. In case the same option\n". |
| "occurs multiple times in this file, only the last setting encountered is preserved.\n". |
| "\n". |
| "Documentation:\n". |
| "\n". |
| "A getting started guide for gprofng is maintained as a Texinfo manual. If the info and\n". |
| "gprofng programs are properly installed at your site, the command \"info gprofng\"\n". |
| "should give you access to this document.\n". |
| "\n". |
| "See also:\n". |
| "\n". |
| "gprofng(1), gp-archive(1), gp-collect-app(1), gp-display-src(1), gp-display-text(1)\n"; |
| |
| return (0); |
| |
| } #-- End of subroutine print_help_info |
| |
| #------------------------------------------------------------------------------ |
| # Scan the command line for specific options. |
| #------------------------------------------------------------------------------ |
| sub |
| early_scan_specific_options |
| { |
| my $subr_name = "early_scan_specific_options"; |
| |
| my $ignore_value; |
| my $found_option; |
| my $option_has_value; |
| my $option_value; |
| |
| my $verbose_setting = $FALSE; |
| my $debug_setting = $FALSE; |
| my $quiet_setting = $FALSE; |
| |
| $option_has_value = $FALSE; |
| ($found_option, $option_value) = find_target_option (\@ARGV, $option_has_value, "--version"); |
| if ($found_option) |
| { |
| $ignore_value = print_version_info (); |
| exit(0); |
| } |
| $option_has_value = $FALSE; |
| ($found_option, $option_value) = find_target_option (\@ARGV, $option_has_value, "--help"); |
| if ($found_option) |
| { |
| $ignore_value = print_help_info (); |
| exit(0); |
| } |
| |
| return (0); |
| |
| } #-- End of subroutine early_scan_specific_options |
| |
| #------------------------------------------------------------------------------ |
| # Scan the command line to see if the specified option is present. |
| # |
| # Two types of options are supported: options without value (e.g. --help) or |
| # those that are set to "on" or "off". |
| #------------------------------------------------------------------------------ |
| sub |
| find_target_option |
| { |
| my ($command_line_ref, $has_value, $target_option) = @_; |
| |
| my @command_line = @{ $command_line_ref }; |
| |
| my ($command_line_string) = join(" ", @command_line); |
| |
| my $option_value = "not set"; |
| my $found_option = $FALSE; |
| |
| if ($command_line_string =~ /\s*($target_option)\s*(on|off)*\s*/) |
| { |
| if ($has_value) |
| { |
| #------------------------------------------------------------------------------ |
| # We are looking for this kind if substring: "--verbose on" |
| #------------------------------------------------------------------------------ |
| if (defined($1) and defined($2)) |
| { |
| if ( ($2 eq "on") or ($2 eq "off") ) |
| { |
| $found_option = $TRUE; |
| $option_value = $2; |
| } |
| } |
| } |
| else |
| { |
| #------------------------------------------------------------------------------ |
| # We are looking for this kind if substring: "--help" |
| #------------------------------------------------------------------------------ |
| if (defined($1)) |
| { |
| $found_option = $TRUE; |
| } |
| } |
| } |
| |
| return($found_option, $option_value); |
| |
| } #-- End of subroutine find_target_option |