|  | #!/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/mbedtls.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; | 
|  |  | 
|  | # C/header files in the following directories will be checked | 
|  | my @directories = qw(include/mbedtls library doxygen/input); | 
|  |  | 
|  | # very naive pattern to find directives: | 
|  | # everything with a backslach except '\0' and backslash at EOL | 
|  | my $doxy_re = qr/\\(?!0|\n)/; | 
|  |  | 
|  | # Return an error code to the environment if a potential error in the | 
|  | # source code is found. | 
|  | my $exit_code = 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 | 
|  | $exit_code = 1; | 
|  | } | 
|  | } | 
|  |  | 
|  | close $fh; | 
|  | } | 
|  |  | 
|  | sub check_dir { | 
|  | my ($dirname) = @_; | 
|  | for my $file (<$dirname/*.[ch]>) { | 
|  | check_file($file); | 
|  | } | 
|  | } | 
|  |  | 
|  | # Check that the script is being run from the project's root directory. | 
|  | for my $dir (@directories) { | 
|  | if (! -d $dir) { | 
|  | die "This script must be run from the mbed TLS root directory"; | 
|  | } else { | 
|  | check_dir($dir) | 
|  | } | 
|  | } | 
|  |  | 
|  | exit $exit_code; | 
|  |  | 
|  | __END__ |