[Buildroot] [PATCH] pkgconf: make wrapper relocatable
Arnout Vandecappelle
arnout at mind.be
Wed Mar 9 14:52:44 UTC 2016
On 03/09/16 15:46, Peter Korsgaard wrote:
>>>>>> "Arnout" == Arnout Vandecappelle <arnout at mind.be> writes:
>
> > On 03/09/16 15:31, Peter Korsgaard wrote:
> >>>>>>> "Gustavo" == Gustavo Zacarias <gustavo at zacarias.com.ar> writes:
> >>
> >> > On 09/03/16 11:00, Peter Korsgaard wrote:
> >> >> Well, we cannot really break existing features to add new ones. The
> >> >> relative location between the pkg-config wrapper script and the staging
> >> >> directory is constant (or rather known at build time), so I guess we can
> >> >> do something with /proc/self/exe. We might need to implement the wrapper
> >> >> in C instead for that to work as /proc/self/exe for a shell script seems
> >> >> to return /bin/dash here.
> >>
> >> > That's overly complicated for no value at all.
> >> > You know the sysroot is in the host directory as well, so you just
> >> > need to filter out /usr/bin from $0 and hardcode the tuple in the
> >> > wrapper -
> >> > that's guaranteed to not change, otherwise you're in serious trouble.
> >>
> >> Yes, that's basically what I'm saying +/- the question if you want to
> >> rely on $0 containing the full path to the wrapper or if you use
> >> /proc/self/exe instead.
>
> > $0 will always contain the full relative path to the wrapper, no?
> > Even if it was found through PATH, the PATH search is done by libc so
> > the shell will be invoked with the full (absolute or relative) path to
> > the wrapper and use that as $0. Or am I missing something?
>
> well, if executed throyh a shell it will - But if I write code to call
> execve I get to chose what argv[0] should be.
Read the section "Interpreter scripts" of execve(2). argv[0] is discarded.
>
> Some software (like upx) wants to handle situations like this, but it
> might not be necessary for our pkg-config / vala wrappers.
>
>> I think the /proc/self/exe thing was something to deal with symlinks,
> > which isn't the issue here.
>
> That's another reason. If somebody does a symlink to our wrapper, then
> $0 will contain the full path to the link, not to the wrapper
> itself.
So we need to readlink it first.
> If somebody does a hardlink, /proc/self/exe won't even fix it for you -
> But that is probably quite unlikely.
For the hardlink case there is no solution.
Regards,
Arnout
--
Arnout Vandecappelle arnout dot vandecappelle at essensium dot com
Senior Embedded Software Architect . . . . . . +32-478-010353 (mobile)
Essensium, Mind division . . . . . . . . . . . . . . http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium . . . . . BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
More information about the buildroot
mailing list