shishi-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU shishi branch, master, updated. shishi-0-0-43-21-g8b93300


From: Simon Josefsson
Subject: [SCM] GNU shishi branch, master, updated. shishi-0-0-43-21-g8b93300
Date: Thu, 20 May 2010 18:00:54 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU shishi".

http://git.savannah.gnu.org/cgit/shishi.git/commit/?id=8b93300040896c32b35818222fc24dc7999b65ef

The branch, master has been updated
       via  8b93300040896c32b35818222fc24dc7999b65ef (commit)
      from  d7a63810c81cc68331fa143c1ee32e2c0e8add3d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 8b93300040896c32b35818222fc24dc7999b65ef
Author: Simon Josefsson <address@hidden>
Date:   Thu May 20 19:59:28 2010 +0200

    Add cyclomatic code complexity chart.

-----------------------------------------------------------------------

Summary of changes:
 .gitignore                       |    4 +
 build-aux/pmccabe.css            |  227 ++++++++++
 build-aux/pmccabe2html           |  907 ++++++++++++++++++++++++++++++++++++++
 cfg.mk                           |    4 +-
 configure.ac                     |    1 +
 {extra => doc/cyclo}/Makefile.am |   17 +-
 gl/Makefile.am                   |    9 +-
 gl/m4/gnulib-cache.m4            |    3 +-
 gl/m4/gnulib-comp.m4             |    5 +
 9 files changed, 1168 insertions(+), 9 deletions(-)
 create mode 100644 build-aux/pmccabe.css
 create mode 100644 build-aux/pmccabe2html
 copy {extra => doc/cyclo}/Makefile.am (60%)

diff --git a/.gitignore b/.gitignore
index de0600b..6cc4a6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,6 +58,7 @@ db/setup.o
 doc/Makefile
 doc/Makefile.in
 doc/ccache2shishi.1
+doc/cyclo/cyclo-shishi.html
 doc/keytab2shishi.1
 doc/man/
 doc/reference/Makefile
@@ -65,6 +66,8 @@ doc/reference/Makefile.in
 doc/reference/html-build.stamp
 doc/reference/html.stamp
 doc/reference/html/
+doc/reference/pdf-build.stamp
+doc/reference/pdf.stamp
 doc/reference/scan-build.stamp
 doc/reference/sgml-build.stamp
 doc/reference/sgml.stamp
@@ -79,6 +82,7 @@ doc/reference/shishi-unused.txt
 doc/reference/shishi.args
 doc/reference/shishi.hierarchy
 doc/reference/shishi.interfaces
+doc/reference/shishi.pdf
 doc/reference/shishi.prerequisites
 doc/reference/shishi.signals
 doc/reference/shishi.types
diff --git a/build-aux/pmccabe.css b/build-aux/pmccabe.css
new file mode 100644
index 0000000..2d94c91
--- /dev/null
+++ b/build-aux/pmccabe.css
@@ -0,0 +1,227 @@
+body {
+
+    font-family: Helvetica, sans-serif;
+
+}
+
+.page_title {
+
+    font: 18pt Georgia, serif;
+/*    font-size: 1.5em;
+    font-weight: bold; */
+    color: darkred;
+    border-bottom: 2px solid darkred;
+}
+
+.section_title {
+
+    font: 14pt Georgia, serif;
+    color: darkred;
+    border-bottom: 2px dashed darkred;
+}
+
+.report_timestamp {
+
+    color: darkred;
+    font-weight: bold;
+
+}
+
+.function_src {
+
+    text-align: left;
+    background: white;
+}
+
+.resume_table {
+
+}
+
+.resume_header_entry {
+    
+    color: black;
+}
+
+.resume_number_entry {
+
+    color: darkred;
+    font-weight: bold;
+    text-align: right;
+}
+
+.ranges_table {
+
+    border-spacing: 0px;
+    border-bottom: solid 2px black;
+    border-top: solid 2px black;
+    border-left: solid 2px black;
+    border-right: solid 2px black;
+}
+
+.ranges_header_entry {
+
+    padding: 5px;
+    border-bottom: solid 1px black;
+    font-size: 1em;
+    font-weight: bold;
+    color: darkred;
+    text-align: left;
+}
+
+.ranges_entry {
+
+}
+
+.ranges_entry_simple {
+
+    background: #87ff75; 
+
+}
+
+.ranges_entry_moderate {
+
+    background: #fffc60;
+
+}
+
+.ranges_entry_high {
+
+    background: #ff5a5d;
+
+}
+
+.ranges_entry_untestable {
+
+    background: #993300
+
+}
+
+
+.function_table {
+
+    border-spacing: 0px;
+    border-bottom: solid 2px black;
+    border-top: solid 2px black;
+    border-left: solid 2px black;
+    border-right: solid 2px black;
+}
+
+.function_table_caption {
+
+    font-size: 1.1em;
+    font-weight: bold;
+    color: black;
+    padding: 5px;
+}
+
+.function_table_header {
+    
+}
+
+
+.function_table_header_entry {
+
+    padding: 5px;
+    border-bottom: solid 1px black;
+    font-size: 1em;
+    font-weight: bold;
+    color: darkred;
+    text-align: left;
+}
+
+.function_entry {
+
+
+}
+
+
+.function_entry_simple {
+
+    background: #87ff75; 
+
+}
+
+.function_entry_moderate {
+
+    background: #fffc60;
+
+}
+
+.function_entry_high {
+
+    background: #ff5a5d;
+
+}
+
+.function_entry_untestable {
+
+    background: #993300
+
+}
+
+
+.function_entry_name {
+
+    font-size: 1em;
+    text-align: left;
+    font-weight: bold;
+    text-valign: top;
+
+    border-top: solid 1px black;
+    padding: 3px;
+}
+
+.function_entry_cyclo {
+
+    font-size: 1em;
+    text-align: right;
+    text-valign: top;
+
+    border-top: solid 1px black;
+    padding: 3px;
+}
+
+.function_entry_number {
+
+    font-size: 1em;
+    text-align: right;
+    text-valign: top;
+
+    border-top: solid 1px black;
+    padding: 3px;
+}
+
+.function_entry_filename {
+
+    font-size: 1em;
+    text-align: left;
+    text-valign: top;
+
+    border-top: solid 1px black;
+    padding: 3px;
+}
+
+.sidemenu {
+    
+    border: 1px black solid;
+    padding: 5px;
+
+}
+
+.sidemenuheader {
+ 
+    color: darkred;
+    font-size: 1.1em;
+    font-weight: bold;
+    border-bottom: 1px dashed darkred;
+}
+
+.sidemenuentry {
+
+
+}
+
+.menu {
+
+}
+
diff --git a/build-aux/pmccabe2html b/build-aux/pmccabe2html
new file mode 100644
index 0000000..3f887ad
--- /dev/null
+++ b/build-aux/pmccabe2html
@@ -0,0 +1,907 @@
+# pmccabe2html - AWK script to convert pmccabe output to html
+
+# Copyright (C) 2007, 2008, 2009, 2010 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
+# the Free Software Foundation, either version 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# Written by Jose E. Marchesi <address@hidden>.
+# Adapted for gnulib by Simon Josefsson <address@hidden>.
+# Added support for C++ by Giuseppe Scrivano <address@hidden>.
+
+# Typical Invocation is from a Makefile.am:
+#
+# cyclo-$(PACKAGE).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=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD"
 \
+#                      -v url="http://www.gnu.org/software/$(PACKAGE)/" \
+#                       -v css=${top_srcdir}/build-aux/pmccabe.css \
+#                      > address@hidden
+#      mv address@hidden $@
+#
+# The variables available are:
+#   lang     output language, either 'html' or 'wiki'
+#   name     project name
+#   url      link to project's home page
+#   vcurl    URL to version controlled source code browser,
+#            a %FILENAME% in the string is replaced with the relative
+#            source filename
+#   css      CSS stylesheet filename, included verbatim in HTML output
+#   css_url  link to CSS stylesheet, an URL
+
+# Prologue & configuration
+BEGIN {
+    section_global_stats_p = 1
+    section_function_cyclo_p = 1
+
+    # "html" or "wiki"
+    package_name = name
+    output_lang = lang
+
+    # General Options
+    cyclo_simple_max = 10
+    cyclo_moderate_max = 20
+    cyclo_high_max = 50
+    cut_dir = "/../"
+    source_file_link_tmpl = vcurl
+
+    # HTML options
+    if (url != "")
+    {
+       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."
+    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_title = "Cyclomatic Complexity report for " package_name
+
+    # Wiki options
+    wiki_prolog = "{{Note|This page has been automatically generated}}"
+    wiki_epilog = ""
+
+    # Internal variables
+    nfuncs = 0;
+}
+
+# Functions
+
+function build_stats()
+{
+    # Maximum modified cyclo
+    for (fcn in mcyclo)
+    {
+        num_of_functions++
+        if (mcyclo[fcn] > max_mcyclo)
+        {
+            max_mcyclo = mcyclo[fcn]
+        }
+
+        if (mcyclo[fcn] > cyclo_high_max)
+        {
+            num_of_untestable_functions++
+        }
+        else if (mcyclo[fcn] > cyclo_moderate_max)
+        {
+            num_of_high_functions++
+        }
+        else if (mcyclo[fcn] > cyclo_simple_max)
+        {
+            num_of_moderate_functions++
+        }
+        else
+        {
+            num_of_simple_functions++
+        }
+    }
+}
+
+function html_fnc_table_complete (caption)
+{
+    html_fnc_table(caption, 1, 0, 1, 1, 1, 0, 1)
+}
+
+function html_fnc_table_abbrev (caption)
+{
+    html_fnc_table(caption, 1, 0, 1, 0, 1, 0, 0)
+}
+
+
+function html_fnc_table (caption,
+                         fname_p,
+                         mcyclo_p,
+                         cyclo_p,
+                         num_statements_p,
+                         num_lines_p,
+                         first_line_p,
+                         file_p)
+{
+    print "<table width=\"90%\" class=\"function_table\" cellpadding=\"0\" 
cellspacing=\"0\">"
+    if (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,
+                    file_p)
+    for (nfnc = 1; nfnc < nfuncs; nfnc++)
+    {
+        html_fnc(nfnc,
+                 fname_p,
+                 mcyclo_p,
+                 cyclo_p,
+                 num_statements_p,
+                 num_lines_p,
+                 first_line_p,
+                 file_p)
+    }
+    print "</table>"
+}
+
+function html_header ()
+{
+    print html_doctype
+    print "<html>"
+    print html_comment
+    print "<head>"
+    print "<title>" html_title "</title>"
+    print ""
+    print "<meta name=\"description\" content=\"" html_title "\">"
+    print "<meta name=\"keywords\" content=\"" html_title "\">"
+    print "<meta name=\"resource-type\" content=\"document\">"
+    print "<meta name=\"distribution\" content=\"global\">"
+    print "<meta name=\"Generator\" content=\"pmccabe2html\">"
+    print "<meta http-equiv=\"Content-Type\" content=\"text/html; 
charset=utf-8\">"
+    print "<script language=\"javascript\" type=\"text/javascript\">"
+    print "function show_hide(idCapa, idButton, fuerzaVisibilidad)\
+{\
+        var button = document.getElementById(idButton);\
+       var capa = document.getElementById(idCapa);\
+       if (capa)\
+       {\
+               if (fuerzaVisibilidad && fuerzaVisibilidad!=\"\") {\
+                       if (fuerzaVisibilidad==\"visible\") 
capa.style.display=\"\";\
+                       else capa.style.display=\"none\";\
+               }\
+               else\
+               {\
+                       if (capa.style.display == \"none\") {\
+                               capa.style.display = \"\";\
+                                button.innerHTML = \"&uarr;\";\
+                       } else {\
+                               capa.style.display = \"none\";\
+                                button.innerHTML = \"&darr;\";     \
+                       }\
+               }\
+       }\
+}"
+    print "</script>"
+
+
+    if (css_url != "")
+    {
+        print "<link rel=\"stylesheet\" href=\"" css_url "\" type 
=\"text/css\" media=\"screen\"/>"
+    }
+    if (css != "")
+    {
+        print "<style type =\"text/css\" media=\"screen\">"
+       print "<!--"
+        while ((getline cssline < css) > 0)
+        {
+           print cssline
+       }
+        print "-->"
+       print "</style />"
+       close(css)
+    }
+    print "</head>"
+    print "<body lang=\"en\" bgcolor=\"#FFFFFF\" text=\"#000000\" 
link=\"#0000FF\" \
+vlink=\"#800080\" alink=\"#FF0000\">"
+}
+
+function html_footer ()
+{
+    print "</body>"
+    print "</html>"
+}
+
+function html_fnc_header (fname_p,
+                          mcyclo_p,
+                          cyclo_p,
+                          num_statements_p,
+                          num_lines_p,
+                          first_line_p,
+                          file_p)
+{
+    print "<tr class=\"function_table_header\">"
+    if (fname_p)
+    {
+        # Function name
+        print "<td class=\"function_table_header_entry\">"
+        print ""
+        print "</td>"
+
+        print "<td class=\"function_table_header_entry\">"
+        print "Function Name"
+        print "</td>"
+    }
+    if (mcyclo_p)
+    {
+        # Modified cyclo
+        print "<td class=\"function_table_header_entry\">"
+        print "Modified Cyclo"
+        print "</td>"
+    }
+    if (cyclo_p)
+    {
+        # Cyclo
+        print "<td class=\"function_table_header_entry\">"
+        print "Cyclomatic"
+        print "<br/>"
+        print "Complexity"
+        print "</td>"
+    }
+    if (num_statements_p)
+    {
+        print "<td class=\"function_table_header_entry\">"
+        print "Number of"
+        print "<br/>"
+        print "Statements"
+        print "</td>"
+    }
+    if (num_lines_p)
+    {
+        print "<td class=\"function_table_header_entry\">"
+        print "Number of"
+        print "<br/>"
+        print "Lines"
+        print "</td>"
+    }
+    if (first_line_p)
+    {
+        print "<td class=\"function_table_header_entry\">"
+        print "First Line"
+        print "</td>"
+    }
+    if (file_p)
+    {
+        print "<td class=\"function_table_header_entry\">"
+        print "Source File"
+        print "</td>"
+
+    }
+    print "</tr>"
+}
+
+function html_fnc (nfun,
+                   fname_p,
+                   mcyclo_p,
+                   cyclo_p,
+                   num_statements_p,
+                   num_lines_p,
+                   first_line_p,
+                   file_p)
+{
+    fname = fnames[nfun]
+
+    # Function name
+    trclass = "function_entry_simple"
+    if (mcyclo[nfun] > cyclo_high_max)
+    {
+        trclass="function_entry_untestable"
+    }
+    else if (mcyclo[nfun] > cyclo_moderate_max)
+    {
+        trclass="function_entry_high"
+    }
+    else if (mcyclo[nfun] > cyclo_simple_max)
+    {
+        trclass="function_entry_moderate"
+    }
+
+    print "<tr class=\"" trclass "\">"
+    if (fname_p)
+    {
+        print "<td class=\"function_entry_filename\">"
+        if (file_p && mcyclo[nfun] > cyclo_simple_max)
+        {
+            print "<a href=\"javascript:void(0);\" title=\"show/hide function 
source\" onClick=\"javascript:show_hide('" fname "_src', '" fname "_button')\">\
+<span id=\"" fname "_button\">&darr;</span></a>"
+        }
+        else
+        {
+            print "&nbsp;"
+        }
+        print "</td>"
+
+        print "<td class=\"function_entry_name\">"
+        print fname
+        print "</td>"
+    }
+    if (mcyclo_p)
+    {
+        # Modified cyclo
+        print "<td class=\"function_entry_cyclo\">"
+        print mcyclo[nfun]
+        print "</td>"
+    }
+    if (cyclo_p)
+    {
+        # Cyclo
+        print "<td class=\"function_entry_cyclo\">"
+        print cyclo[nfun]
+        print "</td>"
+    }
+    if (num_statements_p)
+    {
+        # Number of statements
+        print "<td class=\"function_entry_number\">"
+        print num_statements[nfun]
+        print "</td>"
+    }
+    if (num_lines_p)
+    {
+        # Number of lines
+        print "<td class=\"function_entry_number\">"
+        print num_lines[nfun]
+        print "</td>"
+    }
+    if (first_line_p)
+    {
+        # First line
+        print "<td class=\"function_entry_number\">"
+        print first_line[nfun]
+        print "</td>"
+    }
+    if (file_p)
+    {
+        href = ""
+        if (source_file_link_tmpl != "")
+        {
+            # Get href target
+            href = source_file_link_tmpl
+            sub(/%FILENAME%/, file[nfun], href)
+        }
+
+        # Source file
+        print "<td class=\"function_entry_filename\">"
+        if (href != "")
+        {
+            print "<a href=\"" href "\">" file[nfun] "</a>"
+        }
+        else
+        {
+            print file[nfun]
+        }
+
+        print "</td>"
+
+
+        print "</tr>"
+
+        if (mcyclo[nfun] > cyclo_simple_max)
+        {
+            print "<tr>"
+
+            num_columns = 1;
+            if (fname_p) { num_columns++ }
+            if (mcyclo_p) { num_columns++ }
+            if (cyclo_p) { num_columns++ }
+            if (num_statements_p) { num_columns++ }
+            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)
+
+                print codeline
+            }
+            close(fname nfun "_fn.txt")
+            system("rm " fname nfun "_fn.txt")
+            print "</pre>"
+            print "</div>"
+            print "</td>"
+            print "</tr>"
+        }
+
+    }
+}
+
+function html_global_stats ()
+{
+    print "<div class=\"section_title\">Resume</div>"
+
+    print "<br/>"
+    print "<table class=\"resume_table\">"
+    # Total number of functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Total number of functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_functions
+    print "</td>"
+    print "</tr>"
+    # Number of simple functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Number of low risk functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_simple_functions
+    print "</td>"
+    print "</tr>"
+    # Number of moderate functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Number of moderate risk functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_moderate_functions
+    print "</td>"
+    print "</tr>"
+    # Number of high functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Number of high risk functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_high_functions
+    print "</td>"
+    print "</tr>"
+    # Number of untestable functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Number of untestable functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_untestable_functions
+    print "</td>"
+    print "</tr>"
+    print "</table>"
+    print "<br/>"
+}
+
+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>"
+    print "<td class=\"ranges_header_entry\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_header_entry\">"
+    print "Cyclomatic Complexity"
+    print "</td>"
+    print "<td class=\"ranges_header_entry\">"
+    print "Risk Evaluation"
+    print "</td>"
+    print "</tr>"
+    # Simple
+    print "<tr>"
+    print "<td class=\"ranges_entry_simple\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "0 - " cyclo_simple_max
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "Simple module, without much risk"
+    print "</td>"
+    print "</tr>"
+    # Moderate
+    print "<tr>"
+    print "<td class=\"ranges_entry_moderate\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print cyclo_simple_max + 1 " - " cyclo_moderate_max
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "More complex module, moderate risk"
+    print "</td>"
+    print "</tr>"
+    # High
+    print "<tr>"
+    print "<td class=\"ranges_entry_high\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print cyclo_moderate_max + 1 " - " cyclo_high_max
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "Complex module, high risk"
+    print "</td>"
+    print "</tr>"
+    # Untestable
+    print "<tr>"
+    print "<td class=\"ranges_entry_untestable\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "greater than " cyclo_high_max
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "Untestable module, very high risk"
+    print "</td>"
+    print "</tr>"
+    print "</table>"
+    print "<br/>"
+    html_fnc_table_complete("")
+}
+
+function wiki_global_stats ()
+{
+    print "{| class=\"cyclo_resume_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
+    # 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
+    # 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
+    # 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
+    # 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 "|}"
+}
+
+function wiki_function_cyclo ()
+{
+    print "==Details for all functions=="
+
+    print "Used ranges:"
+
+    print "{| class =\"cyclo_ranges_table\""
+    print "|-"
+    print "| class=\"cyclo_ranges_header_entry\" | "
+    print "| class=\"cyclo_ranges_header_entry\" | Cyclomatic Complexity"
+    print "| class=\"cyclo_ranges_header_entry\" | Risk Evaluation"
+    # Simple
+    print "|-"
+    print "| class=\"cyclo_ranges_entry_simple\" | "
+    print "| class=\"cyclo_ranges_entry\" | 0 - " cyclo_simple_max
+    print "| class=\"cyclo_ranges_entry\" | Simple module, without much risk"
+    # Moderate
+    print "|-"
+    print "| class=\"cyclo_ranges_entry_moderate\" | "
+    print "| class=\"cyclo_ranges_entry\" |" cyclo_simple_max + 1 " - " 
cyclo_moderate_max
+    print "| class=\"cyclo_ranges_entry\" | More complex module, moderate risk"
+    # High
+    print "|-"
+    print "| class=\"cyclo_ranges_entry_high\" | "
+    print "| class=\"cyclo_ranges_entry\" |" cyclo_moderate_max + 1 " - " 
cyclo_high_max
+    print "| class=\"cyclo_ranges_entry\" | Complex module, high risk"
+    # Untestable
+    print "|-"
+    print "| class=\"cyclo_ranges_entry_untestable\" | "
+    print "| class=\"cyclo_ranges_entry\" | greater than " cyclo_high_max
+    print "| class=\"cyclo_ranges_entry\" | Untestable module, very high risk"
+    print "|}"
+
+    print ""
+    print ""
+    wiki_fnc_table_complete("")
+}
+
+function wiki_fnc_table_complete (caption)
+{
+    wiki_fnc_table(caption, 1, 0, 1, 1, 1, 0, 1)
+}
+
+function wiki_fnc_table_abbrev (caption)
+{
+    wiki_fnc_table(caption, 1, 0, 0, 0, 0, 0, 0)
+}
+
+function wiki_fnc_table (caption,
+                         fname_p,
+                         mcyclo_p,
+                         cyclo_p,
+                         num_statements_p,
+                         num_lines_p,
+                         first_line_p,
+                         file_p)
+{
+    print "{| width=\"90%\" class=\"cyclo_function_table\" cellpadding=\"0\" 
cellspacing=\"0\">"
+    if (caption != "")
+    {
+        print "|+" caption
+    }
+    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++)
+    {
+        wiki_fnc(nfnc,
+                 fname_p,
+                 mcyclo_p,
+                 cyclo_p,
+                 num_statements_p,
+                 num_lines_p,
+                 first_line_p,
+                 file_p)
+    }
+    print "|}"
+}
+
+function wiki_fnc_header (fname_p,
+                          mcyclo_p,
+                          cyclo_p,
+                          num_statements_p,
+                          num_lines_p,
+                          first_line_p,
+                          file_p)
+{
+    if (fname_p)
+    {
+        # Function name
+        print "! class=\"cyclo_function_table_header_entry\" | Function Name"
+    }
+    if (mcyclo_p)
+    {
+        # Modified cyclo
+        print "! class=\"cyclo_function_table_header_entry\" | Modified Cyclo"
+    }
+    if (cyclo_p)
+    {
+        # Cyclo
+        print "! class=\"cyclo_function_table_header_entry\" | Cyclomatic 
Complexity"
+    }
+    if (num_statements_p)
+    {
+        print "! class=\"cyclo_function_table_header_entry\" | Number of 
Statements"
+    }
+    if (num_lines_p)
+    {
+        print "! class=\"cyclo_function_table_header_entry\" | Number of Lines"
+    }
+    if (first_line_p)
+    {
+        print "! class=\"cyclo_function_table_header_entry\" | First Line"
+    }
+    if (file_p)
+    {
+        print "! class=\"cyclo_function_table_header_entry\" | Source File"
+    }
+}
+
+function wiki_fnc (nfnc,
+                   fname_p,
+                   mcyclo_p,
+                   cyclo_p,
+                   num_statements_p,
+                   num_lines_p,
+                   first_line_p,
+                   file_p)
+{
+   fname = fnames[nfnc]
+
+    # Function name
+    trclass = "cyclo_function_entry_simple"
+    if (mcyclo[nfnc] > cyclo_high_max)
+    {
+        trclass="cyclo_function_entry_untestable"
+    }
+    else if (mcyclo[nfnc] > cyclo_moderate_max)
+    {
+        trclass="cyclo_function_entry_high"
+    }
+    else if (mcyclo[nfnc] > cyclo_simple_max)
+    {
+        trclass="cyclo_function_entry_moderate"
+    }
+
+    print "|- class=\"" trclass "\""
+    if (fname_p)
+    {
+        print "| class=\"cyclo_function_entry_name\" |" fname
+    }
+    if (mcyclo_p)
+    {
+        # Modified cyclo
+        print "| class=\"cyclo_function_entry_cyclo\" |" mcyclo[nfnc]
+    }
+    if (cyclo_p)
+    {
+        # Cyclo
+        print "| class=\"cyclo_function_entry_cyclo\" |" cyclo[nfnc]
+    }
+    if (num_statements_p)
+    {
+        # Number of statements
+        print "| class=\"cyclo_function_entry_number\" |" num_statements[nfnc]
+    }
+    if (num_lines_p)
+    {
+        # Number of lines
+        print "| class=\"cyclo_function_entry_number\" |" num_lines[nfnc]
+    }
+    if (first_line_p)
+    {
+        # First line
+        print "| class=\"cyclo_function_entry_number\" |" first_line[nfnc]
+    }
+    if (file_p)
+    {
+        href = ""
+        if (source_file_link_tmpl != "")
+        {
+            # Get href target
+            href = source_file_link_tmpl
+            sub(/%FILENAME%/, file[nfnc], href)
+        }
+
+        # Source file
+        print "| class=\"cyclo_function_entry_filename\" |" \
+            ((href != "") ? "[" href " " file[nfnc] "]" : "[" file[nfnc] "]")
+    }
+}
+
+# Scan data from a line
+{
+    function_name = $7
+
+    nfuncs++;
+    fnames[nfuncs] = function_name
+    mcyclo[nfuncs] = $1
+    cyclo[nfuncs] = $2
+    num_statements[nfuncs] = $3
+    first_line[nfuncs] = $4
+    num_lines[nfuncs] = $5
+
+    # Build the filename from the file_spec ($6)
+    begin_util_path = index($6, cut_dir)
+    tmpfilename = substr($6, begin_util_path + length(cut_dir))
+    sub(/\([0-9]+\):/, "", tmpfilename)
+    file[nfuncs] = tmpfilename
+
+    if (mcyclo[nfuncs] > cyclo_simple_max)
+    {
+        # Extract function contents to a fn_txt file
+        filepath = $6
+
+        sub(/\([0-9]+\):/, "", filepath)
+        num_line = 0
+
+        while ((getline codeline < filepath) > 0)
+        {
+            num_line++;
+            if ((num_line >= first_line[nfuncs]) &&
+                (num_line < first_line[nfuncs] + num_lines[nfuncs]))
+            {
+                print codeline > (function_name nfuncs "_fn.txt")
+            }
+        }
+        close (function_name nfuncs "_fn.txt")
+        close(filepath)
+    }
+
+    # Initial values for statistics variables
+    num_of_functions = 0
+    max_mcyclo = 0
+    max_function_length = 0
+    num_of_simple_functions = 0
+    num_of_moderate_functions = 0
+    num_of_high_functions = 0
+    num_of_untestable_functions = 0
+}
+
+# Epilogue
+END {
+    # Print header (only for html)
+    if (output_lang == "html")
+    {
+        html_header()
+    }
+
+    # Print prolog
+    if ((output_lang == "html") &&
+        (html_prolog != ""))
+    {
+        print html_prolog
+    }
+    if ((output_lang == "wiki") &&
+        (wiki_prolog != ""))
+    {
+        print wiki_prolog
+    }
+
+    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>"
+    }
+    if (output_lang == "wiki")
+    {
+        print "==" package_name " Cyclomatic Complexity Report=="
+        print "Report generated at: '''" strftime() "'''"
+    }
+
+    if (section_global_stats_p)
+    {
+        build_stats()
+
+        if (output_lang == "html")
+        {
+            html_global_stats()
+        }
+        if (output_lang == "wiki")
+        {
+            wiki_global_stats()
+        }
+    }
+    if (section_function_cyclo_p)
+    {
+        if (output_lang == "html")
+        {
+            html_function_cyclo()
+        }
+        if (output_lang == "wiki")
+        {
+            wiki_function_cyclo()
+        }
+    }
+
+    # Print epilog
+    if ((output_lang == "html") &&
+        (html_epilog != ""))
+    {
+        print html_epilog
+    }
+    if ((output_lang == "wiki") &&
+        (wiki_epilog != ""))
+    {
+        print wiki_epilog
+    }
+
+    # Print footer (html only)
+    if (output_lang == "html")
+    {
+        html_footer()
+    }
+}
+
+# End of pmccabe2html
diff --git a/cfg.mk b/cfg.mk
index e6b85c7..e78c4cc 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -94,11 +94,11 @@ upload:
 web:
        cd doc && ../build-aux/gendocs.sh --html "--css-include=texinfo.css" \
                -o ../$(htmldir)/manual/ $(PACKAGE) "$(PACKAGE_NAME)"
-       cp -v doc/reference/html/*.html doc/reference/html/*.png 
doc/reference/html/*.devhelp doc/reference/html/*.css $(htmldir)/reference/
+       cp -v doc/reference/$(PACKAGE).pdf doc/reference/html/*.html 
doc/reference/html/*.png doc/reference/html/*.devhelp doc/reference/html/*.css 
$(htmldir)/reference/
 
 upload-web:
        cd $(htmldir) && \
-               cvs commit -m "Update." manual/ reference/
+               cvs commit -m "Update." manual/ reference/ cyclo/
 
 review-diff:
        git diff `git describe --abbrev=0`.. \
diff --git a/configure.ac b/configure.ac
index a1e79b4..c20797c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -363,6 +363,7 @@ AC_CONFIG_FILES([
   db/Makefile
   db/gl/Makefile
   doc/Makefile
+  doc/cyclo/Makefile
   doc/reference/Makefile
   examples/Makefile
   extra/Makefile
diff --git a/extra/Makefile.am b/doc/cyclo/Makefile.am
similarity index 60%
copy from extra/Makefile.am
copy to doc/cyclo/Makefile.am
index 743be39..3404a4b 100644
--- a/extra/Makefile.am
+++ b/doc/cyclo/Makefile.am
@@ -1,5 +1,5 @@
 ## Process this file with automake to produce Makefile.in
-# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson.
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010  Simon Josefsson
 #
 # This file is part of Shishi.
 #
@@ -18,8 +18,15 @@
 # to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
 # Floor, Boston, MA 02110-1301, USA.
 
-EXTRA_DIST = fetchmail.diff fetchmail.mail
+EXTRA_DIST = cyclo-$(PACKAGE).html
 
-DIST_SUBDIRS = pam_shishi rsh-redone
-
-SUBDIRS = @PAM_SHISHI@
+cyclo-$(PACKAGE).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=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD"
 \
+                       -v url="http://www.gnu.org/software/$(PACKAGE)/" \
+                       -v css=${top_srcdir}/build-aux/pmccabe.css \
+                       > address@hidden
+       mv address@hidden $@
diff --git a/gl/Makefile.am b/gl/Makefile.am
index fa56f81..fb17963 100644
--- a/gl/Makefile.am
+++ b/gl/Makefile.am
@@ -9,7 +9,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl/override 
--lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc 
--tests-base=gl/tests --aux-dir=build-aux --avoid=xalloc-die --libtool 
--macro-prefix=gl --no-vc-files arpa_inet autobuild base64 bind close connect 
crc crypto/arcfour crypto/gc-des crypto/gc-hmac-md5 crypto/gc-hmac-sha1 
crypto/gc-md4 crypto/gc-md5 crypto/gc-pbkdf2-sha1 crypto/gc-random fcntl 
fdl-1.3 gendocs getaddrinfo getdate getline getpass getsubopt gnupload gpl-3.0 
lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings minmax 
netinet_in read-file recvfrom select sendto shutdown signal socket sockets 
socklen stat stdint strcase strerror strndup strtok_r strverscmp sys_select 
sys_socket sys_stat sys_time time timegm unistd valgrind-tests vasnprintf 
vasprintf warnings xalloc xgetdomainname xgethostname xstrndup xvasprintf
+# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl/override 
--lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc 
--tests-base=gl/tests --aux-dir=build-aux --avoid=xalloc-die --libtool 
--macro-prefix=gl --no-vc-files arpa_inet autobuild base64 bind close connect 
crc crypto/arcfour crypto/gc-des crypto/gc-hmac-md5 crypto/gc-hmac-sha1 
crypto/gc-md4 crypto/gc-md5 crypto/gc-pbkdf2-sha1 crypto/gc-random fcntl 
fdl-1.3 gendocs getaddrinfo getdate getline getpass getsubopt gnupload gpl-3.0 
lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings minmax 
netinet_in pmccabe2html read-file recvfrom select sendto shutdown signal socket 
sockets socklen stat stdint strcase strerror strndup strtok_r strverscmp 
sys_select sys_socket sys_stat sys_time time timegm unistd valgrind-tests 
vasnprintf vasprintf warnings xalloc xgetdomainname xgethostname xstrndup 
xvasprintf
 
 AUTOMAKE_OPTIONS = 1.5 gnits
 
@@ -685,6 +685,13 @@ EXTRA_DIST += netinet_in.in.h
 
 ## end   gnulib module netinet_in
 
+## begin gnulib module pmccabe2html
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/pmccabe2html 
$(top_srcdir)/build-aux/pmccabe.css
+
+## end   gnulib module pmccabe2html
+
 ## begin gnulib module rawmemchr
 
 
diff --git a/gl/m4/gnulib-cache.m4 b/gl/m4/gnulib-cache.m4
index 6973a8c..a3498ed 100644
--- a/gl/m4/gnulib-cache.m4
+++ b/gl/m4/gnulib-cache.m4
@@ -15,7 +15,7 @@
 
 
 # Specification in the form of a command-line invocation:
-#   gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu 
--source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests 
--aux-dir=build-aux --avoid=xalloc-die --libtool --macro-prefix=gl 
--no-vc-files arpa_inet autobuild base64 bind close connect crc crypto/arcfour 
crypto/gc-des crypto/gc-hmac-md5 crypto/gc-hmac-sha1 crypto/gc-md4 
crypto/gc-md5 crypto/gc-pbkdf2-sha1 crypto/gc-random fcntl fdl-1.3 gendocs 
getaddrinfo getdate getline getpass getsubopt gnupload gpl-3.0 lib-msvc-compat 
lib-symbol-versions maintainer-makefile manywarnings minmax netinet_in 
read-file recvfrom select sendto shutdown signal socket sockets socklen stat 
stdint strcase strerror strndup strtok_r strverscmp sys_select sys_socket 
sys_stat sys_time time timegm unistd valgrind-tests vasnprintf vasprintf 
warnings xalloc xgetdomainname xgethostname xstrndup xvasprintf
+#   gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu 
--source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests 
--aux-dir=build-aux --avoid=xalloc-die --libtool --macro-prefix=gl 
--no-vc-files arpa_inet autobuild base64 bind close connect crc crypto/arcfour 
crypto/gc-des crypto/gc-hmac-md5 crypto/gc-hmac-sha1 crypto/gc-md4 
crypto/gc-md5 crypto/gc-pbkdf2-sha1 crypto/gc-random fcntl fdl-1.3 gendocs 
getaddrinfo getdate getline getpass getsubopt gnupload gpl-3.0 lib-msvc-compat 
lib-symbol-versions maintainer-makefile manywarnings minmax netinet_in 
pmccabe2html read-file recvfrom select sendto shutdown signal socket sockets 
socklen stat stdint strcase strerror strndup strtok_r strverscmp sys_select 
sys_socket sys_stat sys_time time timegm unistd valgrind-tests vasnprintf 
vasprintf warnings xalloc xgetdomainname xgethostname xstrndup xvasprintf
 
 # Specification in the form of a few gnulib-tool.m4 macro invocations:
 gl_LOCAL_DIR([gl/override])
@@ -51,6 +51,7 @@ gl_MODULES([
   manywarnings
   minmax
   netinet_in
+  pmccabe2html
   read-file
   recvfrom
   select
diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4
index 9f734ac..7af1355 100644
--- a/gl/m4/gnulib-comp.m4
+++ b/gl/m4/gnulib-comp.m4
@@ -98,6 +98,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module multiarch:
   # Code from module netdb:
   # Code from module netinet_in:
+  # Code from module pmccabe2html:
   # Code from module rawmemchr:
   # Code from module read-file:
   # Code from module realloc-posix:
@@ -358,6 +359,8 @@ AC_SUBST([LTALLOCA])
   # Code from module netinet_in:
   gl_HEADER_NETINET_IN
   AC_PROG_MKDIR_P
+  # Code from module pmccabe2html:
+  AC_PATH_PROG([PMCCABE], [pmccabe], [false])
   # Code from module rawmemchr:
   gl_FUNC_RAWMEMCHR
   gl_STRING_MODULE_INDICATOR([rawmemchr])
@@ -659,6 +662,8 @@ AC_DEFUN([gl_FILE_LIST], [
   build-aux/config.rpath
   build-aux/gendocs.sh
   build-aux/gnupload
+  build-aux/pmccabe.css
+  build-aux/pmccabe2html
   build-aux/useless-if-before-free
   build-aux/vc-list-files
   build-aux/warn-on-use.h


hooks/post-receive
-- 
GNU shishi



reply via email to

[Prev in Thread] Current Thread [Next in Thread]