[Buildroot] [PATCH] mtd: add missing -lintl from util-linux when building statically

Vicente Olivert Riera Vincent.Riera at imgtec.com
Thu Sep 10 14:16:46 UTC 2015


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 <Vincent.Riera at imgtec.com>
>>>> ---
>>>>  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)
> 



More information about the buildroot mailing list