[Buildroot] [PATCH] package/linux: fix LINUX_PKGDIR with br2-external linux-extensions
peter at korsgaard.com
Sat Jan 25 11:01:16 UTC 2020
>>>>> "Yann" == Yann E MORIN <yann.morin.1998 at free.fr> writes:
> When 'make' includes a new Makefile, it appends its path to the MAKEFILE_LIST
> variable. From that variable, we construct a few set of derivative
> pkgdir = $(dir $(lastword $(MAKEFILE_LIST)))
> pkgname = $(lastword $(subst /, ,$(pkgdir)))
> Essentially, pkgdir is the full directory where the package is located
> (either relative to Buildroot's top directory for in-tree packages, or
> absolute for packages in br2-external trees), while pkgname is the last
> component of that directory.
> pkgdir is in turn used to seed FOO_PKGDIR.
> This all happens when we eventually call the package-generic infra,
> later down in the file.
> When they are parsed, the Makefiles for each linux-extensions are
> appended to MAKEFILE_LIST, after the linux.mk one. But since they are
> located in the same directory as the main linux.mk, the last component
> of MaKEFILE_LIST, which is no longer the main linux.mk, will still yield
> the correct values for the linux package.
> This is a tough assumption we made there and then.
> When we added the support for br2-external linux extensions, we where
> very cautious to explicitly scan them from a directory named 'linux', so
> that this would yield the correct package name.
> And that worked well so far, until someone needed to build an older
> kernel, for which our conditional patch is needed, and which just
> /bin/bash: [...]/buildroot-external-linux-test/linux//0001-timeconst.pl-Eliminate-Perl-warning.patch.conditional: No such file or directory
> When we scan linux extensions from a br2-external tree, the last
> component of MAKEFILE_LIST is no longer in the same directory as the
> main linux.mk, and thus the assumption above falls to pieces...
> Again, when we added support for linux extensions from br2-external,
> although we cared about the package name (pkgname), we completely missed
> out on the package directory, and the LINUX_PKGDIR variable.
> We do not have a very clean way out of this mess, but we have a nice
> dirty trick scan the linux extensions from a br2-external tree before we
> scan the in-tree ones. That way, the last component of MAKEFILE_LIST is
> back to one that is in the same directory as the main linux.mk, and
> we're back on tracks.
> This is still very fragile, though, but short of a complete overhaul on
> how packages are parsed and evaluated, this is the best we can come in
> short order.
> Reported-by: Heiko Thiery <heiko.thiery at gmail.com>
> Signed-off-by: Yann E. MORIN <yann.morin.1998 at free.fr>
> Cc: Heiko Thiery <heiko.thiery at gmail.com>
> Cc: Arnout Vandecappelle <arnout at mind.be>
> Cc: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
Quite a mess, but a very nice commit message.
Bye, Peter Korsgaard
More information about the buildroot