kumquat-buildroot/package/libcap/libcap.mk
Thomas Petazzoni 9c13e02c35 package/libcap: fix static linking issues
Since the bump of libcap to 2.42, host-libcap unconditionally tries to
build a shared library, which fails on build machines where the static
version of the C library is not available.

This issue was reported upstream, who fixed it by two different
commits, which are backported as patches 0001 and 0002. They require
passing a DYNAMIC= value, which should be "yes" to enable dynamic
linking, or empty when not using dynamic linking.

However, other upstream changes broke our logic to support static-only
linking for the target. So we introduce a 0003 patch which extends how
the DYNAMIC flag is used to disable the build of the shared library in
the libcap/ folder. This allows to greatly simplify libcap.mk.

Note that the refactoring is mixed with the fix: the two are hardly
splitable. We need to be able to pass the same options at all steps, and
especially the staging step, otherwise some code gets compiled with the
host compiler, installed in staging, and thus fails the architecture
check later on.

Fixes:

  host-libcap build failure on system without a static libc
  http://autobuild.buildroot.net/results/4b14458014e420ffe088f118e7d0261e67f2d551/

  libcap build failure on static only systems
  http://autobuild.buildroot.net/results/8961759067c4639ae697b6ee5db606f098b7c7e8/

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
[yann.morin.1998@free.fr:
  - also pass DYNAMIC=yes at host-install step
  - extend commit log to explain why we refactor and fix together
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-09-10 00:06:46 +02:00

64 lines
1.6 KiB
Makefile

################################################################################
#
# libcap
#
################################################################################
LIBCAP_VERSION = 2.42
LIBCAP_SITE = https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2
LIBCAP_SOURCE = libcap-$(LIBCAP_VERSION).tar.xz
LIBCAP_LICENSE = GPL-2.0 or BSD-3-Clause
LIBCAP_LICENSE_FILES = License
LIBCAP_DEPENDENCIES = host-libcap host-gperf
LIBCAP_INSTALL_STAGING = YES
HOST_LIBCAP_DEPENDENCIES = host-gperf
LIBCAP_MAKE_FLAGS = \
BUILD_CC="$(HOSTCC)" \
BUILD_CFLAGS="$(HOST_CFLAGS)" \
DYNAMIC=$(if $(BR2_STATIC_LIBS),,yes)
LIBCAP_MAKE_DIRS = libcap
ifeq ($(BR2_PACKAGE_LIBCAP_TOOLS),y)
LIBCAP_MAKE_DIRS += progs
endif
define LIBCAP_BUILD_CMDS
$(foreach d,$(LIBCAP_MAKE_DIRS), \
$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/$(d) \
$(LIBCAP_MAKE_FLAGS) all
)
endef
define LIBCAP_INSTALL_STAGING_CMDS
$(foreach d,$(LIBCAP_MAKE_DIRS), \
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/$(d) $(LIBCAP_MAKE_FLAGS) \
DESTDIR=$(STAGING_DIR) prefix=/usr lib=lib install
)
endef
define LIBCAP_INSTALL_TARGET_CMDS
$(foreach d,$(LIBCAP_MAKE_DIRS), \
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/$(d) $(LIBCAP_MAKE_FLAGS) \
DESTDIR=$(TARGET_DIR) prefix=/usr lib=lib install
)
endef
define HOST_LIBCAP_BUILD_CMDS
$(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D)\
DYNAMIC=yes \
RAISE_SETFCAP=no GOLANG=no
endef
define HOST_LIBCAP_INSTALL_CMDS
$(HOST_MAKE_ENV) $(MAKE) -C $(@D) prefix=$(HOST_DIR) \
DYNAMIC=yes \
RAISE_SETFCAP=no GOLANG=no lib=lib install
endef
$(eval $(generic-package))
$(eval $(host-generic-package))