package/xfsprogs: fix static build

xfsprogs links to some libraries from util-linux. Those in turn may use
i18n functions when locales are enabled.

When doing a uClibc build, those i18n functions are provided by the
libintl library from the gettext package.

xfsprogs does not use pkgconfig to find the util-linux libraries, so it
misses the Requires.private field from libblkid, and thus misses the
Libs.private field from libuid.

And so a static link fails because of undefined references to i18n
symbols.

Furthermore, xfsprogs does not use automake; the hand-made Makefiles do
not make use of the LIBS variable set by configure.

We fix that in two ways:

  - pass LIBS=-lintl to configure, so that the configure step has a
    chance to succeed  (as suggested by Waldemar)

  - patch a Makefile to link with EXTRALIBS, and pass EXTRALIBS via
    XFSPROGS_MAKE_OPTS

Fixes:
    http://autobuild.buildroot.org/results/503/50314716a9f72e8bb238e52e9dc342c68f7e0b8b/
    http://autobuild.buildroot.org/results/253/253a024698b55dece992b2631e30edf4ff9092f7/
    http://autobuild.buildroot.org/results/3fe/3fe0d96cf13af12b0051a95f7865d4e38f4a78af/
    http://autobuild.buildroot.org/results/d48/d48e61785d25d33106b7dab1b5cb200cf27d4044/
    ...

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Waldemar Brodkorb <wbx@openadk.org>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Yann E. MORIN 2017-02-26 12:19:03 +01:00 committed by Thomas Petazzoni
parent be8177fcea
commit 779ec7f36d
2 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,53 @@
From 1e9bb2fba94bc508659f1667bf95501324849bb9 Mon Sep 17 00:00:00 2001
From: "Yann E. MORIN" <yann.morin.1998@free.fr>
Date: Sun, 26 Feb 2017 12:04:54 +0100
Subject: [PATCH] build: add EXTRALIBS to link with
When doing a uClibc static build, the build fails to link:
http://autobuild.buildroot.org/results/503/50314716a9f72e8bb238e52e9dc342c68f7e0b8b/build-end.log
The cause is due to:
- xfsprogs links dome programs with util-linux' libblkid
- util-linux' libblkid is linked to util-linux' libuuid
- util-linux' libuuid uses i18n functions when locales are enabled
- uClibc does not provide i18n functions
- i18n functions are provided by libintl from libintl from gettext
util-linux installs pkg-config files for thos two libs. However,
xfsprogs does not use pkg-config to find libblkid or libuuid, thus it
misses the Libs.private field from libuid.
In this case, it is necessary to pass LIBS=-lintl at configure time, so
that configure correctly finds libblkid.
Still, this is not enough, because the build will not use LIBS during
the link phase.
We fix that last bit by adding EXTRALIBS to the libraries to link with,
so that it is possible to pass EXTRALIBS=-lintl at build time:
$ ./configure [...] LIBS=-lintl
$ make EXTRALIBS=-lintl
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Waldemar Brodkorb <wbx@openadk.org>
---
include/buildmacros | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/buildmacros b/include/buildmacros
index a7c5d8a..dd62d80 100644
--- a/include/buildmacros
+++ b/include/buildmacros
@@ -11,7 +11,7 @@ BUILDRULES = $(TOPDIR)/include/buildrules
LDFLAGS += $(LOADERFLAGS) $(LLDFLAGS)
LTLDFLAGS += $(LOADERFLAGS)
-LDLIBS = $(LLDLIBS) $(PLDLIBS) $(MALLOCLIB)
+LDLIBS = $(LLDLIBS) $(PLDLIBS) $(MALLOCLIB) $(EXTRALIBS)
MAKEOPTS = --no-print-directory Q=$(Q)
SRCFILES = Makefile $(HFILES) $(CFILES) $(LSRCFILES) $(LFILES) $(YFILES)
--
2.7.4

View File

@ -18,6 +18,23 @@ XFSPROGS_CONF_OPTS = \
INSTALL_GROUP=root \
--enable-static
# xfsprogs links some of its programs to libs from util-linux, which use
# i18n functions. For shared-only builds, that's automatically pulled in.
# Static builds need some help, though...
#
# No need to depend on gettext in this case: xfsprogs does not use it for
# itself; util-linux does need it and has it in its own dependencies.
#
# xfsprogs' buildsystem uses hand-made Makefiles, not automake, and they
# do not use the LIBS variable set by configure. So we use EXTRALIBS that
# is added by our patch.
#
# It is not needed to propagate the EXTRALIBS to the install step.
ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS)$(BR2_NEEDS_GETTEXT_IF_LOCALE),yy)
XFSPROGS_CONF_OPTS += LIBS=-lintl
XFSPROGS_MAKE_OPTS = EXTRALIBS=-lintl
endif
XFSPROGS_INSTALL_TARGET_OPTS = DIST_ROOT=$(TARGET_DIR) install
$(eval $(autotools-package))