Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Herve Codina <herve.codina@bootlin.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v2 08/18] package/pkg-generic.mk: move python fixup to generic package infrastructure
Date: Fri, 9 Jul 2021 08:48:20 +0200	[thread overview]
Message-ID: <20210709084820.37830e5f@bootlin.com> (raw)
In-Reply-To: <20210708202623.GC410642@scaer>

On Thu, 8 Jul 2021 22:26:23 +0200
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> Herv?, All,
> 
> On 2021-07-08 17:38 +0200, Herve Codina spake thusly:
> > On Wed, 7 Jul 2021 22:12:57 +0200
> > "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:  
> [--SNIP--]
> > > Note: optimisation: we should be able to use a single find call to do
> > > both, though:
> > > 
> > >     $(foreach dir, $(wildcard $(HOST_DIR)/lib/python* $(STAGING_DIR)/usr/lib/python*), \
> > >         $(Q)find $(dir) \( -name "_sysconfigdata*.pyc" -delete \) \
> > >             -o \( -name "_sysconfigdata*.py" -print0 \) \
> > >         |xargs -0 --no-run-if-empty \
> > >             $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'
> > >     )  
> [--SNIP--]
> > I tried this kind of things and I ran into trouble with $(wildcard ...)
> > Indeed, $(wildcard ...) does not see my directories.
> > A simple 'ls $(HOST_DIR)/lib/python*' just before $(foreach dir, $(wildcard ...), ...)
> > lists the directory.
[...]
> It is not caching. The issue is when variables (or calls to functions)
> are evaluated.
> 
> In makefile, the evaluation is done for a full recipe at once, not for
> each line to be executed.
> 
> HOOKS, pre or post, are part of the same recipe and the corresponding
> CMDS, so all three (pre hooks, cmds, and post hooks) are evaluated at
> the same time, even before any single line of the recipe if executed.
> 
> So given this trivial Makefile:
> 
>     $ cat Makefile
>     all:
>         @touch toto
>         @echo '"toto is $(wildcard toto)"'
> 
>     $ make
>     "toto is "
>     $ make
>     "toto is toto"
> 

Thanks for this explanation.

> So, in the end, with all these back-n-forth, and combining all the
> explanations, we sould be able to complete the macro with:
> 
>     # Can't use $(foreach d, $(HOST_DIR)/lib/python* $(STAGING_DIR)/usr/lib/python*, ...)
>     # because those directories may be created in the same recipe this
>     # macro wil be expanded in.
>     # Additionally, either or both may be missing, which would make find
>     # whine and fail.
>     # So we just use HOST_DIR as a starting point, and filter on the two
>     # directories of interest.
>     define FIXUP_PYTHON_SYSCONFIGDATA
>         $(Q)find $(HOST_DIR) \
>             \( -path '$(HOST_DIR)/lib/python*' -o -path '$(STAGING_DIR)/usr/lib/python*' \) \
>             \(    \( -name "_sysconfigdata*.pyc" -delete \) \
>                -o \( -name "_sysconfigdata*.py" -print0 \) \) \
>         |xargs -0 --no-run-if-empty \
>             $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'
>     endef
> 
> And then, in inner-genenric-package:
> 
>     $(2)_POST_PREPARE_HOOKS += FIXUP_PYTHON_SYSCONFIGDATA
> 
> And then the commit log will need to have all the details why we use
> this trick, and probably also a small comment above the macro defintion,
> to explain it too.
> 
> Not that STAGING_DIR is not a starting point for find, because it is
> below HOST_DIR, so we will eventually search STAGING_DIR.

Right, I will try this one.

> 
> Oh, and a final note: the existing hook is already sliently broken!
> Indeed, if either $(HOST_DIR)/lib/python* $(STAGING_DIR)/usr/lib/python*
> is mising, find whines and fails. However, the breakage is ignored,
> because find is on the left-hand side of a pipe, so its exit status is
> ignored.
> 
> But of course, this is no longer the case with the new find that was
> added by the previous commit, which really is the commit that introduces
> the issues of find failing when a directory was missing, not this commit
> specifically. I suppose you did not notice, because the prvious commit
> was not tested on its own (and I can understand that, for I do that very
> often too). But now autobuilders have caught it (and user have started
> to notice too)...

You right, I tested my first version of the patch (with the pipe) and missed
the issue introduced by removing the pipe in v2.
Indeed, I tested the whole series not each patches.

-- 
Herv? Codina, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

  reply	other threads:[~2021-07-09  6:48 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-06 14:24 [Buildroot] [PATCH v2 00/18] Overwritten file detection and fixes, one more step to TLP build Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 01/18] package/e2fsprogs: fix fsck overwrite in HOST_DIR Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 02/18] package/pkg-generic.mk: Remove Info documents dir entry Herve Codina
2021-07-06 19:25   ` Yann E. MORIN
2021-07-06 14:24 ` [Buildroot] [PATCH v2 03/18] package/pkg-generic.mk: perform .la files fixup in per-package HOST_DIR Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 04/18] package/pkg-generic: add post-prepare hooks Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 05/18] package/apr-util: use post-prepare hook Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 06/18] package/apache: move APACHE_FIXUP_APR_LIBTOOL to " Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 07/18] package/pkg-python: remove _sysconfigdata*.pyc files when _sysconfigdata*.py are changed Herve Codina
2021-07-06 19:29   ` Yann E. MORIN
2021-07-06 14:24 ` [Buildroot] [PATCH v2 08/18] package/pkg-generic.mk: move python fixup to generic package infrastructure Herve Codina
2021-07-06 19:50   ` Yann E. MORIN
2021-07-06 21:22     ` Yann E. MORIN
2021-07-07 11:48     ` Herve Codina
2021-07-07 12:21       ` Arnout Vandecappelle
2021-07-07 12:49         ` Herve Codina
2021-07-07 14:28           ` Arnout Vandecappelle
2021-07-07 20:12           ` Yann E. MORIN
2021-07-08 15:38             ` Herve Codina
2021-07-08 20:26               ` Yann E. MORIN
2021-07-09  6:48                 ` Herve Codina [this message]
2021-07-06 14:24 ` [Buildroot] [PATCH v2 09/18] package/owfs: remove Python sysconfigdata fixup Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 10/18] package/pkg-generic.mk: detect files overwritten in TARGET_DIR and HOST_DIR Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 11/18] package/pkg-generic.mk: generate final rsync exclude file list Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 12/18] Makefile: rsync global {TARGET, HOST}_DIR using exclusion " Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 13/18] Makefile: breaks hardlinks in global {TARGET, HOST}_DIR on per-package build Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 14/18] package/pkg-generic.mk: fix per-package <pkg>-{reconfigure, rebuild, reinstall} Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 15/18] package/pkg-generic.mk: remove .files-final-rsync.before temporary file Herve Codina
2021-07-06 14:24 ` [Buildroot] [PATCH v2 16/18] support/testing/infra: add log_file_path() function Herve Codina
2021-07-06 14:25 ` [Buildroot] [PATCH v2 17/18] support/testing/tests: add test for check_bin_arch Herve Codina
2021-07-06 20:20   ` Yann E. MORIN
2021-07-06 21:25     ` Yann E. MORIN
2021-07-07 12:07       ` Herve Codina
2021-07-06 14:25 ` [Buildroot] [PATCH v2 18/18] support/testing/tests: add test for file overwrite detection Herve Codina
2021-07-06 21:19 ` [Buildroot] [PATCH v2 00/18] Overwritten file detection and fixes, one more step to TLP build Yann E. MORIN

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210709084820.37830e5f@bootlin.com \
    --to=herve.codina@bootlin.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox