diff mbox series

[1/1] package/bmap-tools: add dependency on python-six

Message ID 20230814215233.745573-1-gregorhaas1997@gmail.com
State Changes Requested
Headers show
Series [1/1] package/bmap-tools: add dependency on python-six | expand

Commit Message

Gregor Haas Aug. 14, 2023, 9:52 p.m. UTC
The core bmaptool program provided by this package depends on python-six to run.
It is normally not an issue to use this program to e.g. finalize target images
since all host dependencies are copied to the same place. However, it seems that
bmaptool is configured (at package install time) to use the current host python
interpreter -- and in the case of per-package builds, this is the interpreter in
the per-package directory. Finally, without the explicit dependency on
python-six, this per-package interpreter will not have the necessary packages.
Therefore, add the required dependencies on python-six to ensure that the
bmaptool program can work correctly

Signed-off-by: Gregor Haas <gregorhaas1997@gmail.com>
---
 package/bmap-tools/bmap-tools.mk | 2 ++
 1 file changed, 2 insertions(+)

Comments

Thomas Petazzoni Aug. 22, 2023, 7:47 p.m. UTC | #1
Hello Gregor,

On Mon, 14 Aug 2023 14:52:33 -0700
Gregor Haas <gregorhaas1997@gmail.com> wrote:

> The core bmaptool program provided by this package depends on python-six to run.
> It is normally not an issue to use this program to e.g. finalize target images
> since all host dependencies are copied to the same place. However, it seems that
> bmaptool is configured (at package install time) to use the current host python
> interpreter -- and in the case of per-package builds, this is the interpreter in
> the per-package directory. Finally, without the explicit dependency on
> python-six, this per-package interpreter will not have the necessary packages.
> Therefore, add the required dependencies on python-six to ensure that the
> bmaptool program can work correctly
> 
> Signed-off-by: Gregor Haas <gregorhaas1997@gmail.com>
> ---
>  package/bmap-tools/bmap-tools.mk | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/package/bmap-tools/bmap-tools.mk b/package/bmap-tools/bmap-tools.mk
> index 32399ca151..350286777c 100644
> --- a/package/bmap-tools/bmap-tools.mk
> +++ b/package/bmap-tools/bmap-tools.mk
> @@ -9,6 +9,8 @@ BMAP_TOOLS_SITE = $(call github,intel,bmap-tools,v$(BMAP_TOOLS_VERSION))
>  BMAP_TOOLS_LICENSE = GPL-2.0
>  BMAP_TOOLS_LICENSE_FILES = COPYING
>  BMAP_TOOLS_SETUP_TYPE = setuptools
> +BMAP_TOOLS_DEPENDENCIES += python-six

I think this one should not be needed. The "select" in the Config.in
should be sufficient.

> +HOST_BMAP_TOOLS_DEPENDENCIES += host-python-six

For the host package, I can indeed reproduce the problem. But I think
the issue really is that in the final $(HOST_DIR), we keep the shebang
of the Python interpreter pointing to the per-package directory.
Indeed, my reasoning is that otherwise we will have many similar
problems with other packages, as this is breaking a fundamental
assumption in Buildroot.

I'm thinking about something like this:

diff --git a/Makefile b/Makefile
index f0ff9a1480..00ce64ab15 100644
--- a/Makefile
+++ b/Makefile
@@ -713,6 +713,15 @@ STAGING_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.t
 host-finalize: $(PACKAGES) $(HOST_DIR) $(HOST_DIR_SYMLINK)
        @$(call MESSAGE,"Finalizing host directory")
        $(call per-package-rsync,$(sort $(PACKAGES)),host,$(HOST_DIR))
+ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
+       $(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/host' $(HOST_DIR) \
+       |while read -d '' f; do \
+               file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
+               printf '%s\0' "$${f}"; \
+       done \
+       |xargs -0 --no-run-if-empty \
+               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/host:$(HOST_DIR):g'
+endif
 
 .PHONY: staging-finalize
 staging-finalize: $(STAGING_DIR_SYMLINK)

Yann, what do you think? (Logic is taken from package/pkg-generic.mk,
which does the conversion from per-package directories of dependencies
to the per-package directory of the package being built, the logic here
is similar, but we switch from the per-package directories to the
global host directory)

Best regards,

Thomas
Gregor Haas Aug. 23, 2023, 8:17 p.m. UTC | #2
Hi Thomas,

On Tue, Aug 22, 2023 at 12:47 PM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:

> I'm thinking about something like this:
>
> diff --git a/Makefile b/Makefile
> index f0ff9a1480..00ce64ab15 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -713,6 +713,15 @@ STAGING_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.t
>  host-finalize: $(PACKAGES) $(HOST_DIR) $(HOST_DIR_SYMLINK)
>         @$(call MESSAGE,"Finalizing host directory")
>         $(call per-package-rsync,$(sort $(PACKAGES)),host,$(HOST_DIR))
> +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
> +       $(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/host' $(HOST_DIR) \
> +       |while read -d '' f; do \
> +               file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
> +               printf '%s\0' "$${f}"; \
> +       done \
> +       |xargs -0 --no-run-if-empty \
> +               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/host:$(HOST_DIR):g'
> +endif
>
>  .PHONY: staging-finalize
>  staging-finalize: $(STAGING_DIR_SYMLINK)

Just wanted to confirm that this patch also fixes my issue, so I'm okay with
this instead of the patch I sent earlier.

Thanks,
Gregor
Thomas Petazzoni Aug. 23, 2023, 9:04 p.m. UTC | #3
Hello Gregor,

On Wed, 23 Aug 2023 13:17:09 -0700
Gregor Haas <gregorhaas1997@gmail.com> wrote:

> Just wanted to confirm that this patch also fixes my issue, so I'm okay with
> this instead of the patch I sent earlier.

Thanks for your confirmation. Ideally, I'd like to get feedback from
Yann (or other Buildroot maintainers) before formally submitting my
proposal. Let's see if I hear from Yann. If I don't hear back within
the next few days, I'll submit formally.

Best regards,

Thomas
Yann E. MORIN Aug. 24, 2023, 7:20 p.m. UTC | #4
Thomas, All,

On 2023-08-22 21:47 +0200, Thomas Petazzoni spake thusly:
> On Mon, 14 Aug 2023 14:52:33 -0700
> Gregor Haas <gregorhaas1997@gmail.com> wrote:
> For the host package, I can indeed reproduce the problem. But I think
> the issue really is that in the final $(HOST_DIR), we keep the shebang
> of the Python interpreter pointing to the per-package directory.
> Indeed, my reasoning is that otherwise we will have many similar
> problems with other packages, as this is breaking a fundamental
> assumption in Buildroot.
> 
> I'm thinking about something like this:
> 
> diff --git a/Makefile b/Makefile
> index f0ff9a1480..00ce64ab15 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -713,6 +713,15 @@ STAGING_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.t
>  host-finalize: $(PACKAGES) $(HOST_DIR) $(HOST_DIR_SYMLINK)
>         @$(call MESSAGE,"Finalizing host directory")
>         $(call per-package-rsync,$(sort $(PACKAGES)),host,$(HOST_DIR))
> +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
> +       $(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/host' $(HOST_DIR) \
> +       |while read -d '' f; do \
> +               file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
> +               printf '%s\0' "$${f}"; \
> +       done \
> +       |xargs -0 --no-run-if-empty \
> +               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/host:$(HOST_DIR):g'
> +endif
>  
>  .PHONY: staging-finalize
>  staging-finalize: $(STAGING_DIR_SYMLINK)
> 
> Yann, what do you think? (Logic is taken from package/pkg-generic.mk,
> which does the conversion from per-package directories of dependencies
> to the per-package directory of the package being built, the logic here
> is similar, but we switch from the per-package directories to the
> global host directory)

Then we want to avoid code duplication, why can't we re-use the existing
PPD_FIXUP_PATHS macro?

It might need a bit of tweaking, though:

  - first, we only need to fixup paths in $(HOST_DIR), and this is
    already what we are doing.

  - second, we only need to fix path for host tools, libs et al., so
    that they can still run, and paths for staging/ libs et al., so that
    we can link against.

However, that second point is not what we are doing, as we are tweaking
everything at the root of the PPD:

    $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'

Furthermore, staging/ is a sub-directory of host/ and we already account
for that as we are only grepping in $(HOST_DIR). But with the sed, we
replace a shaloower path than HOST_DIR.

So I think we can change the existing PPD_FIXUP_PATHS to:

     define PPD_FIXUP_PATHS
            $(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/' $(HOST_DIR) \
            |while read -d '' f; do \
                    file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
                    printf '%s\0' "$${f}"; \
            done \
            |xargs -0 --no-run-if-empty \
    -               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'
    +               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/host/:$(HOST_DIR)/:g'
     endef

And then, we can expand that macro in both contexts: PPD_rsync and
target-finalize.

Thoughts?

Regards,
Yann E. MORIN.
Gregor Haas Dec. 21, 2023, 10:17 p.m. UTC | #5
Hi all,

Just wanted to check if there is still interest in this patch? I've
been using Yann's proposal for a few months and it seems to work
really well for me, but it would be useful for me to have it in
upstream rather than carrying around a local patch.

Thanks,
Gregor

On Thu, Aug 24, 2023 at 12:20 PM Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>
> Thomas, All,
>
> On 2023-08-22 21:47 +0200, Thomas Petazzoni spake thusly:
> > On Mon, 14 Aug 2023 14:52:33 -0700
> > Gregor Haas <gregorhaas1997@gmail.com> wrote:
> > For the host package, I can indeed reproduce the problem. But I think
> > the issue really is that in the final $(HOST_DIR), we keep the shebang
> > of the Python interpreter pointing to the per-package directory.
> > Indeed, my reasoning is that otherwise we will have many similar
> > problems with other packages, as this is breaking a fundamental
> > assumption in Buildroot.
> >
> > I'm thinking about something like this:
> >
> > diff --git a/Makefile b/Makefile
> > index f0ff9a1480..00ce64ab15 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -713,6 +713,15 @@ STAGING_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.t
> >  host-finalize: $(PACKAGES) $(HOST_DIR) $(HOST_DIR_SYMLINK)
> >         @$(call MESSAGE,"Finalizing host directory")
> >         $(call per-package-rsync,$(sort $(PACKAGES)),host,$(HOST_DIR))
> > +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
> > +       $(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/host' $(HOST_DIR) \
> > +       |while read -d '' f; do \
> > +               file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
> > +               printf '%s\0' "$${f}"; \
> > +       done \
> > +       |xargs -0 --no-run-if-empty \
> > +               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/host:$(HOST_DIR):g'
> > +endif
> >
> >  .PHONY: staging-finalize
> >  staging-finalize: $(STAGING_DIR_SYMLINK)
> >
> > Yann, what do you think? (Logic is taken from package/pkg-generic.mk,
> > which does the conversion from per-package directories of dependencies
> > to the per-package directory of the package being built, the logic here
> > is similar, but we switch from the per-package directories to the
> > global host directory)
>
> Then we want to avoid code duplication, why can't we re-use the existing
> PPD_FIXUP_PATHS macro?
>
> It might need a bit of tweaking, though:
>
>   - first, we only need to fixup paths in $(HOST_DIR), and this is
>     already what we are doing.
>
>   - second, we only need to fix path for host tools, libs et al., so
>     that they can still run, and paths for staging/ libs et al., so that
>     we can link against.
>
> However, that second point is not what we are doing, as we are tweaking
> everything at the root of the PPD:
>
>     $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'
>
> Furthermore, staging/ is a sub-directory of host/ and we already account
> for that as we are only grepping in $(HOST_DIR). But with the sed, we
> replace a shaloower path than HOST_DIR.
>
> So I think we can change the existing PPD_FIXUP_PATHS to:
>
>      define PPD_FIXUP_PATHS
>             $(Q)grep --binary-files=without-match -lrZ '$(PER_PACKAGE_DIR)/[^/]\+/' $(HOST_DIR) \
>             |while read -d '' f; do \
>                     file -b --mime-type "$${f}" | grep -q '^text/' || continue; \
>                     printf '%s\0' "$${f}"; \
>             done \
>             |xargs -0 --no-run-if-empty \
>     -               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g'
>     +               $(SED) 's:$(PER_PACKAGE_DIR)/[^/]\+/host/:$(HOST_DIR)/:g'
>      endef
>
> And then, we can expand that macro in both contexts: PPD_rsync and
> target-finalize.
>
> Thoughts?
>
> Regards,
> Yann E. MORIN.
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
diff mbox series

Patch

diff --git a/package/bmap-tools/bmap-tools.mk b/package/bmap-tools/bmap-tools.mk
index 32399ca151..350286777c 100644
--- a/package/bmap-tools/bmap-tools.mk
+++ b/package/bmap-tools/bmap-tools.mk
@@ -9,6 +9,8 @@  BMAP_TOOLS_SITE = $(call github,intel,bmap-tools,v$(BMAP_TOOLS_VERSION))
 BMAP_TOOLS_LICENSE = GPL-2.0
 BMAP_TOOLS_LICENSE_FILES = COPYING
 BMAP_TOOLS_SETUP_TYPE = setuptools
+BMAP_TOOLS_DEPENDENCIES += python-six
+HOST_BMAP_TOOLS_DEPENDENCIES += host-python-six
 
 $(eval $(python-package))
 $(eval $(host-python-package))