From f0171bc93cdaee6bb56400dde17fa7f9a07eb8f2 Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Wed, 7 Nov 2012 20:06:27 +0000 Subject: [PATCH] - Added donated script for checking for non-doxygen blocks with directives --- scripts/check_doxy_blocks.pl | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 scripts/check_doxy_blocks.pl diff --git a/scripts/check_doxy_blocks.pl b/scripts/check_doxy_blocks.pl new file mode 100644 index 000000000..c90143bf2 --- /dev/null +++ b/scripts/check_doxy_blocks.pl @@ -0,0 +1,57 @@ +#!/usr/bin/perl + +# Detect comment blocks that are likely meant to be doxygen blocks but aren't. +# +# More precisely, look for normal comment block containing '\'. +# Of course one could use doxygen warnings, eg with: +# sed -e '/EXTRACT/s/YES/NO/' doxygen/polarssl.doxyfile | doxygen - +# but that would warn about any undocumented item, while our goal is to find +# items that are documented, but not marked as such by mistake. + +use warnings; +use strict; +use File::Basename; + +# header files in the following directories will be checked +my @directories = qw(include/polarssl library doxygen/input); + +# very naive pattern to find directives: +# everything with a backslach except '\0' +my $doxy_re = qr/\\(?!0)/; + +sub check_file { + my ($fname) = @_; + open my $fh, '<', $fname or die "Failed to open '$fname': $!\n"; + + # first line of the last normal comment block, + # or 0 if not in a normal comment block + my $block_start = 0; + while (my $line = <$fh>) { + $block_start = $. if $line =~ m/\/\*(?![*!])/; + $block_start = 0 if $line =~ m/\*\//; + if ($block_start and $line =~ m/$doxy_re/) { + print "$fname:$block_start: directive on line $.\n"; + $block_start = 0; # report only one directive per block + } + } + + close $fh; +} + +sub check_dir { + my ($dirname) = @_; + for my $file (<$dirname/*.[ch]>) { + check_file($file); + } +} + +# locate root directory based on invocation name +my $root = dirname($0) . '/..'; +chdir $root or die "Can't chdir to '$root': $!\n"; + +# just do it +for my $dir (@directories) { + check_dir($dir) +} + +__END__