0610de1490
When Bash attempts to find the current working directory, it uses a C library call `getcwd` to resolve it. When cross-compiling, the configuration process cannot determine if the target system's C library can support an "unfixed" path length. Therefore, Bash will fallback to a size of `PATH_MAX` for determining the current working directory. When using OverlayFS (and possible other file systems), this becomes an issue since file paths can commonly exceed standard `PATH_MAX` length. This typically results in the following error appearing: error retrieving current directory: [...] Common C library `getcwd` calls can default to a higher limit (usually the system's page size). The current configurable C libraries (as of at least 2015.08) support a zero (0) size buffer length. Most use the system's page size; musl, being an exception, which defaults to `PATH_MAX` (as Bash was doing). Since these C libraries support allocating buffer space with a zero (0) provided size, the following configuration change allows Bash to support getting a larger-length'ed working directory on target's that support it. Signed-off-by: James Knight <james.knight@rockwellcollins.com> Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
53 lines
1.6 KiB
Makefile
53 lines
1.6 KiB
Makefile
################################################################################
|
|
#
|
|
# bash
|
|
#
|
|
################################################################################
|
|
|
|
BASH_VERSION = 4.3.30
|
|
BASH_SITE = $(BR2_GNU_MIRROR)/bash
|
|
# Build after since bash is better than busybox shells
|
|
BASH_DEPENDENCIES = ncurses readline host-bison \
|
|
$(if $(BR2_PACKAGE_BUSYBOX),busybox)
|
|
BASH_CONF_OPTS = --with-installed-readline
|
|
BASH_LICENSE = GPLv3+
|
|
BASH_LICENSE_FILES = COPYING
|
|
|
|
BASH_CONF_ENV += \
|
|
ac_cv_rl_prefix="$(STAGING_DIR)" \
|
|
ac_cv_rl_version="$(READLINE_VERSION)" \
|
|
bash_cv_getcwd_malloc=yes \
|
|
bash_cv_job_control_missing=present \
|
|
bash_cv_sys_named_pipes=present \
|
|
bash_cv_func_sigsetjmp=present \
|
|
bash_cv_printf_a_format=yes
|
|
|
|
# Parallel build sometimes fails because some of the generator tools
|
|
# are built twice (i.e. while executing).
|
|
BASH_MAKE = $(MAKE1)
|
|
|
|
# The static build needs some trickery
|
|
ifeq ($(BR2_STATIC_LIBS),y)
|
|
BASH_CONF_OPTS += --enable-static-link --without-bash-malloc
|
|
# bash wants to redefine the getenv() function. To check whether this is
|
|
# possible, AC_TRY_RUN is used which is not possible in
|
|
# cross-compilation.
|
|
# On uClibc, redefining getenv is not possible; on glibc and musl it is.
|
|
# Related:
|
|
# http://lists.gnu.org/archive/html/bug-bash/2012-03/msg00052.html
|
|
ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
|
|
BASH_CONF_ENV += bash_cv_getenv_redef=no
|
|
else
|
|
BASH_CONF_ENV += bash_cv_getenv_redef=yes
|
|
endif
|
|
endif
|
|
|
|
# Make /bin/sh -> bash (no other shell, better than busybox shells)
|
|
define BASH_INSTALL_TARGET_CMDS
|
|
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \
|
|
DESTDIR=$(TARGET_DIR) exec_prefix=/ install
|
|
rm -f $(TARGET_DIR)/bin/bashbug
|
|
endef
|
|
|
|
$(eval $(autotools-package))
|