Bug 14656

Summary: Adding dependencies from an external tree does not work
Product: buildroot Reporter: Simon Doppler <dopsi>
Component: OtherAssignee: unassigned
Status: RESOLVED WONTFIX    
Severity: normal CC: buildroot, yann.morin.1998
Priority: P5    
Version: unspecified   
Target Milestone: ---   
Hardware: All   
OS: Linux   
Host: Target:
Build:

Description Simon Doppler 2022-03-09 10:22:59 UTC
When a dependency is added by a Makefile in an external tree to a package present in the Buildroot tree, the dependency does not get built before the package.

Detailled description:

When having the following in an external tree:

    FOO_DEPENDENCIES += bar

FOO_FINAL_ALL_DEPENDENCIES gets updated and will contain bar (as shown by running make foo-show-depends) but this will not be reflected in the build order (as shown in make foo-show-build-order).

In the package/pkg-generic.mk file [1] there is a call to patsubst that will compute the prerequisites for foo-show-build-order.

When printing the output of pathsubst with

    echo $$(patsubst %,%-show-build-order,$$($(2)_FINAL_ALL_DEPENDENCIES))

the value is properly written out and will contain bar. However, the prerequisite is not present when printing them out with

    echo $$^

[1] https://git.buildroot.org/buildroot/tree/package/pkg-generic.mk#n996

Links:
- first mailing list post: https://lists.buildroot.org/pipermail/buildroot/2022-February/637237.html
- second mailing list post: https://lists.buildroot.org/pipermail/buildroot/2022-March/638117.html
- minimal example: https://gitlab.com/dopsi/mve-br2-external-dep
Comment 1 Simon Doppler 2022-03-09 10:25:19 UTC
Workaround: It is possible to build bar first and then building the entire system.
Comment 2 Yann E. MORIN 2022-03-09 20:14:16 UTC
Simon, All,

As I explained on the list [0], it is not possible to use a br2-external
tree to modify the dependencies of a package.


[0] https://lore.kernel.org/buildroot/20220309201030.GA23050@scaer/T/#m4bacf3a6047b2da82554d088f2afd805bef5a312

There is for now no way to achieve what you need without directly modifying
the original package's .mk file.

(note: there have been a few ideas floated around in the past, but they are
far from trivial to apply, if at all.)

Regards,
Yann E. MORIN.