Hi Paul,

I think this is generally a good idea and I can create a patch for it.
But presumably this will not fix my problem:
Something in the signature of perl-native changes, such as a class, a variable, or a native dependency, without the result changing. The taskhash changes; there is no sstate for it, so perl-native is rebuilt. After the build, bitbake reports the outhash to the hash server. The output is identical to the previous one, so the server maps the new taskhash to the old unihash. The tasks in libio-socket-ssl-perl construct their hashes from the unihashes of their dependencies. For them, nothing has changed: `do_configure` does not run again, and the old Makefile remains. However, the consumer’s sysroot remembers the dependency’s taskhash, not the unihash. It sees the new taskhash, removes perl-native, and restages it. The files come from the fresh build and carry its timestamp. Afterward, sed -i sets them to “now.”

On Wed, Sep 30 2026 at 12:34:29 +01:00:00, Paul Barker <[email protected]> wrote:
On Tue, 2026-09-29 at 23:54 +0200, Markus Volk wrote:
 On Tue, Sep 29 2026 at 18:56:26 +02:00:00, Alexander Kanavin
 <[email protected] <mailto:[email protected]>> wrote:
> Why is it failing? Shouldn't we fix the fail instead of suppressing
 > the regeneration?
 >
 > Alex

 The failure is intentional on MakeMaker side. This is the rule it
 writes into every Makefile

 $(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
       $(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?"
       ...
       -$(NOECHO) $(MV)   $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
       - $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
       $(PERLRUN) Makefile.PL <original args>
       $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
       $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command.  <=="
       $(FALSE)

 The only way to "fix the fail" is to run make a second time. That is
 what the first version did

Regenerating the Makefile inside do_compile/do_install is not correct
 for us because it skips the do_configure fixups.
The trigger is only a timestamp. CONFIGDEP is Config.pm and config.h of
 the staged perl. do_prepare_recipe_sysroot re-stages them, and the
FIXMESTAGINGDIR sed in staging.bbclass rewrites them, so they get a new mtime even though their content matches what do_configure saw. If perl really changes, the task hash changes and bitbake reruns do_configure
 anyway. That path does apply the fixups.

The correct way to regenerate the Makefile is do_configure, and bitbake
 already takes care of that. Clearing CONFIGDEP only stops make from
 reacting to a timestamp that means nothing inside a bitbake build.
Makefile.PL itself stays a dependency, so a changed Makefile.PL would
 still be noticed.

Hi Markus,

There is another possible approach here. We could modify
staging_processfixme() to preserve the mtime of the files it modifies.
That should prevent cpan Makefiles from being considered out-of-date
when perl is re-staged.

Thanks,

--
Paul Barker





-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#246962): 
https://lists.openembedded.org/g/openembedded-core/message/246962
Mute This Topic: https://lists.openembedded.org/mt/121446692/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to