2158c87206
Currently, GNU Make expands the Python SYSCONFIGDATA_NAME variable; however, when building with per-package directories, this variable is not set because the evaluation of this variable occurs before buildroot creates the per-package directories of a given package. This can be easily demonstrated with that trivial Makefile: $ cat Makefile BLA = $(wildcard bla) all: @echo 'BLA=$(BLA)' @touch bla @echo 'BLA=$(BLA)' $ make BLA= BLA= $ make BLA=bla BLA=bla I.e. the variables are evaluated at the beginning of a recipe, not for each line of the recipe. There are two solutions to fix this problem: - add a step between "patch" and "configure," which would evaluate all of the variables after creating the per-package directories; - evaluate SYSCONFIGDATA_NAME via a shell expansion instead of Makefile, to postpone the effective ex[ansion to until after the file has been created. Even though the first option is semantically the best solution, this is also very intrusive, especially since python3 is so far the only case where we would need it. The second option however is more expedient, adn so this is what we're doing here. We introduce PKG_PYTHON_SYSCONFIGDATA_PATH to avoid duplication and to make the following line easier to read. Then PKG_PYTHON_SYSCONFIGDATA_NAME is actually defined as a back-tick shell expansion (although back-ticks have their drawbacks, using $(...) in Makefile is not trivial either): - we test that the file does exist, to cover the python2 and python3 cases: with python2, the file does not exist, so we want to expand to an empty string; 'basename' only works on the filename, and does not check the file actually exists; - if the file exist, we get its basename without the .py extension, and this makes our expansion; - the "|| true" is added to ensure the old behavior of returning an empty string if the file does not exist still works, when the expansion is attempted in a shell where 'set -e' is in effect (the test would fail with python2, but this is not an error). Fixes: https://bugs.busybox.net/show_bug.cgi?id=12941 Signed-off-by: Adam Duskett <Aduskett@gmail.com> [yann.morin.1998@free.fr: slight rewording in commit log] Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr> |
||
---|---|---|
arch | ||
board | ||
boot | ||
configs | ||
docs | ||
fs | ||
linux | ||
package | ||
support | ||
system | ||
toolchain | ||
utils | ||
.defconfig | ||
.flake8 | ||
.gitignore | ||
.gitlab-ci.yml | ||
.gitlab-ci.yml.in | ||
CHANGES | ||
Config.in | ||
Config.in.legacy | ||
COPYING | ||
DEVELOPERS | ||
Makefile | ||
Makefile.legacy | ||
README |
Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation. The documentation can be found in docs/manual. You can generate a text document with 'make manual-text' and read output/docs/manual/manual.text. Online documentation can be found at http://buildroot.org/docs.html To build and use the buildroot stuff, do the following: 1) run 'make menuconfig' 2) select the target architecture and the packages you wish to compile 3) run 'make' 4) wait while it compiles 5) find the kernel, bootloader, root filesystem, etc. in output/images You do not need to be root to build or run buildroot. Have fun! Buildroot comes with a basic configuration for a number of boards. Run 'make list-defconfigs' to view the list of provided configurations. Please feed suggestions, bug reports, insults, and bribes back to the buildroot mailing list: buildroot@buildroot.org You can also find us on #buildroot on Freenode IRC. If you would like to contribute patches, please read https://buildroot.org/manual.html#submitting-patches