From 55f60847cbb70af926c83b2fb69af0b51e14c26f Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Fri, 8 Oct 2021 20:49:51 -0400 Subject: [PATCH] wikiheaders.pl: Try to handle functions with multiple declarations better. --- build-scripts/wikiheaders.pl | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/build-scripts/wikiheaders.pl b/build-scripts/wikiheaders.pl index 7c2411ad5..0cb945a14 100755 --- a/build-scripts/wikiheaders.pl +++ b/build-scripts/wikiheaders.pl @@ -402,14 +402,33 @@ while (readdir(DH)) { #print("$fn:\n$str\n\n"); - $headerfuncs{$fn} = $str; - $headerdecls{$fn} = $decl; - $headerfuncslocation{$fn} = $dent; - $headerfuncschunk{$fn} = scalar(@contents); - $headerfuncshasdoxygen{$fn} = $has_doxygen; + # There might be multiple declarations of a function due to #ifdefs, + # and only one of them will have documentation. If we hit an + # undocumented one before, delete the placeholder line we left for + # it so it doesn't accumulate a new blank line on each run. + my $skipfn = 0; + if (defined $headerfuncshasdoxygen{$fn}) { + if ($headerfuncshasdoxygen{$fn} == 0) { # An undocumented declaration already exists, nuke its placeholder line. + delete $contents[$headerfuncschunk{$fn}]; # delete DOES NOT RENUMBER existing elements! + } else { # documented function already existed? + $skipfn = 1; # don't add this copy to the list of functions. + if ($has_doxygen) { + print STDERR "WARNING: Function '$fn' appears to be documented in multiple locations. Only keeping the first one we saw!\n"; + } + push @contents, join("\n", @decllines); # just put the existing declation in as-is. + } + } + + if (!$skipfn) { + $headerfuncs{$fn} = $str; + $headerdecls{$fn} = $decl; + $headerfuncslocation{$fn} = $dent; + $headerfuncschunk{$fn} = scalar(@contents); + $headerfuncshasdoxygen{$fn} = $has_doxygen; + push @contents, join("\n", @templines); + push @contents, join("\n", @decllines); + } - push @contents, join("\n", @templines); - push @contents, join("\n", @decllines); } close(FH);