From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vicente Olivert Riera Date: Thu, 10 Sep 2015 15:16:46 +0100 Subject: [Buildroot] [PATCH] mtd: add missing -lintl from util-linux when building statically In-Reply-To: <20150910140626.GR2191@tarshish> References: <1441881890-6521-1-git-send-email-Vincent.Riera@imgtec.com> <20150910134556.GQ2191@tarshish> <55F18CE8.5090909@imgtec.com> <20150910140626.GR2191@tarshish> Message-ID: <55F190CE.9000501@imgtec.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net Dear Baruch Siach, On 09/10/2015 03:06 PM, Baruch Siach wrote: > Hi Vincent, > > On Thu, Sep 10, 2015 at 03:00:08PM +0100, Vicente Olivert Riera wrote: >> On 09/10/2015 02:45 PM, Baruch Siach wrote: >>> On Thu, Sep 10, 2015 at 11:44:50AM +0100, Vicente Olivert Riera wrote: >>>> mtd depends on util-linux when BR2_PACKAGE_MTD_MKFSUBIFS is selected. >>>> Also, util-linux depends on gettext and will need to link with -lintl if >>>> BR2_NEEDS_GETTEXT_IF_LOCALE is selected. So, when mtd tries to link with >>>> util-linux's uuid (-luuid) it should add -lintl as well, but it fails >>>> when building statically. The uuid.pc file lists -lintl as one of the >>>> needed libraries, but since mtd package doesn't have a configure phase >>>> we can't do the following: >>>> >>>> MTD_DEPENDENCIES += host-pkgconf >>>> MTD_CONF_ENV += LIBS=`$(PKG_CONFIG_HOST_BINARY) --libs uuid"` >>> >>> So why not something like: >>> >>> MTD_MKFS_UBIFS_LIBS = `$(PKG_CONFIG_HOST_BINARY) --libs uuid"` >>> >>> and use $(MTD_MKFS_UBIFS_LIBS) instead of hard coding -lintl in the sed >>> expression. >> >> do you mean like this?: >> >> $(SED) '/^LDLIBS_mkfs\.ubifs/ s/$$/$$(MTD_MKFS_UBIFS_LIBS)/' $(@D)/Makefile >> >> That will end up with the string "$(MTD_MKFS_UBIFS_LIBS)" written in the >> Makefile. > > What happens when you put a single $ in $(MTD_MKFS_UBIFS_LIBS)? It fails with an error like this one: >>> mtd 1.5.2 Building /bin/sed -i -e '/^LDLIBS_mkfs\.ubifs/ s/$/ "`/br/output/host/usr/bin/pkg-config --libs uuid`"/' /br/output/build/mtd-1.5.2/Makefile /bin/sed: -e expression #1, char 31: unknown option to `s' make: *** [/br/output/build/mtd-1.5.2/.stamp_built] Error 1 Before sending this patch I already tried to put the result of the pkg-config command in a variable and use it in the sed command, and I faced both problems, having the variable name written in the Makefile, and this error I said above. Regards, Vincent. >>> This way you can remove the condition from the sed expression. >> >> What condition? I don't what you mean Baruch, sorry. > > The > > ifeq ($(BR2_STATIC_LIBS)$(BR2_NEEDS_GETTEXT_IF_LOCALE),yy) > > condition. pkg-config should know the right answer in any case. > >> If you provide a patch that it fixes the problem following a different >> approach, I would be happy to review it and test it. > > I'll try doing so in the evening, if you don't beat me to it. > > baruch > >>>> So, in further investigations I have seen that mtd hardcodes the libs >>>> for mkfs.ubifs in the Makefile, in a variable called LDLIBS_mkfs.ubifs, >>>> and that variable can't be overwritten by passing options or environment >>>> variables to make. >>>> >>>> So, to fix the problem, we use a sed command to append -lintl to the >>>> LDLIBS_mkfs.ubifs variable only when building statically, because it's >>>> the case when it fails, and only when BR2_NEEDS_GETTEXT_IF_LOCALE is >>>> selected, because is the case when you also need -lintl when linking >>>> with util-linux. >>>> >>>> Fixes: >>>> >>>> http://autobuild.buildroot.net/results/2dd/2ddd714446d9eb75701bd48c117dc5bbbd291a76/ >>>> >>>> Signed-off-by: Vicente Olivert Riera >>>> --- >>>> package/mtd/mtd.mk | 6 ++++++ >>>> 1 files changed, 6 insertions(+), 0 deletions(-) >>>> >>>> diff --git a/package/mtd/mtd.mk b/package/mtd/mtd.mk >>>> index 0fb9fc2..a34c840 100644 >>>> --- a/package/mtd/mtd.mk >>>> +++ b/package/mtd/mtd.mk >>>> @@ -18,6 +18,12 @@ endif >>>> >>>> ifeq ($(BR2_PACKAGE_MTD_MKFSUBIFS),y) >>>> MTD_DEPENDENCIES += util-linux zlib lzo >>>> +ifeq ($(BR2_STATIC_LIBS)$(BR2_NEEDS_GETTEXT_IF_LOCALE),yy) >>>> +define MTD_ADD_MISSING_LINTL >>>> + $(SED) '/^LDLIBS_mkfs\.ubifs/ s/$$/ -lintl/' $(@D)/Makefile >>>> +endef >>>> +MTD_PRE_BUILD_HOOKS += MTD_ADD_MISSING_LINTL >>>> +endif >>>> endif >>>> >>>> ifeq ($(BR2_PACKAGE_BUSYBOX),y) >