From df04fd1f9dd84009d4e2e446bb285e8ac46b2b2a Mon Sep 17 00:00:00 2001 From: Simon Josefsson Date: Fri, 7 Nov 2008 13:30:24 +0100 Subject: [PATCH] Add cyclomatic code complexity charts. --- build-aux/pmccabe.css | 227 +++++++++++++ build-aux/pmccabe2html | 908 +++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 49 ++- doc/Makefile.am | 2 +- doc/cyclo/Makefile.am | 33 ++ gl/Makefile.am | 11 +- gl/m4/gnulib-cache.m4 | 3 +- gl/m4/gnulib-comp.m4 | 4 + gl/m4/pmccabe2html.m4 | 14 + gl/sys_stat.in.h | 12 + 10 files changed, 1244 insertions(+), 19 deletions(-) create mode 100644 build-aux/pmccabe.css create mode 100755 build-aux/pmccabe2html create mode 100644 doc/cyclo/Makefile.am create mode 100644 gl/m4/pmccabe2html.m4 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 100755 index 0000000..27bb8f3 --- /dev/null +++ b/build-aux/pmccabe2html @@ -0,0 +1,908 @@ +#!/usr/bin/awk -f +# pmccabe2html - pmccabe to html converter + +# Copyright (C) 2007, 2008 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 . + +# Written by Jose E. Marchesi . +# Adapted for gnulib by Simon Josefsson . +# Added support for C++ by Giuseppe Scrivano . + +# Typical Invocation is from a Makefile.am: +# +# cyclo-libidn.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=libidn.git;a=blob;f=%FILENAME%;hb=HEAD" \ +# -v url="http://www.gnu.org/software/libidn/" \ +# -v css=../../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 = "Back to " package_name " Homepage

" + } + html_epilog = "
\ +Copyright (c) 2007, 2008 Free Software Foundation Inc." + html_doctype = "" + html_comment = "" + 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 "" + if (caption != "") + { + print "" + } + 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 "
" caption "
" +} + +function html_header () +{ + print html_doctype + print "" + print html_comment + print "" + print "" html_title "" + print "" + print "" + print "" + print "" + print "" + print "" + print "" + print "" + + + if (css_url != "") + { + print "" + } + if (css != "") + { + print "" + close(css) + } + print "" + print "" +} + +function html_footer () +{ + print "" + print "" +} + +function html_fnc_header (fname_p, + mcyclo_p, + cyclo_p, + num_statements_p, + num_lines_p, + first_line_p, + file_p) +{ + print "" + if (fname_p) + { + # Function name + print "" + print "" + print "" + + print "" + print "Function Name" + print "" + } + if (mcyclo_p) + { + # Modified cyclo + print "" + print "Modified Cyclo" + print "" + } + if (cyclo_p) + { + # Cyclo + print "" + print "Cyclomatic" + print "
" + print "Complexity" + print "" + } + if (num_statements_p) + { + print "" + print "Number of" + print "
" + print "Statements" + print "" + } + if (num_lines_p) + { + print "" + print "Number of" + print "
" + print "Lines" + print "" + } + if (first_line_p) + { + print "" + print "First Line" + print "" + } + if (file_p) + { + print "" + print "Source File" + print "" + + } + print "" +} + +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 "" + if (fname_p) + { + print "" + if (file_p && mcyclo[nfun] > cyclo_simple_max) + { + print "\ +" + } + else + { + print " " + } + print "" + + print "" + print fname + print "" + } + if (mcyclo_p) + { + # Modified cyclo + print "" + print mcyclo[nfun] + print "" + } + if (cyclo_p) + { + # Cyclo + print "" + print cyclo[nfun] + print "" + } + if (num_statements_p) + { + # Number of statements + print "" + print num_statements[nfun] + print "" + } + if (num_lines_p) + { + # Number of lines + print "" + print num_lines[nfun] + print "" + } + if (first_line_p) + { + # First line + print "" + print first_line[nfun] + print "" + } + 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 "" + if (href != "") + { + print "" file[nfun] "" + } + else + { + print file[nfun] + } + + print "" + + + print "" + + if (mcyclo[nfun] > cyclo_simple_max) + { + print "" + + 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 "" + print "
" + print "
"
+
+            while ((getline codeline < (fname nfun "_fn.txt")) > 0)
+            {
+                sub(/\\/, ">", codeline)
+                sub(/&/, "&", codeline)
+                
+                print codeline
+            }
+            close(fname nfun "_fn.txt")
+            system("rm " fname nfun "_fn.txt")
+            print "
" + print "
" + print "" + print "" + } + + } +} + +function html_global_stats () +{ + print "
Resume
" + + print "
" + print "" + # Total number of functions + print "" + print "" + print "" + print "" + # Number of simple functions + print "" + print "" + print "" + print "" + # Number of moderate functions + print "" + print "" + print "" + print "" + # Number of high functions + print "" + print "" + print "" + print "" + # Number of untestable functions + print "" + print "" + print "" + print "" + print "
" + print "Total number of functions" + print "" + print num_of_functions + print "
" + print "Number of low risk functions" + print "" + print num_of_simple_functions + print "
" + print "Number of moderate risk functions" + print "" + print num_of_moderate_functions + print "
" + print "Number of high risk functions" + print "" + print num_of_high_functions + print "
" + print "Number of untestable functions" + print "" + print num_of_untestable_functions + print "
" + print "
" +} + +function html_function_cyclo () +{ + print "
Details for all functions
" + print "

Used ranges:

" + + print "" + print "" + print "" + print "" + print "" + print "" + # Simple + print "" + print "" + print "" + print "" + print "" + # Moderate + print "" + print "" + print "" + print "" + print "" + # High + print "" + print "" + print "" + print "" + print "" + # Untestable + print "" + print "" + print "" + print "" + print "" + print "
" + print " " + print "" + print "Cyclomatic Complexity" + print "" + print "Risk Evaluation" + print "
" + print " " + print "" + print "0 - " cyclo_simple_max + print "" + print "Simple module, without much risk" + print "
" + print " " + print "" + print cyclo_simple_max + 1 " - " cyclo_moderate_max + print "" + print "More complex module, moderate risk" + print "
" + print " " + print "" + print cyclo_moderate_max + 1 " - " cyclo_high_max + print "" + print "Complex module, high risk" + print "
" + print " " + print "" + print "greater than " cyclo_high_max + print "" + print "Untestable module, very high risk" + print "
" + print "
" + 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 "
" package_name " Cyclomatic Complexity Report
" + print "

Report generated at: " strftime() "

" + } + 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 521e228..0b48e9a 100644 --- a/configure.ac +++ b/configure.ac @@ -256,21 +256,40 @@ AC_PROG_LIBTOOL AC_CONFIG_SUBDIRS([lib]) AC_CONFIG_SUBDIRS([libextra]) -AC_CONFIG_FILES([Makefile \ - doc/Makefile doc/examples/Makefile doc/scripts/Makefile \ - doc/manpages/Makefile doc/reference/Makefile doc/doxygen/Doxyfile \ - doc/credentials/Makefile doc/credentials/x509/Makefile \ - doc/credentials/srp/Makefile doc/credentials/openpgp/Makefile \ - gl/Makefile gl/tests/Makefile \ - tests/Makefile tests/rsa-md5-collision/Makefile tests/userid/Makefile \ - tests/pkcs1-padding/Makefile tests/pkcs8-decode/Makefile \ - tests/pkcs12-decode/Makefile tests/pathlen/Makefile \ - tests/key-id/Makefile tests/sha2/Makefile \ - tests/openpgp-certs/Makefile \ - src/Makefile \ - src/cfg/Makefile src/cfg/platon/Makefile src/cfg/platon/str/Makefile \ - guile/Makefile guile/modules/Makefile \ - guile/src/Makefile guile/tests/Makefile]) +AC_CONFIG_FILES([ \ + Makefile \ + doc/Makefile \ + doc/examples/Makefile \ + doc/cyclo/Makefile \ + doc/scripts/Makefile \ + doc/manpages/Makefile \ + doc/reference/Makefile \ + doc/doxygen/Doxyfile \ + doc/credentials/Makefile \ + doc/credentials/x509/Makefile \ + doc/credentials/srp/Makefile \ + doc/credentials/openpgp/Makefile \ + gl/Makefile \ + gl/tests/Makefile \ + tests/Makefile \ + tests/rsa-md5-collision/Makefile \ + tests/userid/Makefile \ + tests/pkcs1-padding/Makefile \ + tests/pkcs8-decode/Makefile \ + tests/pkcs12-decode/Makefile \ + tests/pathlen/Makefile \ + tests/key-id/Makefile \ + tests/sha2/Makefile \ + tests/openpgp-certs/Makefile \ + src/Makefile \ + src/cfg/Makefile \ + src/cfg/platon/Makefile \ + src/cfg/platon/str/Makefile \ + guile/Makefile \ + guile/modules/Makefile \ + guile/src/Makefile \ + guile/tests/Makefile \ +]) AC_CONFIG_FILES([guile/pre-inst-guile], [chmod +x guile/pre-inst-guile]) diff --git a/doc/Makefile.am b/doc/Makefile.am index 60c3797..6362a98 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -23,7 +23,7 @@ EXTRA_DIST = TODO README.GIT README.autoconf certtool.cfg gnutls.ps \ gnutls.pdf gnutls.html extract-guile-c-doc.scm \ doxygen/Doxyfile.in doxygen/Doxyfile.orig texinfo.css -SUBDIRS = examples scripts manpages credentials +SUBDIRS = examples cyclo scripts manpages credentials if ENABLE_GTK_DOC SUBDIRS += reference endif diff --git a/doc/cyclo/Makefile.am b/doc/cyclo/Makefile.am new file mode 100644 index 0000000..7f6ebdd --- /dev/null +++ b/doc/cyclo/Makefile.am @@ -0,0 +1,33 @@ +## Process this file with automake to produce Makefile.in +# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation +# +# Author: Simon Josefsson +# +# This file is part of GNUTLS. +# +# This file 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 file 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 file; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +EXTRA_DIST = cyclo-gnutls.html + +cyclo-gnutls.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=gnutls.git;a=blob;f=%FILENAME%;hb=HEAD" \ + -v url="http://www.gnu.org/software/gnutls/" \ + -v css=../../build-aux/pmccabe.css \ + > tmp + mv tmp $@ diff --git a/gl/Makefile.am b/gl/Makefile.am index e7409ad..5648591 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 --with-tests --libtool --macro-prefix=gl --no-vc-files accept arpa_inet autobuild bind close connect error fdl-1.3 gendocs getaddrinfo getline getpass-gnu gnupload gpl-3.0 inet_ntop inet_pton lgpl-2.1 listen maintainer-makefile minmax perror progname read-file readline recv select send setsockopt shutdown socket sys_stat version-etc-fsf +# 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 --with-tests --libtool --macro-prefix=gl --no-vc-files accept arpa_inet autobuild bind close connect error fdl-1.3 gendocs getaddrinfo getline getpass-gnu gnupload gpl-3.0 inet_ntop inet_pton lgpl-2.1 listen maintainer-makefile minmax perror pmccabe2html progname read-file readline recv select send setsockopt shutdown socket sys_stat version-etc-fsf AUTOMAKE_OPTIONS = 1.5 gnits @@ -122,7 +122,7 @@ libgnu_la_SOURCES += c-ctype.h c-ctype.c ## begin gnulib module close -EXTRA_DIST += close.c +EXTRA_DIST += close.c w32sock.h EXTRA_libgnu_la_SOURCES += close.c @@ -404,6 +404,13 @@ EXTRA_libgnu_la_SOURCES += perror.c ## end gnulib module perror +## begin gnulib module pmccabe2html + + +EXTRA_DIST += $(top_srcdir)/build-aux/pmccabe2html $(top_srcdir)/build-aux/pmccabe.css + +## end gnulib module pmccabe2html + ## begin gnulib module progname libgnu_la_SOURCES += progname.h progname.c diff --git a/gl/m4/gnulib-cache.m4 b/gl/m4/gnulib-cache.m4 index 96a26cb..6fc3e49 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 --with-tests --libtool --macro-prefix=gl --no-vc-files accept arpa_inet autobuild bind close connect error fdl-1.3 gendocs getaddrinfo getline getpass-gnu gnupload gpl-3.0 inet_ntop inet_pton lgpl-2.1 listen maintainer-makefile minmax perror progname read-file readline recv select send setsockopt shutdown socket sys_stat version-etc-fsf +# 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 --with-tests --libtool --macro-prefix=gl --no-vc-files accept arpa_inet autobuild bind close connect error fdl-1.3 gendocs getaddrinfo getline getpass-gnu gnupload gpl-3.0 inet_ntop inet_pton lgpl-2.1 listen maintainer-makefile minmax perror pmccabe2html progname read-file readline recv select send setsockopt shutdown socket sys_stat version-etc-fsf # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([gl/override]) @@ -41,6 +41,7 @@ gl_MODULES([ maintainer-makefile minmax perror + pmccabe2html progname read-file readline diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4 index 7dcff38..dca40d5 100644 --- a/gl/m4/gnulib-comp.m4 +++ b/gl/m4/gnulib-comp.m4 @@ -119,6 +119,7 @@ AC_SUBST([LTALLOCA]) AC_PROG_MKDIR_P gl_FUNC_PERROR gl_STRING_MODULE_INDICATOR([perror]) + gl_PMCCABE2HTML gl_FUNC_READ_FILE gl_FUNC_READLINE gl_FUNC_REALLOC_POSIX @@ -325,6 +326,8 @@ AC_DEFUN([gl_FILE_LIST], [ build-aux/gendocs.sh build-aux/gnupload build-aux/link-warning.h + build-aux/pmccabe.css + build-aux/pmccabe2html doc/fdl-1.3.texi doc/gendocs_template doc/gpl-3.0.texi @@ -433,6 +436,7 @@ AC_DEFUN([gl_FILE_LIST], [ m4/netdb_h.m4 m4/netinet_in_h.m4 m4/perror.m4 + m4/pmccabe2html.m4 m4/printf.m4 m4/read-file.m4 m4/readline.m4 diff --git a/gl/m4/pmccabe2html.m4 b/gl/m4/pmccabe2html.m4 new file mode 100644 index 0000000..5e20742 --- /dev/null +++ b/gl/m4/pmccabe2html.m4 @@ -0,0 +1,14 @@ +# pmccabe2html.m4 serial 1 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + +# Usage: gl_PMCCABE2HTML([]). +AC_DEFUN([gl_PMCCABE2HTML], +[ + AC_PROG_AWK + AC_PATH_PROG([PMCCABE], [pmccabe], [false]) +]) diff --git a/gl/sys_stat.in.h b/gl/sys_stat.in.h index 1a900a4..3748c26 100644 --- a/gl/sys_stat.in.h +++ b/gl/sys_stat.in.h @@ -275,6 +275,12 @@ # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) #endif + +#ifdef __cplusplus +extern "C" { +#endif + + #if @GNULIB_LSTAT@ # if ! @HAVE_LSTAT@ /* mingw does not support symlinks, therefore it does not have lstat. But @@ -341,6 +347,12 @@ extern int lchmod (const char *filename, mode_t mode); lchmod (f, m)) #endif + +#ifdef __cplusplus +} +#endif + + #endif /* _GL_SYS_STAT_H */ #endif /* _GL_SYS_STAT_H */ #endif -- 2.1.4