Merge commit 'a39d4083cab589d7cd6a13e8a4b8db8875261d75'
[gnulib.git] / build-aux / pmccabe2html
index ea3e262..81dd932 100644 (file)
@@ -1,8 +1,6 @@
-#!/bin/sh
-exec awk -f "$0" "$@"
-# pmccabe2html - pmccabe to html converter
+# pmccabe2html - AWK script to convert pmccabe output to html       -*- awk -*-
 
-# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2007-2014 Free Software Foundation, Inc.
 
 # 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
@@ -23,16 +21,19 @@ exec awk -f "$0" "$@"
 
 # Typical Invocation is from a Makefile.am:
 #
-# cyclo-$(PROJECT).html:
-#      $(PMCCABE) ${top_srcdir}/lib/*.[ch] \
-#              | sort -nr \
-#              | $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \
-#                      -v lang=html -v name="$(PACKAGE_NAME)" \
-#                      -v vcurl="http://git.savannah.gnu.org/gitweb/?p=$(PROJECT).git;a=blob;f=%FILENAME%;hb=HEAD" \
-#                      -v url="http://www.gnu.org/software/$(PROJECT)/" \
-#                       -v css=${top_srcdir}/build-aux/pmccabe.css \
-#                      > tmp
-#      mv tmp $@
+# CYCLO_SOURCES = ${top_srcdir}/src/*.[ch]
+#
+# cyclo-$(PACKAGE).html: $(CYCLO_SOURCES)
+#      $(PMCCABE) $(CYCLO_SOURCES) \
+#              | sort -nr \
+#              | $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \
+#                      -v lang=html -v name="$(PACKAGE_NAME)" \
+#                      -v vcurl="http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD" \
+#                      -v url="http://www.gnu.org/software/$(PACKAGE)/" \
+#                      -v css=${top_srcdir}/build-aux/pmccabe.css \
+#                      -v cut_dir=${top_srcdir}/ \
+#                      > $@-tmp
+#      mv $@-tmp $@
 #
 # The variables available are:
 #   lang     output language, either 'html' or 'wiki'
@@ -46,6 +47,10 @@ exec awk -f "$0" "$@"
 
 # Prologue & configuration
 BEGIN {
+    # Portable lookup of present time.
+    "date +%s" | getline epoch_time
+    "date" | getline chronos_time
+
     section_global_stats_p = 1
     section_function_cyclo_p = 1
 
@@ -57,7 +62,6 @@ BEGIN {
     cyclo_simple_max = 10
     cyclo_moderate_max = 20
     cyclo_high_max = 50
-    cut_dir = "/../"
     source_file_link_tmpl = vcurl
 
     # HTML options
@@ -66,10 +70,10 @@ BEGIN {
        html_prolog = "<a href=\"" url "\">Back to " package_name " Homepage</a><br/><br/>"
     }
     html_epilog = "<hr color=\"black\" size=\"2\"/> \
-Copyright (c) 2007, 2008 Free Software Foundation Inc."
+Copyright (c) 2007, 2008 Free Software Foundation, Inc."
     html_doctype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \
 \"http://www.w3.org/TR/html401/loose.dtd\">"
-    html_comment = "<!-- Generated by gnulib's pmccabe2html at " systime() " -->"
+    html_comment = "<!-- Generated by gnulib's pmccabe2html at " epoch_time " -->"
     html_title = "Cyclomatic Complexity report for " package_name
 
     # Wiki options
@@ -114,12 +118,12 @@ function build_stats()
 
 function html_fnc_table_complete (caption)
 {
-    html_fnc_table(caption, 1, 0, 1, 1, 1, 0, 1)
+    html_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1)
 }
 
 function html_fnc_table_abbrev (caption)
 {
-    html_fnc_table(caption, 1, 0, 1, 0, 1, 0, 0)
+    html_fnc_table(caption, 1, 1, 0, 0, 1, 0, 0)
 }
 
 
@@ -137,22 +141,22 @@ function html_fnc_table (caption,
     {
         print "<caption class=\"function_table_caption\">" caption "</caption>"
     }
-    html_fnc_header(fname_p, 
-                    mcyclo_p, 
-                    cyclo_p, 
-                    num_statements_p, 
-                    num_lines_p, 
-                    first_line_p, 
+    html_fnc_header(fname_p,
+                    mcyclo_p,
+                    cyclo_p,
+                    num_statements_p,
+                    num_lines_p,
+                    first_line_p,
                     file_p)
-    for (nfnc = 1; nfnc < nfuncs; nfnc++)
+    for (nfnc = 1; nfnc <= nfuncs; nfnc++)
     {
         html_fnc(nfnc,
-                 fname_p, 
-                 mcyclo_p, 
-                 cyclo_p, 
-                 num_statements_p, 
-                 num_lines_p, 
-                 first_line_p, 
+                 fname_p,
+                 mcyclo_p,
+                 cyclo_p,
+                 num_statements_p,
+                 num_lines_p,
+                 first_line_p,
                  file_p)
     }
     print "</table>"
@@ -211,7 +215,7 @@ function html_header ()
            print cssline
        }
         print "-->"
-       print "</style />"
+       print "</style>"
        close(css)
     }
     print "</head>"
@@ -309,7 +313,7 @@ function html_fnc (nfun,
     if (mcyclo[nfun] > cyclo_high_max)
     {
         trclass="function_entry_untestable"
-    }   
+    }
     else if (mcyclo[nfun] > cyclo_moderate_max)
     {
         trclass="function_entry_high"
@@ -393,7 +397,7 @@ function html_fnc (nfun,
         {
             print file[nfun]
         }
+
         print "</td>"
 
 
@@ -411,21 +415,21 @@ function html_fnc (nfun,
             if (num_lines_p) { num_columns++ }
             if (first_line_p) { num_columns++ }
             if (file_p) { num_columns++ }
-            
+
             print "<td colspan=\"" num_columns "\" height=\"0\">"
             print "<div id=\"" fname "_src\" class=\"function_src\" style=\"position: relative; display: none;\">"
             print "<pre class=\"function_src\">"
 
             while ((getline codeline < (fname nfun "_fn.txt")) > 0)
             {
-                sub(/\\</, "&lt;", codeline)
-                sub(/\\>/, "&gt;", codeline)
-                sub(/&/, "&amp;", codeline)
-                
+                gsub(/&/, "\&amp;", codeline)  # Must come first.
+                gsub(/</, "\&lt;", codeline)
+                gsub(/>/, "\&gt;", codeline)
+
                 print codeline
             }
             close(fname nfun "_fn.txt")
-            system("rm " fname nfun "_fn.txt")
+            system("rm " "'" fname "'" nfun "_fn.txt")
             print "</pre>"
             print "</div>"
             print "</td>"
@@ -437,52 +441,51 @@ function html_fnc (nfun,
 
 function html_global_stats ()
 {
-    print "<div class=\"section_title\">Resume</div>"
+    print "<div class=\"section_title\">Summary</div>"
 
-    print "<br/>"
-    print "<table class=\"resume_table\">"
+    print "<table class=\"summary_table\">"
     # Total number of functions
     print "<tr>"
-    print "<td class=\"resume_header_entry\">"
+    print "<td class=\"summary_header_entry\">"
     print "Total number of functions"
     print "</td>"
-    print "<td class=\"resume_number_entry\">"
+    print "<td class=\"summary_number_entry\">"
     print num_of_functions
     print "</td>"
     print "</tr>"
     # Number of simple functions
     print "<tr>"
-    print "<td class=\"resume_header_entry\">"
+    print "<td class=\"summary_header_entry\">"
     print "Number of low risk functions"
     print "</td>"
-    print "<td class=\"resume_number_entry\">"
+    print "<td class=\"summary_number_entry\">"
     print num_of_simple_functions
     print "</td>"
     print "</tr>"
     # Number of moderate functions
     print "<tr>"
-    print "<td class=\"resume_header_entry\">"
+    print "<td class=\"summary_header_entry\">"
     print "Number of moderate risk functions"
     print "</td>"
-    print "<td class=\"resume_number_entry\">"
+    print "<td class=\"summary_number_entry\">"
     print num_of_moderate_functions
     print "</td>"
     print "</tr>"
     # Number of high functions
     print "<tr>"
-    print "<td class=\"resume_header_entry\">"
+    print "<td class=\"summary_header_entry\">"
     print "Number of high risk functions"
     print "</td>"
-    print "<td class=\"resume_number_entry\">"
+    print "<td class=\"summary_number_entry\">"
     print num_of_high_functions
     print "</td>"
     print "</tr>"
     # Number of untestable functions
     print "<tr>"
-    print "<td class=\"resume_header_entry\">"
+    print "<td class=\"summary_header_entry\">"
     print "Number of untestable functions"
     print "</td>"
-    print "<td class=\"resume_number_entry\">"
+    print "<td class=\"summary_number_entry\">"
     print num_of_untestable_functions
     print "</td>"
     print "</tr>"
@@ -493,7 +496,6 @@ function html_global_stats ()
 function html_function_cyclo ()
 {
     print "<div class=\"section_title\">Details for all functions</div>"
-    print "<p>Used ranges:</p>"
 
     print "<table class=\"ranges_table\">"
     print "<tr>"
@@ -519,7 +521,7 @@ function html_function_cyclo ()
     print "Simple module, without much risk"
     print "</td>"
     print "</tr>"
-    # Moderate 
+    # Moderate
     print "<tr>"
     print "<td class=\"ranges_entry_moderate\">"
     print "&nbsp;"
@@ -562,27 +564,27 @@ function html_function_cyclo ()
 
 function wiki_global_stats ()
 {
-    print "{| class=\"cyclo_resume_table\""
+    print "{| class=\"cyclo_summary_table\""
     # Total number of functions
     print "|-"
-    print "| class=\"cyclo_resume_header_entry\" | Total number of functions"
-    print "| class=\"cyclo_resume_number_entry\" |" num_of_functions
+    print "| class=\"cyclo_summary_header_entry\" | Total number of functions"
+    print "| class=\"cyclo_summary_number_entry\" |" num_of_functions
     # Number of simple functions
     print "|-"
-    print "| class=\"cyclo_resume_header_entry\" | Number of low risk functions"
-    print "| class=\"cyclo_resume_number_entry\" |" num_of_simple_functions
+    print "| class=\"cyclo_summary_header_entry\" | Number of low risk functions"
+    print "| class=\"cyclo_summary_number_entry\" |" num_of_simple_functions
     # Number of moderate functions
     print "|-"
-    print "| class=\"cyclo_resume_header_entry\" | Number of moderate risk functions"
-    print "| class=\"cyclo_resume_number_entry\" |" num_of_moderate_functions
+    print "| class=\"cyclo_summary_header_entry\" | Number of moderate risk functions"
+    print "| class=\"cyclo_summary_number_entry\" |" num_of_moderate_functions
     # Number of high functions
     print "|-"
-    print "| class=\"cyclo_resume_header_entry\" | Number of high risk functions"
-    print "| class=\"cyclo_resume_number_entry\" |" num_of_high_functions
+    print "| class=\"cyclo_summary_header_entry\" | Number of high risk functions"
+    print "| class=\"cyclo_summary_number_entry\" |" num_of_high_functions
     # Number of untestable functions
     print "|-"
-    print "| class=\"cyclo_resume_header_entry\" | Number of untestable functions"
-    print "| class=\"cyclo_resume_number_entry\" |" num_of_untestable_functions
+    print "| class=\"cyclo_summary_header_entry\" | Number of untestable functions"
+    print "| class=\"cyclo_summary_number_entry\" |" num_of_untestable_functions
     print "|}"
 }
 
@@ -591,7 +593,7 @@ function wiki_function_cyclo ()
     print "==Details for all functions=="
 
     print "Used ranges:"
-    
+
     print "{| class =\"cyclo_ranges_table\""
     print "|-"
     print "| class=\"cyclo_ranges_header_entry\" | "
@@ -626,7 +628,7 @@ function wiki_function_cyclo ()
 
 function wiki_fnc_table_complete (caption)
 {
-    wiki_fnc_table(caption, 1, 0, 1, 1, 1, 0, 1)
+    wiki_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1)
 }
 
 function wiki_fnc_table_abbrev (caption)
@@ -648,22 +650,22 @@ function wiki_fnc_table (caption,
     {
         print "|+" caption
     }
-    wiki_fnc_header(fname_p, 
-                    mcyclo_p, 
-                    cyclo_p, 
-                    num_statements_p, 
-                    num_lines_p, 
-                    first_line_p, 
+    wiki_fnc_header(fname_p,
+                    mcyclo_p,
+                    cyclo_p,
+                    num_statements_p,
+                    num_lines_p,
+                    first_line_p,
                     file_p)
-    for (nfnc = 1; nfnc < nfuncs; nfnc++)
+    for (nfnc = 1; nfnc <= nfuncs; nfnc++)
     {
         wiki_fnc(nfnc,
-                 fname_p, 
-                 mcyclo_p, 
-                 cyclo_p, 
-                 num_statements_p, 
-                 num_lines_p, 
-                 first_line_p, 
+                 fname_p,
+                 mcyclo_p,
+                 cyclo_p,
+                 num_statements_p,
+                 num_lines_p,
+                 first_line_p,
                  file_p)
     }
     print "|}"
@@ -726,7 +728,7 @@ function wiki_fnc (nfnc,
     if (mcyclo[nfnc] > cyclo_high_max)
     {
         trclass="cyclo_function_entry_untestable"
-    }   
+    }
     else if (mcyclo[nfnc] > cyclo_moderate_max)
     {
         trclass="cyclo_function_entry_high"
@@ -775,7 +777,7 @@ function wiki_fnc (nfnc,
             href = source_file_link_tmpl
             sub(/%FILENAME%/, file[nfnc], href)
         }
-        
+
         # Source file
         print "| class=\"cyclo_function_entry_filename\" |" \
             ((href != "") ? "[" href " " file[nfnc] "]" : "[" file[nfnc] "]")
@@ -840,7 +842,7 @@ END {
     }
 
     # Print prolog
-    if ((output_lang == "html") && 
+    if ((output_lang == "html") &&
         (html_prolog != ""))
     {
         print html_prolog
@@ -854,12 +856,12 @@ END {
     if (output_lang == "html")
     {
         print "<div class=\"page_title\">" package_name " Cyclomatic Complexity Report</div>"
-        print "<p>Report generated at: <span class=\"report_timestamp\">" strftime() "</div></p>"
+        print "<p>Report generated at: <span class=\"report_timestamp\">" chronos_time "</span></p>"
     }
     if (output_lang == "wiki")
     {
         print "==" package_name " Cyclomatic Complexity Report=="
-        print "Report generated at: '''" strftime() "'''"
+        print "Report generated at: '''" chronos_time "'''"
     }
 
     if (section_global_stats_p)
@@ -886,9 +888,9 @@ END {
             wiki_function_cyclo()
         }
     }
-    
+
     # Print epilog
-    if ((output_lang == "html") && 
+    if ((output_lang == "html") &&
         (html_epilog != ""))
     {
         print html_epilog