Gentoo Archives: gentoo-dev

From: James Le Cuirot <chewi@g.o>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] [PATCH] systemd.eclass: remove SYSROOT from pkg-config output
Date: Sun, 03 Jan 2021 12:52:28
Message-Id: 20210103125208.0694a788@symphony.aura-online.co.uk
In Reply to: [gentoo-dev] [PATCH] systemd.eclass: remove SYSROOT from pkg-config output by Mike Gilbert
1 On Sat, 2 Jan 2021 20:09:04 -0500
2 Mike Gilbert <floppym@g.o> wrote:
3
4 > When cross-compiling, users will typically have
5 > PKG_CONFIG_SYSROOT=${SYSROOT} defined via pkg-config wrapper.
6 >
7 > When PKG_CONFIG_SYSROOT is set, all paths included in pkg-config
8 > output get prefixed with this value.
9 >
10 > Signed-off-by: Mike Gilbert <floppym@g.o>
11 > ---
12 >
13 > This patch has already been pushed, but I figured I would send it for
14 > review in case someone else can think of a failure case, or has a better
15 > solution.
16 >
17 > eclass/systemd.eclass | 1 +
18 > 1 file changed, 1 insertion(+)
19 >
20 > diff --git a/eclass/systemd.eclass b/eclass/systemd.eclass
21 > index 81065a0af79a..f6d1fa2d92d6 100644
22 > --- a/eclass/systemd.eclass
23 > +++ b/eclass/systemd.eclass
24 > @@ -50,6 +50,7 @@ _systemd_get_dir() {
25 >
26 > if $(tc-getPKG_CONFIG) --exists systemd; then
27 > d=$($(tc-getPKG_CONFIG) --variable="${variable}" systemd) || die
28 > + d=${d#${SYSROOT}}
29 > d=${d#${EPREFIX}}
30 > else
31 > d=${fallback}
32
33 I was going to say this is not the best approach as it would be better
34 to tell pkg-config to not add the SYSROOT in the first place. I now
35 realise we have shot ourselves in the foot with cross-pkg-config as it
36 uses SYSROOT to set both PKG_CONFIG_SYSROOT_DIR to control the output
37 and PKG_CONFIG_LIBDIR to find the .pc files in the first place. I have
38 had prefix-related fixes for cross-pkg-config lined up for over a year
39 but unfortunately they do not address this. Trying to accommodate this
40 use case would probably just make it more confusing though so maybe
41 your approach is best after all.
42
43 The EPREFIX line is (sometimes) wrong in EAPI 7 though and the same goes
44 for udev.eclass. It took a while to get this agreed and corrected in
45 PMS but if SYSROOT points to / then the effective prefix is BROOT, not
46 EPREFIX; they may not be the same. If you just strip ESYSROOT then
47 it will always do the right thing but you'll need this fall back for
48 older EAPIs. I'm not sure why you didn't do it in one line? I forget if
49 EPREFIX is normalised to be / rather thank blank.
50
51 d=${d#${SYSROOT%/}/${EPREFIX#/}}
52
53 --
54 James Le Cuirot (chewi)
55 Gentoo Linux Developer

Replies