From 55f60847cbb70af926c83b2fb69af0b51e14c26f Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
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 | 35 +++++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)
diff --git a/build-scripts/wikiheaders.pl b/build-scripts/wikiheaders.pl
index 7c2411ad5d..0cb945a14b 100755
--- a/build-scripts/wikiheaders.pl
+++ b/build-scripts/wikiheaders.pl
@@ -402,14 +402,33 @@ sub usage {
#print("$fn:\n$str\n\n");
- $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);
+ # 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);
+ }
+
}
close(FH);