All of lore.kernel.org
 help / color / mirror / Atom feed
* [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange
@ 2026-09-22  9:23 Markus Volk
  2026-09-22  9:23 ` [oe-core][PATCH 2/5] cpan: survive the Makefile that MakeMaker rebuilds under us Markus Volk
                   ` (5 more replies)
  0 siblings, 6 replies; 14+ messages in thread
From: Markus Volk @ 2026-09-22  9:23 UTC (permalink / raw)
  To: openembedded-core

gnome-shell logs a libgcrypt warning on the first keyring prompt:

    Libgcrypt warning: missing initialization - please fix the application

gcr3 initialized libgcrypt from GcrSecretExchange's class_init; gcr 4
dropped that call, and _gcr_initialize_library() is only reached from
the certificate, parser and importer paths, never from the prompt path.
The guard in that function is inverted on top of it, so even when it is
called the first caller returns without initializing anything.

The secret exchange itself works either way, but libgcrypt then runs
without the egg secure memory allocators, which puts passwords into
ordinary swappable heap instead of locked pages.

AI-Generated: Uses Claude Code
Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
 ...e-libgcrypt-from-the-secret-exchange.patch | 81 +++++++++++++++++++
 meta/recipes-gnome/gcr/gcr_4.4.1.bb           |  1 +
 2 files changed, 82 insertions(+)
 create mode 100644 meta/recipes-gnome/gcr/gcr/0001-gcr-initialize-libgcrypt-from-the-secret-exchange.patch

diff --git a/meta/recipes-gnome/gcr/gcr/0001-gcr-initialize-libgcrypt-from-the-secret-exchange.patch b/meta/recipes-gnome/gcr/gcr/0001-gcr-initialize-libgcrypt-from-the-secret-exchange.patch
new file mode 100644
index 0000000000..3a55cf30aa
--- /dev/null
+++ b/meta/recipes-gnome/gcr/gcr/0001-gcr-initialize-libgcrypt-from-the-secret-exchange.patch
@@ -0,0 +1,81 @@
+From e8b729cc6ceddd22b5160f27396cf07cecd977ad Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Tue, 15 Sep 2026 18:24:45 +0200
+Subject: [PATCH] gcr: initialize libgcrypt from the secret exchange
+
+gnome-shell logs this on the first keyring prompt:
+
+    gnome-shell: Libgcrypt warning: missing initialization - please fix the application
+
+gcr3 initialized libgcrypt from the class_init of GcrSecretExchange
+(gcr/gcr-secret-exchange.c:847). That call is gone in gcr 4, leaving
+only _gcr_initialize_library(), which is reached from the certificate,
+parser and importer paths but never from the prompt path.
+
+On top of that the guard in _gcr_initialize_library() is inverted, in
+gcr3 as much as in gcr 4:
+
+    static gint gcr_initialize = 0;
+    if (g_atomic_int_add (&gcr_initialize, 1) == 0)
+            return;
+
+g_atomic_int_add() returns the value from before the addition, so the
+first call returns without ever reaching egg_libgcrypt_initialize() and
+only the second one initializes anything.
+
+This is not what breaks the keyring - the secret exchange was tested
+against both gcr3 and gcr 4 and transfers the secret correctly either
+way - but libgcrypt then runs without the egg secure memory allocators,
+so passwords end up in ordinary swappable heap instead of locked pages.
+
+Fix the guard and initialize from the secret exchange again.
+
+Upstream-Status: Pending
+
+AI-Generated: Uses Claude Code (Claude Opus 5)
+---
+ gcr/gcr-library.c         | 3 ++-
+ gcr/gcr-secret-exchange.c | 9 +++++++++
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/gcr/gcr-library.c b/gcr/gcr-library.c
+index 560772b..9d03f25 100644
+--- a/gcr/gcr-library.c
++++ b/gcr/gcr-library.c
+@@ -125,7 +125,8 @@ _gcr_initialize_library (void)
+ {
+ 	static gint gcr_initialize = 0;
+ 
+-	if (g_atomic_int_add (&gcr_initialize, 1) == 0)
++	/* Initialize on the first call, do nothing on every call after it */
++	if (g_atomic_int_add (&gcr_initialize, 1) != 0)
+ 		return;
+ 
+ #ifdef WITH_GCRYPT
+diff --git a/gcr/gcr-secret-exchange.c b/gcr/gcr-secret-exchange.c
+index 943b2af..3e5f889 100644
+--- a/gcr/gcr-secret-exchange.c
++++ b/gcr/gcr-secret-exchange.c
+@@ -21,6 +21,8 @@
+ 
+ #include "gcr-secret-exchange.h"
+ 
++#include "gcr-internal.h"
++
+ #include "egg/egg-crypto.h"
+ #include "egg/egg-dh.h"
+ #include "egg/egg-fips.h"
+@@ -817,6 +819,13 @@ gcr_secret_exchange_class_init (GcrSecretExchangeClass *klass)
+ 	klass->decrypt_transport_data = gcr_secret_exchange_default_decrypt_transport_data;
+ 	klass->encrypt_transport_data = gcr_secret_exchange_default_encrypt_transport_data;
+ 
++	/*
++	 * The exchange is the only part of the library that some callers ever
++	 * touch - gnome-shell through keyring.js for one - so initialize
++	 * libgcrypt here as well. gcr3 did this and gcr-4 dropped it.
++	 */
++	_gcr_initialize_library ();
++
+ 	/**
+ 	 * GcrSecretExchange:protocol:
+ 	 *
diff --git a/meta/recipes-gnome/gcr/gcr_4.4.1.bb b/meta/recipes-gnome/gcr/gcr_4.4.1.bb
index 93028d2497..aedbe60b69 100644
--- a/meta/recipes-gnome/gcr/gcr_4.4.1.bb
+++ b/meta/recipes-gnome/gcr/gcr_4.4.1.bb
@@ -17,6 +17,7 @@ inherit gnomebase gi-docgen vala gobject-introspection lib_package
 UPSTREAM_CHECK_REGEX = "gcr-(?P<pver>\d+\.\d+\.(?!9\d+)\d+(\.\d+)?)"
 
 SRC_URI[archive.sha256sum] = "c4442c15d4330f17a1f5194df08c576877af68412ab2521446a93bd5e24c931b"
+SRC_URI += "file://0001-gcr-initialize-libgcrypt-from-the-secret-exchange.patch"
 
 PACKAGECONFIG ??= "${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'vapi', '', d)}"
 PACKAGECONFIG[ssh_agent] = "-Dssh_agent=true,-Dssh_agent=false,libsecret"
-- 
2.55.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [oe-core][PATCH 2/5] cpan: survive the Makefile that MakeMaker rebuilds under us
  2026-09-22  9:23 [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange Markus Volk
@ 2026-09-22  9:23 ` Markus Volk
  2026-09-26 14:05   ` Paul Barker
  2026-09-22  9:23 ` [oe-core][PATCH 3/5] spdx_license: give UnknownId a name Markus Volk
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Markus Volk @ 2026-09-22  9:23 UTC (permalink / raw)
  To: openembedded-core

ExtUtils::MakeMaker makes the generated Makefile depend on Config.pm and
config.h from the perl it was configured against. do_prepare_recipe_sysroot
stages those files fresh on every run, so their mtime can end up newer than
a Makefile written by a do_configure that is still valid. make then
regenerates the Makefile, prints "Please rerun the make command" and exits
non-zero, which fails do_compile or do_install. Run make a second time in
that case, which is what MakeMaker asks for; a run that fails for any other
reason fails again. Also drop a stale Makefile before Makefile.PL runs, so
a configure in a used work directory does not start from old settings.

Reproduced with liburi-perl by touching Config.pm and config.h in the
recipe sysroot and forcing do_install: it failed before the change and
succeeds after it.

AI-Generated: Uses Claude Code (Claude Opus 5)
Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
 meta/classes-recipe/cpan.bbclass | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/meta/classes-recipe/cpan.bbclass b/meta/classes-recipe/cpan.bbclass
index dbf44da9d2..0f7384786f 100644
--- a/meta/classes-recipe/cpan.bbclass
+++ b/meta/classes-recipe/cpan.bbclass
@@ -23,6 +23,10 @@ export PERLHOSTLIB = "${STAGING_LIBDIR_NATIVE}/perl5/${@get_perl_version(d)}/"
 export PERLHOSTARCHLIB = "${STAGING_LIBDIR_NATIVE}/perl5/${@get_perl_version(d)}/${@get_perl_hostarch(d)}/"
 
 cpan_do_configure () {
+	# A Makefile left behind by an earlier configure run would be used with the
+	# settings it was generated with, so start from the Makefile.PL every time.
+	rm -f Makefile
+
 	yes '' | perl ${EXTRA_PERLFLAGS} Makefile.PL INSTALLDIRS=vendor NO_PERLLOCAL=1 NO_PACKLIST=1 PERL=$(which perl) ${EXTRA_CPANFLAGS}
 
 	# Makefile.PLs can exit with success without generating a
@@ -57,12 +61,17 @@ do_configure:append:class-nativesdk() {
            -e 's:LD_RUN_PATH ?= ?"?[^"]*"?::g'
 }
 
+# ExtUtils::MakeMaker regenerates the Makefile when the staged perl has become
+# newer than it, and then exits asking for make to be rerun. Do that instead of
+# failing the task; a run that fails for any other reason fails again.
 cpan_do_compile () {
-	oe_runmake PASTHRU_INC="${CFLAGS}" LD="${CCLD}"
+	oe_runmake_call PASTHRU_INC="${CFLAGS}" LD="${CCLD}" || \
+		oe_runmake PASTHRU_INC="${CFLAGS}" LD="${CCLD}"
 }
 
 cpan_do_install () {
-	oe_runmake DESTDIR="${D}" install_vendor
+	oe_runmake_call DESTDIR="${D}" install_vendor || \
+		oe_runmake DESTDIR="${D}" install_vendor
 	for PERLSCRIPT in `grep -rIEl '#! *${bindir}/perl-native.*/perl' ${D}`; do
 		sed -i -e 's|${bindir}/perl-native.*/perl|/usr/bin/env nativeperl|' $PERLSCRIPT
 	done
-- 
2.55.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [oe-core][PATCH 3/5] spdx_license: give UnknownId a name
  2026-09-22  9:23 [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange Markus Volk
  2026-09-22  9:23 ` [oe-core][PATCH 2/5] cpan: survive the Makefile that MakeMaker rebuilds under us Markus Volk
@ 2026-09-22  9:23 ` Markus Volk
  2026-09-22  9:23 ` [oe-core][PATCH 4/5] license_finder: normalise license texts before hashing Markus Volk
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 14+ messages in thread
From: Markus Volk @ 2026-09-22  9:23 UTC (permalink / raw)
  To: openembedded-core

A LICENSE that contains an unknown identifier, as go-mod-update-modules
writes it for modules whose license it could not classify, made
do_populate_lic fail with an AttributeError in get_license_path instead
of the license-exists QA error. Give UnknownId the same name property
as LicenseId and ExceptionId so the lookup can fail gracefully.

AI-Generated: Uses Claude Code (Claude Fable 5.1)
Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
 meta/lib/oe/spdx_license.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/meta/lib/oe/spdx_license.py b/meta/lib/oe/spdx_license.py
index 1e201f21d5..7369eca9ef 100644
--- a/meta/lib/oe/spdx_license.py
+++ b/meta/lib/oe/spdx_license.py
@@ -240,6 +240,10 @@ class Identifier(Node):
 
 
 class UnknownId(Identifier):
+    @property
+    def name(self):
+        return self.ident
+
     @classmethod
     def reduce(cls, stack, lookahead):
         if not check_stack_types(stack, [Token]):
-- 
2.55.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [oe-core][PATCH 4/5] license_finder: normalise license texts before hashing
  2026-09-22  9:23 [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange Markus Volk
  2026-09-22  9:23 ` [oe-core][PATCH 2/5] cpan: survive the Makefile that MakeMaker rebuilds under us Markus Volk
  2026-09-22  9:23 ` [oe-core][PATCH 3/5] spdx_license: give UnknownId a name Markus Volk
@ 2026-09-22  9:23 ` Markus Volk
  2026-09-22  9:23 ` [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class Markus Volk
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 14+ messages in thread
From: Markus Volk @ 2026-09-22  9:23 UTC (permalink / raw)
  To: openembedded-core

Matching by the md5 of a lightly crunched text missed most of the
common BSD, MIT, ISC, MPL-2.0 and Apache-2.0 copies in a Go module
tree: list markers, punctuation, case, the copyright holder's name in
the BSD advertising clause, the party in the ISC disclaimer and the
Apache-2.0 appendix all changed the hash. Compare the lower-cased word
stream instead, strip those variable parts, and only treat a line as a
license title at the top of the file. For rclone's 256 module license
files this brings the unrecognised ones down from 57 to 25, the rest
are dual-license files or texts with additions. The canonical licenses
are hashed in sorted order and the first name wins so that formatting
twins map to a stable name.

license-hashes.csv also holds hashes of texts crunched the old way, for
example the short Apache-2.0 boilerplate notice, so the old algorithm
stays as a third lookup step and none of the existing entries is lost.

AI-Generated: Uses Claude Code (Claude Fable 5.1)
Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
 meta/lib/oe/license_finder.py | 61 +++++++++++++++++++++++++++++------
 1 file changed, 51 insertions(+), 10 deletions(-)

diff --git a/meta/lib/oe/license_finder.py b/meta/lib/oe/license_finder.py
index 9c217cf891..b500f3a599 100644
--- a/meta/lib/oe/license_finder.py
+++ b/meta/lib/oe/license_finder.py
@@ -46,40 +46,52 @@ def _crunch_known_licenses(d):
 
     lic_dirs = [d.getVar('COMMON_LICENSE_DIR')] + (d.getVar('LICENSE_PATH') or "").split()
     for lic_dir in lic_dirs:
-        for fn in os.listdir(lic_dir):
+        for fn in sorted(os.listdir(lic_dir)):
             path = os.path.join(lic_dir, fn)
             if not os.path.isfile(path):
                 continue
             # Hash the exact contents
             md5value = bb.utils.md5_file(path)
-            md5sums[md5value] = fn
-            # Also hash a "crunched" version
+            md5sums.setdefault(md5value, fn)
+            # Also hash a "crunched" version. Some licenses only differ
+            # in formatting, the first name in sort order wins for those.
             md5value = _crunch_license(path)
-            md5sums[md5value] = fn
+            md5sums.setdefault(md5value, fn)
 
     return md5sums
 
 
-def _crunch_license(licfile):
+def _crunch_license(licfile, legacy=False):
     '''
     Remove non-material text from a license file and then calculate its
     md5sum. This works well for licenses that contain a copyright statement,
     but is also a useful way to handle people's insistence upon reformatting
     the license text slightly (with no material difference to the text of the
     license).
+
+    With legacy set, the text is crunched the way it was before the word
+    stream normalisation, which is what the hashes in license-hashes.csv
+    were made with.
     '''
 
     import oe.utils
 
     # Note: these are carefully constructed!
-    license_title_re = re.compile(r'^#*\(? *(This is )?([Tt]he )?.{0,15} ?[Ll]icen[sc]e( \(.{1,10}\))?\)?[:\.]? ?#*$')
+    if legacy:
+        license_title_re = re.compile(r'^#*\(? *(This is )?([Tt]he )?.{0,15} ?[Ll]icen[sc]e( \(.{1,10}\))?\)?[:\.]? ?#*$')
+    else:
+        license_title_re = re.compile(r'^#*\(? *(This is )?([Tt]he )?([A-Z0-9].{0,14})? ?[Ll]icen[sc]e( \(.{1,10}\))?\)?[:\.]? ?#*$')
     license_statement_re = re.compile(r'^((This (project|software)|.{1,10}) is( free software)? (released|licen[sc]ed)|(Released|Licen[cs]ed)) under the .{1,10} [Ll]icen[sc]e:?$')
     copyright_re = re.compile(r'^ *[#\*]* *(Modified work |MIT LICENSED )?Copyright ?(\([cC]\))? .*$')
     disclaimer_re = re.compile(r'^ *\*? ?All [Rr]ights [Rr]eserved\.$')
     email_re = re.compile(r'^.*<[\w\.-]*@[\w\.\-]*>$')
     header_re = re.compile(r'^(\/\**!?)? ?[\-=\*]* ?(\*\/)?$')
     tag_re = re.compile(r'^ *@?\(?([Ll]icense|MIT)\)?$')
-    url_re = re.compile(r'^ *[#\*]* *https?:\/\/[\w\.\/\-]+$')
+    if legacy:
+        url_re = re.compile(r'^ *[#\*]* *https?:\/\/[\w\.\/\-]+$')
+    else:
+        url_re = re.compile(r'^ *[#\*]* *https?:\/\/[\w\.\/\-]+\.?$')
+    list_marker_re = re.compile(r'^(\(?[0-9a-zA-Z]{1,2}[\.\)]|[\*\-•o]) +')
 
     lictext = []
     with open(licfile, 'r', errors='surrogateescape') as f:
@@ -97,9 +109,11 @@ def _crunch_license(licfile):
                 continue
             elif url_re.match(line):
                 continue
-            elif license_title_re.match(line):
+            # Titles and statements are only dropped at the top of the
+            # file, further down they are wrapped sentences of the text
+            elif (legacy or len(lictext) < 3) and license_title_re.match(line):
                 continue
-            elif license_statement_re.match(line):
+            elif (legacy or len(lictext) < 3) and license_statement_re.match(line):
                 continue
             # Strip comment symbols
             line = line.replace('*', '') \
@@ -108,6 +122,9 @@ def _crunch_license(licfile):
             line = line.replace('sub-license', 'sublicense')
             # Squash spaces
             line = oe.utils.squashspaces(line.strip())
+            # Drop list markers, "1." and "*" are used interchangeably
+            if not legacy:
+                line = list_marker_re.sub('', line)
             # Replace smart quotes, double quotes and backticks with single quotes
             line = line.replace(u"\u2018", "'").replace(u"\u2019", "'").replace(u"\u201c","'").replace(u"\u201d", "'").replace('"', '\'').replace('`', '\'')
             # Unify brackets
@@ -115,9 +132,30 @@ def _crunch_license(licfile):
             if line:
                 lictext.append(line)
 
+    text = ' '.join(lictext)
+    if legacy:
+        return hashlib.md5(text.encode('utf-8', errors='ignore')).hexdigest()
+
+    # Only the words matter, not case or punctuation
+    text = text.lower()
+    text = text.replace('and/or', 'and')
+    text = re.sub(r'https?://\S+', ' ', text)
+    text = re.sub(r'[^a-z0-9]+', ' ', text).strip()
+    # The Apache-2.0 appendix is instructions, not license terms, and
+    # the end marker is often left out
+    text = re.sub(r' appendix how to apply the apache license to your work.*? limitations under the license', '', text)
+    text = text.replace(' end of terms and conditions', '')
+    # Names of copyright holders in the BSD advertising clause and the
+    # ISC disclaimer, and the extra paragraph reference in X11-style MIT
+    text = re.sub(r'neither the name of .*? nor the names of', 'neither the name of nor the names of', text)
+    text = text.replace('copyright owner', 'copyright holder')
+    text = re.sub(r'\b(the authors?|isc|the copyright holders?) disclaims?\b', 'the author disclaims', text)
+    text = re.sub(r'shall (the authors?|isc|the copyright holders?) be liable', 'shall the author be liable', text)
+    text = text.replace('permission notice including the next paragraph shall', 'permission notice shall')
+
     m = hashlib.md5()
     try:
-        m.update(' '.join(lictext).encode('utf-8'))
+        m.update(text.encode('utf-8'))
         md5val = m.hexdigest()
     except UnicodeEncodeError:
         md5val = None
@@ -183,6 +221,9 @@ def match_licenses(licfiles, srctree, d, extra_hashes={}):
         if not license:
             crunched_md5 = _crunch_license(resolved_licfile)
             license = md5sums.get(crunched_md5, None)
+        if not license:
+            crunched_md5 = _crunch_license(resolved_licfile, legacy=True)
+            license = md5sums.get(crunched_md5, None)
             if not license:
                 rel_fn = os.path.relpath(licfile, srctree + "/..")
                 license = oe.spdx_license.UnknownId("Unknown")
-- 
2.55.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class
  2026-09-22  9:23 [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange Markus Volk
                   ` (2 preceding siblings ...)
  2026-09-22  9:23 ` [oe-core][PATCH 4/5] license_finder: normalise license texts before hashing Markus Volk
@ 2026-09-22  9:23 ` Markus Volk
  2026-09-22 14:14   ` Antonin Godard
  2026-09-25 11:18   ` Ross Burton
  2026-09-22  9:33 ` Patchtest results for [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange patchtest
  2026-09-26 13:53 ` Paul Barker
  5 siblings, 2 replies; 14+ messages in thread
From: Markus Volk @ 2026-09-22  9:23 UTC (permalink / raw)
  To: openembedded-core

A new recipe could not be parsed before its first update_modules run
because it had to require the two generated files itself. Include them
from the class instead, relative to the recipe, so a missing file is
tolerated until the task has written it.

AI-Generated: Uses Claude Code (Claude Fable 5.1)
Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
 meta/classes-recipe/go-mod-update-modules.bbclass | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/meta/classes-recipe/go-mod-update-modules.bbclass b/meta/classes-recipe/go-mod-update-modules.bbclass
index 3a0f0a3377..bae9e47c0d 100644
--- a/meta/classes-recipe/go-mod-update-modules.bbclass
+++ b/meta/classes-recipe/go-mod-update-modules.bbclass
@@ -10,7 +10,12 @@ do_update_modules[network] = "1"
 # -licenses.inc will append LICENSE and LIC_FILES_CHKSUM with the found licenses
 # in the modules.
 #
-# These files are machine-generated and should not be modified.
+# These files are machine-generated and should not be modified. They are
+# included here so that a new recipe parses before they have been generated
+# by the first run of the update-modules task.
+
+include ${FILE_DIRNAME}/${BPN}-licenses.inc
+include ${FILE_DIRNAME}/${BPN}-go-mods.inc
 
 python do_update_modules() {
     import subprocess, tempfile, json, re, urllib.parse
-- 
2.55.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Patchtest results for [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange
  2026-09-22  9:23 [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange Markus Volk
                   ` (3 preceding siblings ...)
  2026-09-22  9:23 ` [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class Markus Volk
@ 2026-09-22  9:33 ` patchtest
  2026-09-26 13:53 ` Paul Barker
  5 siblings, 0 replies; 14+ messages in thread
From: patchtest @ 2026-09-22  9:33 UTC (permalink / raw)
  To: Markus Volk; +Cc: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 3072 bytes --]

Thank you for your submission. Patchtest identified one
or more issues with the patch. Please see the log below for
more information:

---
Testing patch /home/patchtest/share/mboxes/1-5-gcr-initialize-libgcrypt-from-the-secret-exchange.patch

FAIL: test Signed-off-by presence: A patch file has been added without a Signed-off-by tag: '0001-gcr-initialize-libgcrypt-from-the-secret-exchange.patch' (test_patch.TestPatch.test_signed_off_by_presence)

PASS: pretest src uri left files (test_metadata.TestMetadata.pretest_src_uri_left_files)
PASS: test CVE check ignore (test_metadata.TestMetadata.test_cve_check_ignore)
PASS: test CVE tag format (test_patch.TestPatch.test_cve_tag_format)
PASS: test Signed-off-by presence (test_mbox.TestMbox.test_signed_off_by_presence)
PASS: test Upstream-Status presence (test_patch.TestPatch.test_upstream_status_presence_format)
PASS: test auh changelog truncation notice (test_mbox.TestMbox.test_auh_changelog_truncation_notice)
PASS: test author valid (test_mbox.TestMbox.test_author_valid)
PASS: test commit message presence (test_mbox.TestMbox.test_commit_message_presence)
PASS: test commit message user tags (test_mbox.TestMbox.test_commit_message_user_tags)
PASS: test lic files chksum modified not mentioned (test_metadata.TestMetadata.test_lic_files_chksum_modified_not_mentioned)
PASS: test max line length (test_metadata.TestMetadata.test_max_line_length)
PASS: test mbox format (test_mbox.TestMbox.test_mbox_format)
PASS: test non-AUH upgrade (test_mbox.TestMbox.test_non_auh_upgrade)
PASS: test shortlog format (test_mbox.TestMbox.test_shortlog_format)
PASS: test shortlog length (test_mbox.TestMbox.test_shortlog_length)
PASS: test src uri left files (test_metadata.TestMetadata.test_src_uri_left_files)
PASS: test target mailing list (test_mbox.TestMbox.test_target_mailing_list)

SKIP: pretest pylint: No python related patches, skipping test (test_python_pylint.PyLint.pretest_pylint)
SKIP: test bugzilla entry format: No bug ID found (test_mbox.TestMbox.test_bugzilla_entry_format)
SKIP: test lic files chksum presence: No added recipes, skipping test (test_metadata.TestMetadata.test_lic_files_chksum_presence)
SKIP: test license presence: No added recipes, skipping test (test_metadata.TestMetadata.test_license_presence)
SKIP: test pylint: No python related patches, skipping test (test_python_pylint.PyLint.test_pylint)
SKIP: test series merge on head: Merge test is disabled for now (test_mbox.TestMbox.test_series_merge_on_head)
SKIP: test summary presence: No added recipes, skipping test (test_metadata.TestMetadata.test_summary_presence)

---

Please address the issues identified and
submit a new revision of the patch, or alternatively, reply to this
email with an explanation of why the patch should be accepted. If you
believe these results are due to an error in patchtest, please submit a
bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest' category
under 'Yocto Project Subprojects'). For more information on specific
failures, see: https://wiki.yoctoproject.org/wiki/Patchtest. Thank
you!

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class
  2026-09-22  9:23 ` [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class Markus Volk
@ 2026-09-22 14:14   ` Antonin Godard
  2026-09-23 17:23     ` mrksvolk
  2026-09-23 18:03     ` Khem Raj
  2026-09-25 11:18   ` Ross Burton
  1 sibling, 2 replies; 14+ messages in thread
From: Antonin Godard @ 2026-09-22 14:14 UTC (permalink / raw)
  To: f_l_k, openembedded-core

Hi,

On Tue Sep 22, 2026 at 11:23 AM CEST, Markus Volk via lists.openembedded.org wrote:
> A new recipe could not be parsed before its first update_modules run
> because it had to require the two generated files itself. Include them
> from the class instead, relative to the recipe, so a missing file is
> tolerated until the task has written it.

This has the following side-effect for recipes already including the file(s):

stdio: WARNING: /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb: Duplicate inclusion for /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale-go-mods.inc in /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb
stdio: WARNING: /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb: Duplicate inclusion for /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale-licenses.inc in /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb
stdio: WARNING: /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/simpleiot_0.18.5.bb: Duplicate inclusion for /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/simpleiot-go-mods.inc in /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/simpleiot_0.18.5.bb
stdio: WARNING: /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2025.05.28.bb: Duplicate inclusion for /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible-go-mods.inc in /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2025.05.28.bb
stdio: WARNING: /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2025.05.28.bb: Duplicate inclusion for /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible-licenses.inc in /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2025.05.28.bb

https://autobuilder.yoctoproject.org/valkyrie/#/builders/89/builds/4515

If this is merged we'll need to adjust these recipes. Also if this is merged
please send an update to
https://git.yoctoproject.org/yocto-docs/tree/documentation/migration-guides/migration-6.1.rst
on the documentation mailing list to let people know why this is happening in
their build.

Thanks,
Antonin


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class
  2026-09-22 14:14   ` Antonin Godard
@ 2026-09-23 17:23     ` mrksvolk
  2026-09-23 18:03     ` Khem Raj
  1 sibling, 0 replies; 14+ messages in thread
From: mrksvolk @ 2026-09-23 17:23 UTC (permalink / raw)
  To: antonin.godard; +Cc: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 3222 bytes --]

Sure. Just tell me, if and when you want the patch.

On Tue, Sep 22 2026 at 16:14:03 +02:00:00, Antonin Godard via 
lists.openembedded.org 
<antonin.godard=bootlin.com@lists.openembedded.org> wrote:
> Hi,
> 
> On Tue Sep 22, 2026 at 11:23 AM CEST, Markus Volk via 
> lists.openembedded.org wrote:
>>  A new recipe could not be parsed before its first update_modules run
>>  because it had to require the two generated files itself. Include 
>> them
>>  from the class instead, relative to the recipe, so a missing file is
>>  tolerated until the task has written it.
> 
> This has the following side-effect for recipes already including the 
> file(s):
> 
> stdio: WARNING: 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb: 
> Duplicate inclusion for 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale-go-mods.inc 
> in 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb
> stdio: WARNING: 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb: 
> Duplicate inclusion for 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale-licenses.inc 
> in 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb
> stdio: WARNING: 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/simpleiot_0.18.5.bb: 
> Duplicate inclusion for 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/simpleiot-go-mods.inc 
> in 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/simpleiot_0.18.5.bb
> stdio: WARNING: 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2025.05.28.bb: 
> Duplicate inclusion for 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible-go-mods.inc 
> in 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2025.05.28.bb
> stdio: WARNING: 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2025.05.28.bb: 
> Duplicate inclusion for 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible-licenses.inc 
> in 
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2025.05.28.bb
> 
> <https://autobuilder.yoctoproject.org/valkyrie/#/builders/89/builds/4515>
> 
> If this is merged we'll need to adjust these recipes. Also if this is 
> merged
> please send an update to
> <https://git.yoctoproject.org/yocto-docs/tree/documentation/migration-guides/migration-6.1.rst>
> on the documentation mailing list to let people know why this is 
> happening in
> their build.
> 
> Thanks,
> Antonin
> 
> 
> 


[-- Attachment #2: Type: text/html, Size: 3548 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class
  2026-09-22 14:14   ` Antonin Godard
  2026-09-23 17:23     ` mrksvolk
@ 2026-09-23 18:03     ` Khem Raj
  1 sibling, 0 replies; 14+ messages in thread
From: Khem Raj @ 2026-09-23 18:03 UTC (permalink / raw)
  To: antonin.godard; +Cc: f_l_k, openembedded-core

[-- Attachment #1: Type: text/plain, Size: 4004 bytes --]

also in meta-openembedded

meta-networking/recipes-connectivity/tailscale/tailscale_1.102.3.bb
meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
meta-oe/recipes-extended/simpleiot/simpleiot_0.18.5.bb
meta-oe/recipes-support/crucible/crucible_2025.05.28.bb
meta-oe/recipes-support/rclone/rclone_1.75.1.bb
meta-oe/recipes-test/syzkaller/syzkaller_git.bb

On Tue, Sep 22, 2026 at 7:14 AM Antonin Godard via lists.openembedded.org
<antonin.godard=bootlin.com@lists.openembedded.org> wrote:

> Hi,
>
> On Tue Sep 22, 2026 at 11:23 AM CEST, Markus Volk via
> lists.openembedded.org wrote:
> > A new recipe could not be parsed before its first update_modules run
> > because it had to require the two generated files itself. Include them
> > from the class instead, relative to the recipe, so a missing file is
> > tolerated until the task has written it.
>
> This has the following side-effect for recipes already including the
> file(s):
>
> stdio: WARNING:
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/
> tailscale_1.102.3.bb: Duplicate inclusion for
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale-go-mods.inc
> in
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/
> tailscale_1.102.3.bb
> stdio: WARNING:
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/
> tailscale_1.102.3.bb: Duplicate inclusion for
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/tailscale-licenses.inc
> in
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-networking/recipes-connectivity/tailscale/
> tailscale_1.102.3.bb
> stdio: WARNING:
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/
> simpleiot_0.18.5.bb: Duplicate inclusion for
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/simpleiot-go-mods.inc
> in
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-extended/simpleiot/
> simpleiot_0.18.5.bb
> stdio: WARNING:
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/
> crucible_2025.05.28.bb: Duplicate inclusion for
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible-go-mods.inc
> in
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/
> crucible_2025.05.28.bb
> stdio: WARNING:
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/
> crucible_2025.05.28.bb: Duplicate inclusion for
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/crucible-licenses.inc
> in
> /srv/pokybuild/yocto-worker/meta-virt/build/meta-openembedded/meta-oe/recipes-support/crucible/
> crucible_2025.05.28.bb
>
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/89/builds/4515
>
> If this is merged we'll need to adjust these recipes. Also if this is
> merged
> please send an update to
>
> https://git.yoctoproject.org/yocto-docs/tree/documentation/migration-guides/migration-6.1.rst
> on the documentation mailing list to let people know why this is happening
> in
> their build.
>
> Thanks,
> Antonin
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#246416):
> https://lists.openembedded.org/g/openembedded-core/message/246416
> Mute This Topic: https://lists.openembedded.org/mt/121371714/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>

[-- Attachment #2: Type: text/html, Size: 6154 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class
  2026-09-22  9:23 ` [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class Markus Volk
  2026-09-22 14:14   ` Antonin Godard
@ 2026-09-25 11:18   ` Ross Burton
  2026-09-25 16:27     ` Markus Volk
  1 sibling, 1 reply; 14+ messages in thread
From: Ross Burton @ 2026-09-25 11:18 UTC (permalink / raw)
  To: f_l_k@t-online.de; +Cc: openembedded-core@lists.openembedded.org

On 22 Sep 2026, at 10:23, Markus Volk via lists.openembedded.org <f_l_k=t-online.de@lists.openembedded.org> wrote:
> A new recipe could not be parsed before its first update_modules run
> because it had to require the two generated files itself. Include them
> from the class instead, relative to the recipe, so a missing file is
> tolerated until the task has written it.

Where is this new recipe coming from?  recipetool should be creating the files when it writes the recipe file so it can’t be there.  If you’re hand-coding the recipe then you can touch the files when you write require, or just include in the recipe.

Ross

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class
  2026-09-25 11:18   ` Ross Burton
@ 2026-09-25 16:27     ` Markus Volk
  0 siblings, 0 replies; 14+ messages in thread
From: Markus Volk @ 2026-09-25 16:27 UTC (permalink / raw)
  To: Ross Burton; +Cc: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 475 bytes --]

On Fri, Sep 25 2026 at 11:18:39 +00:00:00, Ross Burton 
<Ross.Burton@arm.com> wrote:
> Where is this new recipe coming from?  recipetool should be creating 
> the files when it writes the recipe file so it can’t be there.  If 
> you’re hand-coding the recipe then you can touch the files when you 
> write require, or just include in the recipe.

Hi Ross,

the recipe was hand-coded and I wasn't aware that recipetool creates 
the files. You definitely got a point here


[-- Attachment #2: Type: text/html, Size: 658 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange
  2026-09-22  9:23 [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange Markus Volk
                   ` (4 preceding siblings ...)
  2026-09-22  9:33 ` Patchtest results for [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange patchtest
@ 2026-09-26 13:53 ` Paul Barker
  5 siblings, 0 replies; 14+ messages in thread
From: Paul Barker @ 2026-09-26 13:53 UTC (permalink / raw)
  To: Markus Volk, openembedded-core

On Tue, 2026-09-22 at 11:23 +0200, Markus Volk wrote:
> gnome-shell logs a libgcrypt warning on the first keyring prompt:
> 
>     Libgcrypt warning: missing initialization - please fix the application
> 
> gcr3 initialized libgcrypt from GcrSecretExchange's class_init; gcr 4
> dropped that call, and _gcr_initialize_library() is only reached from
> the certificate, parser and importer paths, never from the prompt path.
> The guard in that function is inverted on top of it, so even when it is
> called the first caller returns without initializing anything.
> 
> The secret exchange itself works either way, but libgcrypt then runs
> without the egg secure memory allocators, which puts passwords into
> ordinary swappable heap instead of locked pages.
> 
> AI-Generated: Uses Claude Code
> Signed-off-by: Markus Volk <f_l_k@t-online.de>

Hi Marcus,

Has this issue been reported upstream? I see that the patch is
'Pending', which isn't ideal. Given that this affects security we really
should get input from upstream.

Best regards,

-- 
Paul Barker



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [oe-core][PATCH 2/5] cpan: survive the Makefile that MakeMaker rebuilds under us
  2026-09-22  9:23 ` [oe-core][PATCH 2/5] cpan: survive the Makefile that MakeMaker rebuilds under us Markus Volk
@ 2026-09-26 14:05   ` Paul Barker
  2026-09-26 19:03     ` Markus Volk
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Barker @ 2026-09-26 14:05 UTC (permalink / raw)
  To: Markus Volk, openembedded-core

On Tue, 2026-09-22 at 11:23 +0200, Markus Volk wrote:
> ExtUtils::MakeMaker makes the generated Makefile depend on Config.pm and
> config.h from the perl it was configured against. do_prepare_recipe_sysroot
> stages those files fresh on every run, so their mtime can end up newer than
> a Makefile written by a do_configure that is still valid. make then
> regenerates the Makefile, prints "Please rerun the make command" and exits
> non-zero, which fails do_compile or do_install. Run make a second time in
> that case, which is what MakeMaker asks for; a run that fails for any other
> reason fails again. Also drop a stale Makefile before Makefile.PL runs, so
> a configure in a used work directory does not start from old settings.
> 
> Reproduced with liburi-perl by touching Config.pm and config.h in the
> recipe sysroot and forcing do_install: it failed before the change and
> succeeds after it.
> 
> AI-Generated: Uses Claude Code (Claude Opus 5)
> Signed-off-by: Markus Volk <f_l_k@t-online.de>

Hi Markus,

The commit summary here is an excellent example of Claudish. I'm not
really sure what it means... It could do with re-writing.

> ---
>  meta/classes-recipe/cpan.bbclass | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/meta/classes-recipe/cpan.bbclass b/meta/classes-recipe/cpan.bbclass
> index dbf44da9d2..0f7384786f 100644
> --- a/meta/classes-recipe/cpan.bbclass
> +++ b/meta/classes-recipe/cpan.bbclass
> @@ -23,6 +23,10 @@ export PERLHOSTLIB = "${STAGING_LIBDIR_NATIVE}/perl5/${@get_perl_version(d)}/"
>  export PERLHOSTARCHLIB = "${STAGING_LIBDIR_NATIVE}/perl5/${@get_perl_version(d)}/${@get_perl_hostarch(d)}/"
>  
>  cpan_do_configure () {
> +	# A Makefile left behind by an earlier configure run would be used with the
> +	# settings it was generated with, so start from the Makefile.PL every time.
> +	rm -f Makefile

I'm not really familiar with cpan packages - are we sure that none
include a Makefile?

> +
>  	yes '' | perl ${EXTRA_PERLFLAGS} Makefile.PL INSTALLDIRS=vendor NO_PERLLOCAL=1 NO_PACKLIST=1 PERL=$(which perl) ${EXTRA_CPANFLAGS}
>  
>  	# Makefile.PLs can exit with success without generating a
> @@ -57,12 +61,17 @@ do_configure:append:class-nativesdk() {
>             -e 's:LD_RUN_PATH ?= ?"?[^"]*"?::g'
>  }
>  
> +# ExtUtils::MakeMaker regenerates the Makefile when the staged perl has become
> +# newer than it, and then exits asking for make to be rerun. Do that instead of
> +# failing the task; a run that fails for any other reason fails again.
>  cpan_do_compile () {
> -	oe_runmake PASTHRU_INC="${CFLAGS}" LD="${CCLD}"
> +	oe_runmake_call PASTHRU_INC="${CFLAGS}" LD="${CCLD}" || \
> +		oe_runmake PASTHRU_INC="${CFLAGS}" LD="${CCLD}"

Are we sure this won't mask other issues? The staged perl becoming newer
than the generated Makefile should be a rare occurance, perhaps we can
check for that before calling make and handle it explicitly?

>  }
>  
>  cpan_do_install () {
> -	oe_runmake DESTDIR="${D}" install_vendor
> +	oe_runmake_call DESTDIR="${D}" install_vendor || \
> +		oe_runmake DESTDIR="${D}" install_vendor

We don't want surprise rebuilds during do_install.

>  	for PERLSCRIPT in `grep -rIEl '#! *${bindir}/perl-native.*/perl' ${D}`; do
>  		sed -i -e 's|${bindir}/perl-native.*/perl|/usr/bin/env nativeperl|' $PERLSCRIPT
>  	done

Best regards,

-- 
Paul Barker



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [oe-core][PATCH 2/5] cpan: survive the Makefile that MakeMaker rebuilds under us
  2026-09-26 14:05   ` Paul Barker
@ 2026-09-26 19:03     ` Markus Volk
  0 siblings, 0 replies; 14+ messages in thread
From: Markus Volk @ 2026-09-26 19:03 UTC (permalink / raw)
  To: Paul Barker; +Cc: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 5124 bytes --]

Hi Paul,


> 
> The commit summary here is an excellent example of Claudish. I'm not
> really sure what it means... It could do with re-writing.

Thats true. I think I only could follow it because I knew which real 
issue this fixes for me.
The problem is, that I'm following more or less regulary the current 
master branch of
oe-core and whenever there have been changes to perl the following 
build breaks a few
perl recipes. that then required a '-c cleansstate' to become buildable 
again.

> I'm not really familiar with cpan packages - are we sure that none
> include a Makefile?

I wasn't sure about this either, but since ā€œdo_configureā€ generates 
a new Makefile, I left it in. However,
that isn't necessary to fix the actual problem.

> 
> We don't want surprise rebuilds during do_install.

I'll send a v2 that just ignores the different timestamp

On Sat, Sep 26 2026 at 15:05:24 +01:00:00, Paul Barker 
<paul@pbarker.dev> wrote:
> On Tue, 2026-09-22 at 11:23 +0200, Markus Volk wrote:
>>  ExtUtils::MakeMaker makes the generated Makefile depend on 
>> Config.pm and
>>  config.h from the perl it was configured against. 
>> do_prepare_recipe_sysroot
>>  stages those files fresh on every run, so their mtime can end up 
>> newer than
>>  a Makefile written by a do_configure that is still valid. make then
>>  regenerates the Makefile, prints "Please rerun the make command" 
>> and exits
>>  non-zero, which fails do_compile or do_install. Run make a second 
>> time in
>>  that case, which is what MakeMaker asks for; a run that fails for 
>> any other
>>  reason fails again. Also drop a stale Makefile before Makefile.PL 
>> runs, so
>>  a configure in a used work directory does not start from old 
>> settings.
>> 
>>  Reproduced with liburi-perl by touching Config.pm and config.h in 
>> the
>>  recipe sysroot and forcing do_install: it failed before the change 
>> and
>>  succeeds after it.
>> 
>>  AI-Generated: Uses Claude Code (Claude Opus 5)
>>  Signed-off-by: Markus Volk <f_l_k@t-online.de 
>> <mailto:f_l_k@t-online.de>>
> 
> Hi Markus,
> 
> The commit summary here is an excellent example of Claudish. I'm not
> really sure what it means... It could do with re-writing.
> 
>>  ---
>>   meta/classes-recipe/cpan.bbclass | 13 +++++++++++--
>>   1 file changed, 11 insertions(+), 2 deletions(-)
>> 
>>  diff --git a/meta/classes-recipe/cpan.bbclass 
>> b/meta/classes-recipe/cpan.bbclass
>>  index dbf44da9d2..0f7384786f 100644
>>  --- a/meta/classes-recipe/cpan.bbclass
>>  +++ b/meta/classes-recipe/cpan.bbclass
>>  @@ -23,6 +23,10 @@ export PERLHOSTLIB = 
>> "${STAGING_LIBDIR_NATIVE}/perl5/${@get_perl_version(d)}/"
>>   export PERLHOSTARCHLIB = 
>> "${STAGING_LIBDIR_NATIVE}/perl5/${@get_perl_version(d)}/${@get_perl_hostarch(d)}/"
>> 
>>   cpan_do_configure () {
>>  +	# A Makefile left behind by an earlier configure run would be 
>> used with the
>>  +	# settings it was generated with, so start from the Makefile.PL 
>> every time.
>>  +	rm -f Makefile
> 
> I'm not really familiar with cpan packages - are we sure that none
> include a Makefile?
> 
>>  +
>>   	yes '' | perl ${EXTRA_PERLFLAGS} Makefile.PL INSTALLDIRS=vendor 
>> NO_PERLLOCAL=1 NO_PACKLIST=1 PERL=$(which perl) ${EXTRA_CPANFLAGS}
>> 
>>   	# Makefile.PLs can exit with success without generating a
>>  @@ -57,12 +61,17 @@ do_configure:append:class-nativesdk() {
>>              -e 's:LD_RUN_PATH ?= ?"?[^"]*"?::g'
>>   }
>> 
>>  +# ExtUtils::MakeMaker regenerates the Makefile when the staged 
>> perl has become
>>  +# newer than it, and then exits asking for make to be rerun. Do 
>> that instead of
>>  +# failing the task; a run that fails for any other reason fails 
>> again.
>>   cpan_do_compile () {
>>  -	oe_runmake PASTHRU_INC="${CFLAGS}" LD="${CCLD}"
>>  +	oe_runmake_call PASTHRU_INC="${CFLAGS}" LD="${CCLD}" || \
>>  +		oe_runmake PASTHRU_INC="${CFLAGS}" LD="${CCLD}"
> 
> Are we sure this won't mask other issues? The staged perl becoming 
> newer
> than the generated Makefile should be a rare occurance, perhaps we can
> check for that before calling make and handle it explicitly?
> 
>>   }
>> 
>>   cpan_do_install () {
>>  -	oe_runmake DESTDIR="${D}" install_vendor
>>  +	oe_runmake_call DESTDIR="${D}" install_vendor || \
>>  +		oe_runmake DESTDIR="${D}" install_vendor
> 
> We don't want surprise rebuilds during do_install.
> 
>>   	for PERLSCRIPT in `grep -rIEl '#! *${bindir}/perl-native.*/perl' 
>> ${D}`; do
>>   		sed -i -e 's|${bindir}/perl-native.*/perl|/usr/bin/env 
>> nativeperl|' $PERLSCRIPT
>>   	done
> 
> Best regards,
> 
> --
> Paul Barker
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#246637): 
> <https://lists.openembedded.org/g/openembedded-core/message/246637>
> Mute This Topic: <https://lists.openembedded.org/mt/121371712/3618223>
> Group Owner: openembedded-core+owner@lists.openembedded.org 
> <mailto:openembedded-core+owner@lists.openembedded.org>
> Unsubscribe: 
> <https://lists.openembedded.org/g/openembedded-core/unsub> 
> [f_l_k@t-online.de <mailto:f_l_k@t-online.de>]
> -=-=-=-=-=-=-=-=-=-=-=-
> 


[-- Attachment #2: Type: text/html, Size: 6552 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2026-09-26 19:03 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-22  9:23 [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange Markus Volk
2026-09-22  9:23 ` [oe-core][PATCH 2/5] cpan: survive the Makefile that MakeMaker rebuilds under us Markus Volk
2026-09-26 14:05   ` Paul Barker
2026-09-26 19:03     ` Markus Volk
2026-09-22  9:23 ` [oe-core][PATCH 3/5] spdx_license: give UnknownId a name Markus Volk
2026-09-22  9:23 ` [oe-core][PATCH 4/5] license_finder: normalise license texts before hashing Markus Volk
2026-09-22  9:23 ` [oe-core][PATCH 5/5] go-mod-update-modules: include the generated files from the class Markus Volk
2026-09-22 14:14   ` Antonin Godard
2026-09-23 17:23     ` mrksvolk
2026-09-23 18:03     ` Khem Raj
2026-09-25 11:18   ` Ross Burton
2026-09-25 16:27     ` Markus Volk
2026-09-22  9:33 ` Patchtest results for [oe-core][PATCH 1/5] gcr: initialize libgcrypt from the secret exchange patchtest
2026-09-26 13:53 ` Paul Barker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.