#!/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
