[Top][All Lists]
[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 = \"↑\";\
+ } else {\
+ capa.style.display = \"none\";\
+ button.innerHTML = \"↓\"; \
+ }\
+ }\
+ }\
+}"
+ 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\">↓</span></a>"
+ }
+ else
+ {
+ print " "
+ }
+ 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(/\\</, "<", codeline)
+ sub(/\\>/, ">", codeline)
+ sub(/&/, "&", 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 " "
+ 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 " "
+ 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 " "
+ 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 " "
+ 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 " "
+ 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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] GNU shishi branch, master, updated. shishi-0-0-43-21-g8b93300,
Simon Josefsson <=