Thomas Petazzoni [Sun, 16 Oct 2016 07:42:22 +0000 (09:42 +0200)]
uboot: add option to optionally depend on host-openssl
Some U-Boot board configurations have CONFIG_FIT_SIGNATURE=y. In this
case, when U-Boot builds its tools, it requires OpenSSL support on the
host system.
Since we clearly don't want to unconditionally depend on host-openssl,
we introduce a new option to explicitly enable the dependency on
host-openssl. This is exactly identical to the existing
BR2_TARGET_UBOOT_NEEDS_DTC, for the dependency on host-dtc. It is
therefore the responsibility of the user to enable this option if his
board configuration uses CONFIG_FIT_SIGNATURE=y.
Thomas Petazzoni [Thu, 20 Oct 2016 21:26:21 +0000 (23:26 +0200)]
qemu: fix build of target variant
Similar to what was done in commit 524b6b85595274ca13bd7d01adb61ce2dddd786c for the host variant, this
commit fixes the build of qemu's host variant. Qemu expects that the
cpp it is passed behave like cc: it passes the -c option, which is not
allowed by cpp, but is allowed for cc.
Fix that by overriding CPP when calling configure.
Thomas Petazzoni [Thu, 20 Oct 2016 20:57:11 +0000 (22:57 +0200)]
pppd: fix build with Linux 4.8 headers
This commit fixes the build of pppd with toolchain using Linux 4.8
headers. The patch has been taken from a pull request pending on the
Github project, which is unfortunately somewhat dead.
The fix is not the most beautiful one, but it does the job, in a piece
of source code that's anyway rather messy in terms of mixing userspace
headers and kernel headers.
Rahul Bedarkar [Tue, 18 Oct 2016 18:03:07 +0000 (23:33 +0530)]
libglib2: fix static linking with libgio
When statically linking with libgio, application needs to link with all
internal libraries that libgio uses. This commit adds patch which
includes libmount as Libs.private.
pkg-download: use raw basename for repo archiving to remove host- prefix
For packages that use a version control repository rather than a pre-made
tarball, the directory prefix used inside the tarball is currently
FOO_BASE_NAME, which can be 'foo' or 'host-foo'.
This means that the hash of such tarball will be different for target and
host packages, even though the contents are exactly the same. Hence, if the
hash file is created based on 'foo', and later a fresh build is made where
'host-foo' happens to be built before 'foo' (with a different config, for
example), the hash will be detected as incorrect and a new download is
started.
This problem does not affect many packages/users, due to the number of
conditions to be met:
- the package should be available for target _and_ host
- the package needs to use a VCS download method, e.g. git, hg, svn, ...
This does not include standard github downloads, which download a pre-made
archive.
- there should be a hash file containing the hash of the downloaded archive.
Since normally there is no hash file for packages with sources coming from
a version control system, this restricts even further. Some examples of
packages in this category that do have a hash file (but not necessarily
match the earlier conditions): expedite, vexpress-firmware, squashfs, ...
- the archive needs to be stored in a 'primary site' after initial archiving
and thus be downloaded later using a non-version-controlled method, like
wget or scp. This is because the version control download methods do not
receive a '-H' parameter pointing to the hash file and thus no hashes are
checked at all even if the file is present.
While packages matching the third condition could be considered to be 'wrong'
and need to be fixed, it does actually makes sense to have a hash file for
packages from version control, in particular if they are stored in a
primary site as mentioned in the last condition.
Regardless of any different opinions on the previous paragraph, it is also
not conceptually correct that a tarball of a package source can contain a
Buildroot-specific directory prefix 'host-'. Therefore, use
FOO_RAW_BASE_NAME instead of FOO_BASE_NAME when calling the dl-wrapper.
Example test scenario that exhibits the problem:
$ rm -rf /tmp/dl dl/squashfs-9c1db6d13a51a2e009f0027ef336ce03624eac0d.tar.gz
$ make qemu_x86_64_defconfig
$ make host-squashfs-dirclean host-squashfs-source
$ mkdir /tmp/dl
$ mv dl/squashfs-9c1db6d13a51a2e009f0027ef336ce03624eac0d.tar.gz /tmp/dl/
$ sed -i -e 's,BR2_PRIMARY_SITE=.*,BR2_PRIMARY_SITE="file:///tmp/dl",' \
-e '/BR2_PRIMARY_SITE/aBR2_PRIMARY_SITE_ONLY=y' .config
$ make host-squashfs-dirclean host-squashfs-source
Yann E. MORIN [Thu, 20 Oct 2016 16:28:25 +0000 (18:28 +0200)]
package/wireshark: fix kconfig dependencies
Commit fa6feff (wireshark: needs the qt5tools lrelease utility)
introduced a circular dependency chain in Kconfig:
package/qt5/qt5base/Config.in:118:error: recursive dependency detected!
package/qt5/qt5base/Config.in:118: symbol BR2_PACKAGE_QT5BASE_GUI is selected by BR2_PACKAGE_QT5TOOLS_PIXELTOOL
package/qt5/qt5tools/Config.in:19: symbol BR2_PACKAGE_QT5TOOLS_PIXELTOOL depends on BR2_PACKAGE_QT5TOOLS
package/qt5/qt5tools/Config.in:1: symbol BR2_PACKAGE_QT5TOOLS is selected by BR2_PACKAGE_QT5BASE_WIDGETS
package/qt5/qt5base/Config.in:131: symbol BR2_PACKAGE_QT5BASE_WIDGETS is selected by BR2_PACKAGE_QT5X11EXTRAS
package/qt5/qt5x11extras/Config.in:1: symbol BR2_PACKAGE_QT5X11EXTRAS depends on BR2_PACKAGE_QT5BASE_XCB
package/qt5/qt5base/Config.in:186: symbol BR2_PACKAGE_QT5BASE_XCB depends on BR2_PACKAGE_QT5BASE_GUI
Fix that by dropping the select on the Qt5Tools, and introduce an
intermediate kconfig-level variable to represent the new condition, to
simplify the .mk file.
That would make the condition for enabling/disabling the GUI to be a
little bit more complex by adding yet another (long-ish) variable.
So we also introduce an intermediate kconfig-level variable that
represent the condition to enable the GUI.
Thomas Petazzoni [Wed, 19 Oct 2016 20:28:54 +0000 (22:28 +0200)]
website: add Free Electrons as a current sponsor
Free Electrons sponsored the Buildroot Developers Meeting at ELCE 2016
in Berlin by making a donation to IN-Berlin, the organization who hosted
the 3-day event.
Bernd Kuhls [Sun, 16 Oct 2016 21:01:27 +0000 (23:01 +0200)]
package/vlc: use BR2_TOOLCHAIN_HAS_LIBATOMIC
While fixing
http://autobuild.buildroot.net/results/d95/d9572bcafc1776eebe88bbcaf031a05cd6ee4b23/
by using http://patchwork.ozlabs.org/patch/674337/ the build stopped at
a later stage with
/home/buildroot/br4/output/build/vlc-2.2.4/src/.libs/libvlccore.so: undefined reference to `__atomic_fetch_add_4'
/home/buildroot/br4/output/build/vlc-2.2.4/src/.libs/libvlccore.so: undefined reference to `__atomic_fetch_sub_4'
/home/buildroot/br4/output/build/vlc-2.2.4/src/.libs/libvlccore.so: undefined reference to `__atomic_fetch_or_1'
/home/buildroot/br4/output/build/vlc-2.2.4/src/.libs/libvlccore.so: undefined reference to `__atomic_compare_exchange_4'
/home/buildroot/br4/output/build/vlc-2.2.4/src/.libs/libvlccore.so: undefined reference to `__atomic_exchange_1'
collect2: error: ld returned 1 exit status
Rahul Bedarkar [Mon, 17 Oct 2016 17:01:31 +0000 (22:31 +0530)]
get-developers: use --cc instead of --to for developers
Output of get-developers script in our manual uses --cc for developers,
but actual output of get-developers script uses --to. This patch makes
code consistent with documentation, by using --cc for developers.
Peter Seiderer [Mon, 17 Oct 2016 20:01:28 +0000 (22:01 +0200)]
motion: fix postgresql support
The commandline paramter to enable/disable postgresql support is
called '--with-pgsql/--without-pgsql' and not '--with-postgresql/
--without-postgresql'.
Fixes [1] in case postgresql development files are installed on the host:
checking for PostgreSQL... testing
checking autodect pgsql headers... yes /usr/include/postgresql
checking autodect pgsql libs... /usr/lib64
checking for PQconnectStart in -lpq... no
configure: error: PostgreSQL support can't build without PostgreSQL libraries
Rahul Bedarkar [Wed, 19 Oct 2016 17:41:56 +0000 (23:11 +0530)]
usbredir: improve license description
For consistency use 'libraries' and 'program' as component names and
adjust license string for readability when we conditionally specify
license for server program.
Rahul Bedarkar [Wed, 19 Oct 2016 17:41:55 +0000 (23:11 +0530)]
dtc: update legal info
library libdtc is dual licensed under BSD-2c or GPLv2+ and dtc programs
are licensed under GPLv2+.
This patch annotates licenses with components and uses correct format to
specify dual licensing that is separating licenses with 'or' keyword
instead of '/'.
Yann E. MORIN [Wed, 19 Oct 2016 20:56:05 +0000 (22:56 +0200)]
docs/manual: document both user-facing br2-external variables
While BR2_EXTERNAL_<NAME>_PATH was already documented, it was not
made obvious that it could be reused in post-biuld, post-image and
in-fakeroot scripts.
The BR2_EXTERNAL_<NAME>_DESC variable was not documented at all.
Update the manual to fix this.
Note: a2x chokes on this:
.Note:
Both +BR2_EXTERNAL_$(NAME)_PATH+ and +BR2_EXTERNAL_$(NAME)_DESC+ are
available [...]
So, we had to resort to using different quoting styles for each
variables. They are not semantically equivalent, but the rendering
is the same with the default CSS (which we are using). That's gonna
be good-enough for now...
Yann E. MORIN [Wed, 19 Oct 2016 19:58:30 +0000 (21:58 +0200)]
core/br2-external: fix link to manual for converting old trees
To be noted: that link will only be valid once we have a released
manual. In the meantime, it's accessible on the nightly manual:
http://nightly.buildroot.org/#br2-external-converting
Yann E. MORIN [Wed, 19 Oct 2016 19:53:02 +0000 (21:53 +0200)]
core/br2-external: export paths and descriptions
Now that we support multiple br2-external trees, BR2_EXTERNAL is no
longer exported in the environment.
This means that post-build scripts in a br2-external tree can no longer
find their own files (well, they could re-invent the path by stripping
their known-relative path, but that'd be ugly, especially since we can
very well provide it).
Export the path for each br2-external trees as environment variables.
Do so for the description as well, as a courtesy.
Also, re-order variable definitions to be more logical: first, purely
internal variables, then exported variables.
Samuel Martin [Mon, 17 Oct 2016 21:05:43 +0000 (23:05 +0200)]
core: re-enter make if $(CURDIR) or $(O) are not canonical paths
When $(CURDIR) and/or $(O) contain symlinks in their paths, they can be
resolved differently, depending on each package build-system (whether it
uses the given paths or get the absolute canonical ones).
Using absolute canonical paths will help achieving reproducible builds and
will make easier tracking down host machine paths leaking into the host,
target or staging trees.
So, this change ensures the build takes place with the CURDIR and O
variables are set to their absolute canonical paths.
In order to recall the toplevel makefile with absolute canonical paths
for $(CURDIR) and $(O), we need to:
1- Compute the absolute canonical paths for $(CURDIR) and $(O) that will
be passed to the sub-make. This is achieved using the 'realpath' make
primitive. However, some care must be taken when manipulating O:
- the out-of-tree makefile wrapper happens a trailing "/.", we need
to strip this part away to not break the comparison driving the
sub-make call;
- the user can leave a trailing '/' to $(O);
- according to [1,2], realpath returns an empty string in case of
non-existing entry. So, to avoid passing an empty O= variable to
sub-make, it is necessary to define the output directory and create
it prior to call realpath on it (because on the first invocation,
$(O) usually does not yet exists), hence the trick doing the mkdir
right before calling realpath.
2- Update EXTRAMAKEARGS with the absolute canonical $(O) and use it
when call recalling the top-level makefile with umask and paths
correctly set.
3- Lastly, update the condition for setting the CONFIG_DIR and
NEED_WRAPPER variables.
Note:
* This change takes care of the makefile wrapper installed in $(O) to
avoid unneeded make recursion.
Samuel Martin [Mon, 17 Oct 2016 21:05:41 +0000 (23:05 +0200)]
core: split variables definition related to in/out-of-tree build from O itself
This change uncorrolates the CONFIG_DIR and NEED_WRAPPER definition from
the presence of the O variable in the command line.
Now, the condition used to set these variables is the value of O itself.
This change is a preparatory work since the O definition will need to
be moved around when we will make Buildroot run with absolute canonical
paths for both its root directory and the output location.
This will be addressed in a follow-up patch.
Johan Derycke [Wed, 19 Oct 2016 14:35:24 +0000 (16:35 +0200)]
qt5webkit: do not overwrite target python
This commit fixes an issue introduced in commit ac16793eaaabfced0312420759e3a66cdaa1ea8e. This commit creates a link
$(@D)/bin/python pointing to the host Python 2, and adds $(@D)/bin/ to
the PATH. However, the QT5WEBKIT_INSTALL_TARGET_CMDS variable copies the
contents of $(@D)/bin/ to the target filesystem, in order to install
binaries produced by the qt5webkit build. By doing this, we overwrite
the 'python' symbolic link on the target.
In order to fix this, we simply create the 'python' symbolic link used
to trick qt5webkit to use python2 on the host in the $(@D)/host-bin/
sub-directory.
Baruch Siach [Wed, 19 Oct 2016 08:24:12 +0000 (11:24 +0300)]
bind: don't lookup zlib.h in host headers
configure.in looks in host headers for zlib.h, unless given a headers
directory as --with-zlib parameter.
Note: a bug in the zlib.h header lookup logic causes configure.in to add
-l$(STAGING_DIR)/usr/include/include, and -L$(STAGING_DIR)/usr/include/lib.
But this does not affect us.
Rahul Bedarkar [Mon, 17 Oct 2016 16:16:56 +0000 (21:46 +0530)]
trinity: not available on musl
After fixing following build failures with musl:
* error: unknown type name __uint32_t and __uint64_t
* error: unknown type name pid_t and uid_t
* error: fatal error: bits/sockaddr.h: No such file or directory
it fails with
fds/files.c: In function 'file_tree_callback':
fds/files.c:172:10: error: 'FTW_CONTINUE' undeclared (first use in this function)
return FTW_CONTINUE;
^
fds/files.c:172:10: note: each undeclared identifier is reported only once for each function it appears in
fds/files.c:178:10: error: 'FTW_SKIP_SUBTREE' undeclared (first use in this function)
return FTW_SKIP_SUBTREE;
^
fds/files.c:185:10: error: 'FTW_STOP' undeclared (first use in this function)
return FTW_STOP;
^
fds/files.c: In function 'open_fds_from_path':
fds/files.c:197:26: error: 'FTW_ACTIONRETVAL' undeclared (first use in this function)
int flags = FTW_DEPTH | FTW_ACTIONRETVAL | FTW_MOUNT;
As per ftw man-page, flag FTW_ACTIONRETVAL is specific to glibc. It is
not available on musl. Since package uses it unconditionally, we mark
it not available on musl.
Ryan Coe [Thu, 13 Oct 2016 03:42:45 +0000 (20:42 -0700)]
libite: new package
Signed-off-by: Ryan Coe <[email protected]>
[Thomas:
- rewrap Config.in help text
- improve license description] Signed-off-by: Thomas Petazzoni <[email protected]>
Carlos Santos [Sun, 10 Jul 2016 01:16:09 +0000 (22:16 -0300)]
util-linux: allow disabling the basic set of tools
When even a single extra util-linux utility is enabled, the default
build and install will install many more programs, including many that
overlap with those offered by busybox.
Fix by reworking the install-utilies menu to take advantage of the new
--disable-all-programs config option. This option make it possible to
disable the basic set of apps, and then enable only the desired apps.
Original patch by Danomi Manchego, visible at
http://patchwork.ozlabs.org/patch/494866/
Signed-off-by: Carlos Santos <[email protected]>
[Thomas/Arnout: remove the choice between all/custom/no, and simply have
a list of options with the basic set of tools, and then one option for
each tool. This gives the same flexibility, but avoids the choice, which
is never nice to have.] Signed-off-by: Thomas Petazzoni <[email protected]>
Carlos Santos [Sun, 10 Jul 2016 01:16:08 +0000 (22:16 -0300)]
util-linux: expand selection of libraries and utilities
- Add option to control installation of libfdisk
- Add libfdisk license to the comment in util-linux.mk
- List all utilities provided by the basic set and document that
linux32, linux64, uname26, i386 and x86_64 are symlinks to setarch
- Add options to install cal, ipcrm, ipcs, logger, lslogin and pg
Signed-off-by: Carlos Santos <[email protected]>
[Thomas: add missing dependency of the new lslogins option on
libsmartcols, and therefore !MMU.] Signed-off-by: Thomas Petazzoni <[email protected]>
Carlos Santos [Sun, 10 Jul 2016 01:16:06 +0000 (22:16 -0300)]
util-linux: clean up libraries and tools selections
Fix several problems in the package recipe:
- Make 'bool "lib<foo>"' the first item in each block
- Move the depends before the selects
- Add missing dependencies on BR2_USE_MMU, for fork()
- Improve help for cramfs utilities and login utilities
Signed-off-by: Carlos Santos <[email protected]>
[Thomas:
- remove capitalization of prompts, for consistency
- add missing dependencies on libsmartcols, and therefore !MMU] Signed-off-by: Thomas Petazzoni <[email protected]>
gzip's configure uses $SHELL to find a POSIX-compliant shell to put in
the shebang of its shell scripts (zcat, gzexe, ...). However, we set
$SHELL to /bin/bash in the Makefile, which may not be present on the
target. We do make sure that /bin/sh always points to a valid shell on
the target so we can use that.
The configure discovery is completely broken for cross-compilation. The
same $SHELL is used during the build (it is used by make to run the
commands in rules) and on the target. Also, the checks for a valid
shell use the host shell, not the target shell.
We could try to patch gzip to fix that, but the checks can anyway not
be run for the target shell, so we'll have to override it with a cache
value anyway. So we can just as well do exactly that, without patching.
- Switch to GitHub.
- Remove LD=CC logic in libscsi.mk. This is now handled by the configure
script.
- Add patch to fix unsafe include paths issues. This patch has been sent
upstream as a pull request.
- Use a hook to create the m4 directory so autoreconf doesn't fail.
Yann E. MORIN [Fri, 14 Oct 2016 14:39:22 +0000 (16:39 +0200)]
core: allow a br2-external tree to override a defconfig
Currently, it is not possible for a br2-external tree to override a
defconfig bundled in Buildroot, nor is it possible to override one from
a previous br2-external tree in the stack.
However, it is interesting that a latter br2-external tree be able to
override a defconfig:
- the ones bundled in Buildroot are minimalist, and almost always
build a toolchain, so a br2-external tree may want to provide a
"better" defconfig (better, in the sense "suited for the project");
- similarly for a defconfig from a previous br2-external tree.
But we can't do that, as the rules for the defconfigs are generated in
the order the br2-external trees are specified, all after the bundled
defconfigs. Those rule are patten-matching rules, which means that the
first one to match is used, and the following ones are ignored.
Add a new utility macro, 'reverse', inspired from GMSL, that does what
it says: reverse a list of words.
Use that macro to reverse the list of br2-external trees, so that the
latters win over the formers, and even over bundled ones.
Yann E. MORIN [Fri, 14 Oct 2016 14:39:20 +0000 (16:39 +0200)]
core: add support for multiple br2-external trees
Currently, we only support at most one br2-external tree. Being able
to use more than one br2-external tree can be very useful.
A use-case would be for having a br2-external to contain the basic
packages, basic board defconfigs and board files, provided by one team
responsible for the "board-bringup", while other teams consume that
br2-external as a base, and complements it each with their own set of
packages, defconfigs and extra board files.
Another use-case would be for third-parties to provide their own
Buildroot packaging in a br2-external tree, along-side the archives for
their stuff.
Finally, another use-case is to be able to add FLOSS packages in a
br2-external tree, and proprietary packages in another. This allows
to not touch the Buildroot tree at all, and still be able to get in
compliance by providing only that br2-external tree(s) that contains
FLOSS packages, leaving aside the br2-external tree(s) with the
proprietary bits.
What we do is to treat BR2_EXTERNAL as a colon-separated (space-
separated also work, and we use that internally) list of paths, on which
we iterate to construct:
- the list of all br2-external names, BR2_EXTERNAL_NAMES,
- the per-br2-external tree BR2_EXTERNAL_$(NAME) variables, which
point each to the actual location of the corresponding tree,
- the list of paths to all the external.mk files, BR2_EXTERNAL_MKS,
- the space-separated list of absolute paths to the external trees,
BR2_EXTERNAL_DIRS.
Once we have all those variables, we replace references to BR2_EXTERNAL
with either one of those.
This cascades into how we display the list of defconfigs, so that it is
easy to see what br2-external tree provides what defconfigs. As
suggested by Arnout, tweak the comment from "User-provided configs" to
"External configs", on the assumption that some br2-external trees could
be provided by vendors, so not necessarily user-provided. Ditto the menu
in Kconfig, changed from "User-provided options" to "External options".
Now, when more than one br2-external tree is used, each gets its own
sub-menu in the "User-provided options" menu. The sub-menu is labelled
with that br2-external tree's name and the sub-menu's first item is a
comment with the path to that br2-external tree.
If there's only one br2-external tree, then there is no sub-menu; there
is a single comment that contains the name and path to the br2-external
tree.
Yann E. MORIN [Fri, 14 Oct 2016 14:39:18 +0000 (16:39 +0200)]
docs/manual: document the br2-external NAME
Update the manual with the new external.desc mandatory file.
Take the opportunity to add a section listing all mandatory files,
Config.in, external.mk and the new external.desc, instead of just
hinting about them in the external package recipes section.
Change the examples to use the NAME-suffixed variable instead of the
raw BR2_EXTERNAL variable.
Change all references to BR2_EXTERNAL elsewhere in the manual to now
use the 'br2-external tree' terminology.
Yann E. MORIN [Fri, 14 Oct 2016 14:39:17 +0000 (16:39 +0200)]
core: introduce per br2-external NAME
This unique NAME is used to construct a per br2-external tree variable,
BR2_EXTERNAL_$(NAME)_PATH, which contains the path to the br2-external
tree.
This variable is available both from Kconfig (set in the Kconfig
snippet) and from the .mk files.
Also, display the NAME and its path as a comment in the menuconfig.
This will ultimately allow us to support multiple br2-external trees at
once, with that NAME (and thus BR2_EXTERNAL_$(NAME)) uniquely defining
which br2-external tree is being used.
The obvious outcome is that BR2_EXTERNAL should now no longer be used to
refer to the files in the br2-external tree; that location is now known
from the BR2_EXTERNAL_$(NAME)_PATH variable instead. This means we no
longer need to expose, and must stop from from exposing BR2_EXTERNAL as
a Kconfig variable.
Finally, this also fixes a latent bug in the pkg-generic infra, where we
would so far always refer to BR2_EXTERNAL (even if not set) to filter
the names of packages (to decide whether they are a bootloader, a
toolchain or a simple package).
Note: since the variables in the Makefile and in Kconfig are named the
same, the one we computed early on in the Makefile will be overridden by
the one in .config when we have it. Thus, even though they are set to
the same raw value, the one from .config is quoted and, being included
later in the Makefile, will take precedence, so we just re-include the
generated Makefile fragment a third time before includeing the
br2-external's Makefiles. That's unfortunate, but there is no easy way
around that as we do want the two variables to be named the same in
Makefile and Kconfig (and we can't ask the user to un-quote that variable
himself either), hence this little dirty triple-inclusion trick.
Yann E. MORIN [Fri, 14 Oct 2016 14:39:15 +0000 (16:39 +0200)]
core: offload handling of BR2_EXTERNAL into the script
Currently, we treat the case where we have no br2-external tree
(BR2_EXTERNAL is empty) differently from the case where we do have one
(BR2_EXTERNAL is not empty).
There is now no reason to treat those two cases differently:
- the kconfig snippet is always generated appropriately (i.e. it would
include the br2-external tree if set, or include nothing otherwise);
- we no longer have a dummy br-external tree either.
Also, the Makefile code to handle BR2_EXTERNAL is currently quite
readable if at least a little bit tricky.
However, when we're going to add support for using multiple br2-external
trees simultaneously, this code would need to get much, much more complex.
To keep the Makefile (rather) simple, offload all of the handling of
BR2_EXTERNAL to the recently added br2-external helper script.
However, because of Makefiles idiosyncracies, we can't use a rule to
generate that Makefile fragment.
Instead, we use $(shell ...) to call the helper script, and include the
fragment twice: once before the $(shell ...) so we can grab a previously
defined BR2_EXTERNAL value, a second time to use the one passed on the
command line, if any.
Furthermore, we can't error out (e.g. on non-existent br2-external tree)
directly from the fragment or we'd get that error on subsequent calls,
with no chance to override it even from command line.
Instead, we use a variable in which we store the error, set it to empty
before the second inclusion, so that only the one newly generated, if
any, is taken into account.
Since we know the script will always be called from Makefile context
first, we know validation will occur in Makefile context first. So we
can assume that, if there is an error, it will be detected in Makefile
context. Consequently, if the script is called to generate the kconfig
fragment, validation has already occured, and there should be no error.
So we change the error function to generate Makefile code, so that
errors are caught as explained above.
Lastly, when the value of BR2_EXTERNAL changes, we want to 'forget'
about the previous value of the BR2_EXTERNAL_MK variable, especially in
the case where BR2_EXTERNAL is now set to empty, so that we do not try
to include it later. That's why we first generate empty version of
BR2_EXTERNAL_MK, and then assign it the new value, if any.
Yann E. MORIN [Fri, 14 Oct 2016 14:39:14 +0000 (16:39 +0200)]
core: get rid of our dummy br2-external tree
Now that we generate a kconfig snippet, we can conditionally include the
BR2_EXTERNAL's Config.in only when BR2_EXTERNAL is supplied by the user,
which means our empty/dummy Config.in is no needed.
As for external.mk, we can also include it only when BR2_EXTERNAL is
supplied by the user, which means our empty/dummy external.mk is no
longer needed.
Ditch both of those files, and:
- only generate actual content in the Kconfig snippet when we actually
do have a BR2_EXTERNAL provided by the user (i.e. BR2_EXTERNAL is not
empty);
- add a variable that contains the path to the external.mk provided by
the user, or empty if none, and include the path set in that variable
(make can 'include' nothing without any problem! ;-) )
Yann E. MORIN [Fri, 14 Oct 2016 14:39:13 +0000 (16:39 +0200)]
core: do not hard-code inclusion of br2-external in Kconfig
Move the inclusion of br2-external's Config.in to the generated kconfig
snippet.
This will ultimately allow us to use more than one br2-external tree.
Offload the "User-provided options" menu to the generated Kconfig
snippet. We can also move the definition of the Kconfig-version of
BR2_EXTERNAL into this snippet.
We introduce an extra check that was not present in the previous code,
to check that we do have permission on that directory. Prevciously, it
was handled as a side effect of not being able to cd into there, but it
is cleaner to check it expressly.
cmd/6c
/home/buildroot/br2/output/build/host-go-bootstrap-1.4.2/src/cmd/6c/txt.c: In function 'gmove':
/home/buildroot/br2/output/build/host-go-bootstrap-1.4.2/src/cmd/6c/txt.c:995:28: error: left shift of negative value [-Werror=shift-negative-value]
f->vconst |= (vlong)~0 << 32;
^~
/home/buildroot/br2/output/build/host-go-bootstrap-1.4.2/src/cmd/6c/txt.c:1045:28: error: left shift of negative value [-Werror=shift-negative-value]
f->vconst |= (vlong)~0 << 32;
^~
cc1: all warnings being treated as errors
not yet caught by autobuilders using this defconfig:
The blind option BR2_GCC_SUPPORTS_GRAPHITE was used to distinguish gcc
versions that support the graphite loop optimizer. But since a while
already, all the versions we support do support graphite. So this symbol
isn't needed anymore.