RE: 13.2 BETA2: how do debug META_MODE?

From: Mark Millard <marklmi_at_yahoo.com>
Date: Tue, 21 Feb 2023 04:44:59 UTC
Peter <pmc_at_citylink.dinoex.sub.org> wrote on
Date: Tue, 21 Feb 2023 03:45:12 UTC :

> on /some/ of my nodes, META_MODE seems not being honored anymore:
> I had to build them another time, and the lengthy lib/clang gets
> built all over again (tried two times).
> This is so since 13.2 (BETA2). It did work in 13.1 (RELENG), at least
> according to the timing from the logfiles. 
> 
> Now I'm trying to figure out the difference, because I have some
> nodes where it appears to more-or-less work (have seen buildworld
> take 5 minutes), and others where it doesn't (take an hour to build).
> The thing is scripted, so it is not so very likely an operator error
> (while not impossible either).
> 
> But it seems difficult to figure out details: "make -n" seems to not
> care about META_MODE, while META_MODE suppresses all useful output from
> make. And the docs say there are *.meta files (yes there are), but no
> info about how to verify their content, or how to get make tell what
> it is going to do and why (and the buildworld is not the most easy
> to understand target)...
> 
> So, some inspiration would be welcome...

On thing to check on is if filemon.ko is loaded and operational.
META_MODE greatly depends on it.


Another thing to know is that the following are very different
for what all is built  for the "(again #0)" line vs. the other
two "again" lines, using buildworld as an example context.
Imagine here the the first buildworld rebuilds llvm/clang
materials.

# cd /usr/src/
# env WITH_META_MODE=yes make buildworld
# env WITH_META_MODE=yes make installworld
# env WITH_META_MODE=yes make buildworld (again #0)
## no more rebuilds below?
# env WITH_META_MODE=yes make buildworld (again #1)
# env WITH_META_MODE=yes make buildworld (again #2)

Unfortunately, the some of the install activity registers
as activity that is to cause later rebuild activity:
updated file dates.

There are also issues of sort of a feedback loop: rm
ends up updated (deleted and replaced) by install but rm
was also listed as part of the sequence of replacing some
other files. Result? The rm removal/replacement ends up
meaning the files are to be regenerated, not just recopied.
There is a long list of such commands, not just rm.

"again #0" will rebuild llvm/clang. The other two "again"s
will not.

See:

https://lists.freebsd.org/pipermail/freebsd-current/2021-January/078488.html

and:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=257616 .


===
Mark Millard
marklmi at yahoo.com