doxygen icon indicating copy to clipboard operation
doxygen copied to clipboard

Continues searching through recursive symlinks

Open d-torrance opened this issue 3 years ago • 1 comments
trafficstars

Describe the bug When building the documentation for the mathematics library Givaro, we recursively search through various symlinks over and over again, redundantly finding the same files. For example (from http://qa-logs.debian.net/2022/07/28/givaro_4.2.0-1_unstable.log, as reported in Debian bug #1016261):

Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/gfq.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givrnscstor.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/gf2.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givprimes16.C : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givrnsfixed.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givrnsconvert.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givtablelimits.C : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/gfq.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givrnscstor.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/gf2.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givprimes16.C : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givrnsfixed.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givrnsconvert.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givaro/givtablelimits.C : 4.2.0
.
.
.
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/gfq.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givrnscstor.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/gf2.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givprimes16.C : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givrnsfixed.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givrnsconvert.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givaro/givtablelimits.C : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/gfq.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givrnscstor.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/gf2.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givprimes16.C : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givrnsfixed.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givrnsconvert.inl : 4.2.0

The build eventually hangs:

Parsing file /<<PKGBUILDDIR>>/tests/test-rint_arith.C...
Preprocessing /<<PKGBUILDDIR>>/tests/test-rmint_arith.C...
Parsing file /<<BUILDDIR>>/g
E: Build killed with signal TERM after 150 minutes of inactivity

Expected behavior Stop searching after realizing we've already found the given files. This was the behavior when using Doxygen 1.9.1, e.g., from https://buildd.debian.org/status/fetch.php?pkg=givaro&arch=all&ver=4.2.0-1&stamp=1639598962&raw=0:

Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field
Version of /<<PKGBUILDDIR>>/src/kernel/field/gf2.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/gfq.inl : 4.2.0
Searching for files in directory /<<PKGBUILDDIR>>/src/kernel/field/givaro
Version of /<<PKGBUILDDIR>>/src/kernel/field/givprimes16.C : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givrnsconvert.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givrnscstor.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givrnsfixed.inl : 4.2.0
Version of /<<PKGBUILDDIR>>/src/kernel/field/givtablelimits.C : 4.2.0:

To Reproduce I haven't been able to construct a smaller example that exhibits the problem, but here are the steps to reproduce it using the Givaro source:

git clone https://github.com/linbox-team/givaro
cd givaro
./autogen.sh # this creates the symlinks that cause the issue
cd docs
doxygen Doxyfile.mod

Version 1.9.4, using the package currently in Debian unstable (1.9.4-2).

d-torrance avatar Aug 04 '22 18:08 d-torrance

I ran, under Cygwin, the process as you described and I see that for each file the FILE_VERSION_FILTER = "../givaro-config --version" is used, this is very expensive (starting a sub process each time), so I disabled the FILE_VERSION_FILTER by setting it to the empty string. Now the process ran quite a bit faster and did go into writing the documentation. So I don't think the requirement about "Stop searching after realizing we've already found the given files." is already fulfilled.

What I do see is that in the console output is:

Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...
Generating docs for file montgomery.h...

which is a bit strange and it looks now also that the process hangs at Generating docs for compound Givaro::IntNumTheoDom.... As the output in the presented log file is cut off (buffering) it is hard to tell where exactly the 1.9.4 version was hanging and was killed.

The main problem lies in my opinion in the givaro-config creating the (recursive) links but doxygen should handle this properly)

I remember that recently something was done in respect to recursive calls:

Commit: ffd5a0947f809304008c1b327dd2306997430355 [ffd5a09]
Date: Saturday, July 30, 2022 12:25:25 PM
Added guard to prevent stack overflow in hasNonReferenceSuperClass()

so running the current / recent master (1.9.5 (5763255ba4fb02b7fa11300515f46fbfda38180e)) and all went OK (all with and without the FILE_VERSION_FILTER).

I think the problem has been fixed but not released.

albert-github avatar Aug 05 '22 08:08 albert-github

Issue spotted on openSUSE Tumbleweed which uses Doxygen 1.9.4 as well. We patched Doxygen with 6045c84aa1f6c21e99954268c720f3be7bae7995, found with git bisect.

super7ramp avatar Aug 23 '22 23:08 super7ramp

This issue was previously marked 'fixed but not released', which means it should be fixed in doxygen version 1.9.5. Please verify if this is indeed the case. Reopen the issue if you think it is not fixed and please include any additional information that you think can be relevant (preferably in the form of a self-contained example).

doxygen avatar Aug 26 '22 16:08 doxygen