[Buildroot] [PATCH 1/1] ccid: fix build with pkgconf 1.5.3
Arnout Vandecappelle
arnout at mind.be
Tue Dec 11 21:57:39 UTC 2018
On 11/12/2018 19:55, Yann E. MORIN wrote:
> Arnout, Fabrice,
>
> On 2018-12-11 19:21 +0100, Arnout Vandecappelle spake thusly:
>> On 11/12/2018 18:21, Fabrice Fontaine wrote:
>>> Do not add DESTDIR before usbdropdir to install pcsc drivers in
>>> src/Makefile.am.
>>>
>>> Indeed, usbdropdir is retrieved from libpcsc.pc and can be prefixed by
>>> sysroot, so it can can be set for example to:
>>> usbdropdir='/accts/mlweber1/rclinux/rc-buildroot-test/scripts/instance-3/output/host/bin/../microblazeel-buildroot-linux-uclibc/sysroot/usr/lib/pcsc/drivers'
>>>
>>> If DESTDIR is added before usbdropdir, files will be installed in a
>>> wrong directory and build will fail
>>
>> I have the feeling this is not the right fix. I think the problem really is
>> that pkg-config should prefix usbdropdir with sysroot. To me it seems that the
>> right thing to do is to add the sysroot to -L and -I flags, but not to add it to
>> random variables...
>>
>> Maybe other people who have a better understanding of how pkg-config is
>> supposed to work can shed some light?
>
> Indeed, we must be careful with how we handle pkg-config.
>
> For this specific case, I agree with Arnout: installing a file should
> always be prefixed by DESTDIR. We should not change that part of a
> package installation.
Especially because it is *wrong*, because the files will not be installed in
target...
>
> There are two conflicting needs: to know where the files are at build
> time, and to know where they are at runtime.
>
> With pkg-config, there is a mix of both concepts, and they are
> absolutely not differentiated. That's probably because pkg-config was
> initially made to be able to provide build-time-only files: headers and
> libs. But packages (ab)used it to also store and share arbitrary
> variables, and they expect those locations to be valid both at build
> time and runtime, which is wrong, as we can see in a lot of cases, such
> as this one...
>
> Before we bumped pkg-config, we had a patch that would make it prefix
> a set of carefully selected variables (instead of just -I and -L). But
> that was probably goign to be an endless whack-a-mole game, and upstream
> decided to now prefix all variables (again, instead of only -I and -L).
>
> However, I have no good idea on how to solve this situation in a generic
> way.
I don't even know how to do it in a specific way :-)
I poked around a bit in pkgconf sources, and this is the fragment that adds the
sysroot:
if (*value == '/' && client->sysroot_dir != NULL && strncmp(value,
client->sysroot_dir, strlen(client->sysroot_dir)))
bptr += pkgconf_strlcpy(buf, client->sysroot_dir, sizeof buf);
This is done unconditionally as far as I can see...
So I see a couple of possibilities...
1. Patch pkgconf to add the sysroot only for a whitelisted set of keys.
2. Mark the not-to-be-prefixed variables in the .pc file in some way, and
interpret that mark in pkgconf.
3. Make sure the value in the .pc file doesn't start with / - since there will
always be a DESTDIR prefixed to it, we can just make DESTDIR end with /.
4. Do some argument munging in the pkg-config wrapper script and don't set
PKG_CONFIG_SYSROOT_DIR if some random variable is requested - probably we
capture almost all broken cases by just matching --variable= in the argument list.
I can't say I really like any of these solutions though...
Regards,
Arnout
More information about the buildroot
mailing list