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 gss".
http://git.savannah.gnu.org/cgit/gss.git/commit/?id=7cfd3679135df549f457f9d17b70d0e607312840 The branch, master has been updated via 7cfd3679135df549f457f9d17b70d0e607312840 (commit) via 0ae145237b5efd9798b76ad8f3a8cc80aac238eb (commit) from 701c3a24f90990fa0551998d6c9719c30c971518 (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 7cfd3679135df549f457f9d17b70d0e607312840 Author: Simon Josefsson <[email protected]> Date: Tue Jan 19 00:54:50 2010 +0100 Add cyclo stuff. commit 0ae145237b5efd9798b76ad8f3a8cc80aac238eb Author: Simon Josefsson <[email protected]> Date: Tue Jan 19 00:54:34 2010 +0100 Add cyclo stuff. ----------------------------------------------------------------------- Summary of changes: build-aux/pmccabe.css | 227 +++++++++ build-aux/pmccabe2html | 907 ++++++++++++++++++++++++++++++++++ configure.ac | 1 + doc/Makefile.am | 3 +- Makefile.am => doc/cyclo/Makefile.am | 22 +- gl/Makefile.am | 9 +- gl/Makefile.am~ | 2 +- gl/m4/gnulib-cache.m4 | 3 +- gl/m4/gnulib-cache.m4~ | 2 +- gl/m4/gnulib-comp.m4 | 3 + gl/m4/gnulib-comp.m4~ | 2 +- 11 files changed, 1164 insertions(+), 17 deletions(-) create mode 100644 build-aux/pmccabe.css create mode 100644 build-aux/pmccabe2html copy Makefile.am => doc/cyclo/Makefile.am (64%) 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 <[email protected]>. +# Adapted for gnulib by Simon Josefsson <[email protected]>. +# Added support for C++ by Giuseppe Scrivano <[email protected]>. + +# 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 \ +# > $...@-tmp +# mv $...@-tmp $@ +# +# 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/configure.ac b/configure.ac index 3245194..5812117 100644 --- a/configure.ac +++ b/configure.ac @@ -132,6 +132,7 @@ AC_CONFIG_FILES([ Makefile gss.pc doc/Makefile + doc/cyclo/Makefile doc/reference/Makefile gl/Makefile lib/Makefile diff --git a/doc/Makefile.am b/doc/Makefile.am index 2f6eb47..40ae216 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -18,8 +18,9 @@ # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. +SUBDIRS = cyclo if ENABLE_GTK_DOC -SUBDIRS = reference +SUBDIRS += reference endif EXTRA_DIST = gss.html gss.ps gss.pdf \ diff --git a/Makefile.am b/doc/cyclo/Makefile.am similarity index 64% copy from Makefile.am copy to doc/cyclo/Makefile.am index c88c280..628ce80 100644 --- a/Makefile.am +++ b/doc/cyclo/Makefile.am @@ -1,5 +1,5 @@ ## Process this file with automake to produce Makefile.in -# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon Josefsson. +# Copyright (C) 2010 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # @@ -18,13 +18,13 @@ # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. -DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc - -EXTRA_DIST = cfg.mk maint.mk .clcopying - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = gss.pc - -SUBDIRS = po gl lib src tests doc - -ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I lib/gl/m4 -I src/gl/m4 +cyclo-$(PACKAGE).html: + $(PMCCABE) ${top_srcdir}/lib/*.[ch] ${top_srcdir}/lib/krb5/*.[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 \ + > $...@-tmp + mv $...@-tmp $@ diff --git a/gl/Makefile.am b/gl/Makefile.am index 1261986..109d961 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 --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload gpl-3.0 havelib lib-symbol-versions maintainer-makefile manywarnings warnings +# 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 --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload gpl-3.0 havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html warnings AUTOMAKE_OPTIONS = 1.5 gnits @@ -75,6 +75,13 @@ EXTRA_DIST += $(top_srcdir)/maint.mk ## end gnulib module maintainer-makefile +## begin gnulib module pmccabe2html + + +EXTRA_DIST += $(top_srcdir)/build-aux/pmccabe2html $(top_srcdir)/build-aux/pmccabe.css + +## end gnulib module pmccabe2html + ## begin gnulib module useless-if-before-free diff --git a/gl/Makefile.am~ b/gl/Makefile.am~ index d95bb17..1261986 100644 --- a/gl/Makefile.am~ +++ b/gl/Makefile.am~ @@ -1,6 +1,6 @@ ## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# Copyright (C) 2002-2010 Free Software Foundation, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General diff --git a/gl/m4/gnulib-cache.m4 b/gl/m4/gnulib-cache.m4 index ab4bf07..beeca46 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 --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload gpl-3.0 havelib lib-symbol-versions maintainer-makefile manywarnings warnings +# 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 --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload gpl-3.0 havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html warnings # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([gl/override]) @@ -29,6 +29,7 @@ gl_MODULES([ lib-symbol-versions maintainer-makefile manywarnings + pmccabe2html warnings ]) gl_AVOID([]) diff --git a/gl/m4/gnulib-cache.m4~ b/gl/m4/gnulib-cache.m4~ index 359d2d4..ab4bf07 100644 --- a/gl/m4/gnulib-cache.m4~ +++ b/gl/m4/gnulib-cache.m4~ @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# Copyright (C) 2002-2010 Free Software Foundation, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4 index de9d21d..57408bd 100644 --- a/gl/m4/gnulib-comp.m4 +++ b/gl/m4/gnulib-comp.m4 @@ -52,6 +52,7 @@ AC_DEFUN([gl_INIT], [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], [GNUmakefile=$GNUmakefile])]) gl_LD_VERSION_SCRIPT + AC_PATH_PROG([PMCCABE], [pmccabe], [false]) AC_SUBST([WARN_CFLAGS]) m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || @@ -184,6 +185,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 doc/fdl-1.3.texi diff --git a/gl/m4/gnulib-comp.m4~ b/gl/m4/gnulib-comp.m4~ index c8bd50e..de9d21d 100644 --- a/gl/m4/gnulib-comp.m4~ +++ b/gl/m4/gnulib-comp.m4~ @@ -1,5 +1,5 @@ # DO NOT EDIT! GENERATED AUTOMATICALLY! -# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# Copyright (C) 2002-2010 Free Software Foundation, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General hooks/post-receive -- GNU gss _______________________________________________ Gss-commit mailing list [email protected] http://lists.gnu.org/mailman/listinfo/gss-commit
