diff mbox

[RESEND] xen: limit pkg-config to PKG_CONFIG_PATH for xen libraries

Message ID 1490376002-1223-1-git-send-email-paul.durrant@citrix.com (mailing list archive)
State New, archived
Headers show

Commit Message

Paul Durrant March 24, 2017, 5:20 p.m. UTC
The Xen tools Makefile has been modified to set PKG_CONFIG_PATH such that
use of pkg-config in QEMU configure finds the newly built Xen libraries.
However, because older versions of Xen do not set PKG_CONFIG_PATH in the
Makefile, the QEMU configure script will pick up any Xen libraries that may
be installed in the build system rather than the newly built ones. Thus,
if Xen 4.9 is built and installed it becomes impossible to build tools for
an older version of Xen on the same system (without manual de-installtion).

This patch modifies configure to set PKG_CONFIG_LIBDIR to empty when
looking for Xen libraries to ensure the search is limited only to
PKG_CONFIG_PATH. This makes sure that, for versions of Xen prior to 4.9,
pkg-config fails to find the Xen libraries an approriately falls back to
previous methods of probing.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
Cc: Anthony Perard <anthony.perard@citrix.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Juergen Gross <jgross@suse.com>
---
 configure | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

Comments

Juergen Gross March 24, 2017, 6:44 p.m. UTC | #1
On 24/03/17 18:20, Paul Durrant wrote:
> The Xen tools Makefile has been modified to set PKG_CONFIG_PATH such that
> use of pkg-config in QEMU configure finds the newly built Xen libraries.
> However, because older versions of Xen do not set PKG_CONFIG_PATH in the
> Makefile, the QEMU configure script will pick up any Xen libraries that may
> be installed in the build system rather than the newly built ones. Thus,
> if Xen 4.9 is built and installed it becomes impossible to build tools for
> an older version of Xen on the same system (without manual de-installtion).
> 
> This patch modifies configure to set PKG_CONFIG_LIBDIR to empty when
> looking for Xen libraries to ensure the search is limited only to
> PKG_CONFIG_PATH. This makes sure that, for versions of Xen prior to 4.9,
> pkg-config fails to find the Xen libraries an approriately falls back to
> previous methods of probing.
> 
> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>

NAK. You are breaking normal qemu build with installed Xen pkg-config
files.


Juergen

> ---
> Cc: Anthony Perard <anthony.perard@citrix.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Juergen Gross <jgross@suse.com>
> ---
>  configure | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/configure b/configure
> index fdf47e4..6ef5980 100755
> --- a/configure
> +++ b/configure
> @@ -1974,6 +1974,10 @@ fi
>  ##########################################
>  # xen probe
>  
> +xen_query_pkg_config() {
> +    PKG_CONFIG_LIBDIR= ${pkg_config_exe} "$@"
> +}
> +
>  if test "$xen" != "no" ; then
>    xen_libs="-lxenstore -lxenctrl -lxenguest"
>    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
> @@ -1997,9 +2001,9 @@ EOF
>      xen=no
>  
>    # Xen version via pkg-config (Xen 4.9.0 and newer)
> -  elif $pkg_config --exists xencontrol ; then
> +  elif xen_query_pkg_config --exists xencontrol; then
>      xen_ctrl_version="$(printf '%d%02d%02d' \
> -      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
> +      $(xen_query_pkg_config --modversion xencontrol | sed 's/\./ /g') )"
>      xen=yes
>  
>    elif
> @@ -2216,8 +2220,8 @@ EOF
>      if test $xen_ctrl_version -ge 40900 ; then
>        xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab xenevtchn"
>        xen_pc="$xen_pc xendevicemodel"
> -      xen_libs="$($pkg_config --libs $xen_pc)"
> -      QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
> +      xen_libs="$(xen_query_pkg_config --libs $xen_pc)"
> +      QEMU_CFLAGS="$QEMU_CFLAGS $(xen_query_pkg_config --cflags $xen_pc)"
>      elif test $xen_ctrl_version -ge 40701 ; then
>        libs_softmmu="$xen_stable_libs $libs_softmmu"
>      fi
>
Stefano Stabellini March 24, 2017, 7:11 p.m. UTC | #2
On Fri, 24 Mar 2017, Juergen Gross wrote:
> On 24/03/17 18:20, Paul Durrant wrote:
> > The Xen tools Makefile has been modified to set PKG_CONFIG_PATH such that
> > use of pkg-config in QEMU configure finds the newly built Xen libraries.
> > However, because older versions of Xen do not set PKG_CONFIG_PATH in the
> > Makefile, the QEMU configure script will pick up any Xen libraries that may
> > be installed in the build system rather than the newly built ones. Thus,
> > if Xen 4.9 is built and installed it becomes impossible to build tools for
> > an older version of Xen on the same system (without manual de-installtion).
> > 
> > This patch modifies configure to set PKG_CONFIG_LIBDIR to empty when
> > looking for Xen libraries to ensure the search is limited only to
> > PKG_CONFIG_PATH. This makes sure that, for versions of Xen prior to 4.9,
> > pkg-config fails to find the Xen libraries an approriately falls back to
> > previous methods of probing.
> >
> > Signed-off-by: Paul Durrant <paul.durrant@citrix.com>

Paul, thanks for spotting this. I didn't spot it because I don't have
Xen installed in my build environment, but we should not rely on that. 


> NAK. You are breaking normal qemu build with installed Xen pkg-config
> files.
 
The normal QEMU build, done as part of the xen-unstable build, is
actually done without Xen being installed in the system. So, if I am not
mistaken, the current mechanism also breaks the following entirely
legitimate scenario:

- user has 4.9 installed on her system
- user git clones xen 4.10
- user build xen 4.10
  - as part of the xen build, qemu is cloned and built
  - the qemu configure script picks up the pkgconfig file from
    /usr/share and misconfigure the xen version, setting it to 4.9
    instead of 4.10
  - the qemu build fails
- the xen build fails

Am I right?

Regardless, both cases need to work correctly. A lot of people rely on
out of tree builds, including cross-compilations and openembedded. This
is a regression.

I suggest we set PKG_CONFIG_LIBDIR (or PKG_CONFIG_PATH?) to the right
place depending on where the configure script is picking up the Xen
header files:

- If the configure script picks up the Xen header files from /usr/include,
then we want the pkgconfig dir to be /usr/share/pkgconfig.

- If the configure script picks up the Xen header files from
/local/xen-unstable.git/tools/libxc/include, then we want the pkgconfig
dir to be local/xen-unstable.git/tools/pkg-config.

If that's too complex, we can always go back to the good old,
non-pkgconfig days.


> > Cc: Anthony Perard <anthony.perard@citrix.com>
> > Cc: Stefano Stabellini <sstabellini@kernel.org>
> > Cc: Juergen Gross <jgross@suse.com>
> > ---
> >  configure | 12 ++++++++----
> >  1 file changed, 8 insertions(+), 4 deletions(-)
> > 
> > diff --git a/configure b/configure
> > index fdf47e4..6ef5980 100755
> > --- a/configure
> > +++ b/configure
> > @@ -1974,6 +1974,10 @@ fi
> >  ##########################################
> >  # xen probe
> >  
> > +xen_query_pkg_config() {
> > +    PKG_CONFIG_LIBDIR= ${pkg_config_exe} "$@"
> > +}
> > +
> >  if test "$xen" != "no" ; then
> >    xen_libs="-lxenstore -lxenctrl -lxenguest"
> >    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
> > @@ -1997,9 +2001,9 @@ EOF
> >      xen=no
> >  
> >    # Xen version via pkg-config (Xen 4.9.0 and newer)
> > -  elif $pkg_config --exists xencontrol ; then
> > +  elif xen_query_pkg_config --exists xencontrol; then
> >      xen_ctrl_version="$(printf '%d%02d%02d' \
> > -      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
> > +      $(xen_query_pkg_config --modversion xencontrol | sed 's/\./ /g') )"
> >      xen=yes
> >  
> >    elif
> > @@ -2216,8 +2220,8 @@ EOF
> >      if test $xen_ctrl_version -ge 40900 ; then
> >        xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab xenevtchn"
> >        xen_pc="$xen_pc xendevicemodel"
> > -      xen_libs="$($pkg_config --libs $xen_pc)"
> > -      QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
> > +      xen_libs="$(xen_query_pkg_config --libs $xen_pc)"
> > +      QEMU_CFLAGS="$QEMU_CFLAGS $(xen_query_pkg_config --cflags $xen_pc)"
> >      elif test $xen_ctrl_version -ge 40701 ; then
> >        libs_softmmu="$xen_stable_libs $libs_softmmu"
> >      fi
> > 
>
Paul Durrant March 24, 2017, 7:17 p.m. UTC | #3
> -----Original Message-----
> From: Stefano Stabellini [mailto:sstabellini@kernel.org]
> Sent: 24 March 2017 19:12
> To: Juergen Gross <jgross@suse.com>
> Cc: Paul Durrant <Paul.Durrant@citrix.com>; qemu-devel@nongnu.org; xen-
> devel@lists.xenproject.org; Anthony Perard <anthony.perard@citrix.com>;
> Stefano Stabellini <sstabellini@kernel.org>
> Subject: Re: [PATCH RESEND] xen: limit pkg-config to PKG_CONFIG_PATH for
> xen libraries
> 
> On Fri, 24 Mar 2017, Juergen Gross wrote:
> > On 24/03/17 18:20, Paul Durrant wrote:
> > > The Xen tools Makefile has been modified to set PKG_CONFIG_PATH
> such that
> > > use of pkg-config in QEMU configure finds the newly built Xen libraries.
> > > However, because older versions of Xen do not set PKG_CONFIG_PATH
> in the
> > > Makefile, the QEMU configure script will pick up any Xen libraries that
> may
> > > be installed in the build system rather than the newly built ones. Thus,
> > > if Xen 4.9 is built and installed it becomes impossible to build tools for
> > > an older version of Xen on the same system (without manual de-
> installtion).
> > >
> > > This patch modifies configure to set PKG_CONFIG_LIBDIR to empty when
> > > looking for Xen libraries to ensure the search is limited only to
> > > PKG_CONFIG_PATH. This makes sure that, for versions of Xen prior to
> 4.9,
> > > pkg-config fails to find the Xen libraries an approriately falls back to
> > > previous methods of probing.
> > >
> > > Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> 
> Paul, thanks for spotting this. I didn't spot it because I don't have
> Xen installed in my build environment, but we should not rely on that.
> 
> 
> > NAK. You are breaking normal qemu build with installed Xen pkg-config
> > files.
> 
> The normal QEMU build, done as part of the xen-unstable build, is
> actually done without Xen being installed in the system. So, if I am not
> mistaken, the current mechanism also breaks the following entirely
> legitimate scenario:
> 
> - user has 4.9 installed on her system
> - user git clones xen 4.10
> - user build xen 4.10
>   - as part of the xen build, qemu is cloned and built
>   - the qemu configure script picks up the pkgconfig file from
>     /usr/share and misconfigure the xen version, setting it to 4.9
>     instead of 4.10
>   - the qemu build fails
> - the xen build fails
> 
> Am I right?
>

I think the above would actually work because the 4.10 files would be found before the 4.9 files. What fails is installing 4.9 and then trying to build 4.8.
 
> Regardless, both cases need to work correctly. A lot of people rely on
> out of tree builds, including cross-compilations and openembedded. This
> is a regression.
> 
> I suggest we set PKG_CONFIG_LIBDIR (or PKG_CONFIG_PATH?) to the right
> place depending on where the configure script is picking up the Xen
> header files:
> 
> - If the configure script picks up the Xen header files from /usr/include,
> then we want the pkgconfig dir to be /usr/share/pkgconfig.
> 
> - If the configure script picks up the Xen header files from
> /local/xen-unstable.git/tools/libxc/include, then we want the pkgconfig
> dir to be local/xen-unstable.git/tools/pkg-config.
> 

Yes, that's what is needed.

> If that's too complex, we can always go back to the good old,
> non-pkgconfig days.
> 

Unless this can be speedily resolved I think reverting the pkg-config changes would be best.

Another possibility perhaps would be an explicit configure flag for in-tree and out-of-tree builds so we can say exactly where QEMU should be getting its environment from?

  Paul

> 
> > > Cc: Anthony Perard <anthony.perard@citrix.com>
> > > Cc: Stefano Stabellini <sstabellini@kernel.org>
> > > Cc: Juergen Gross <jgross@suse.com>
> > > ---
> > >  configure | 12 ++++++++----
> > >  1 file changed, 8 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/configure b/configure
> > > index fdf47e4..6ef5980 100755
> > > --- a/configure
> > > +++ b/configure
> > > @@ -1974,6 +1974,10 @@ fi
> > >  ##########################################
> > >  # xen probe
> > >
> > > +xen_query_pkg_config() {
> > > +    PKG_CONFIG_LIBDIR= ${pkg_config_exe} "$@"
> > > +}
> > > +
> > >  if test "$xen" != "no" ; then
> > >    xen_libs="-lxenstore -lxenctrl -lxenguest"
> > >    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
> > > @@ -1997,9 +2001,9 @@ EOF
> > >      xen=no
> > >
> > >    # Xen version via pkg-config (Xen 4.9.0 and newer)
> > > -  elif $pkg_config --exists xencontrol ; then
> > > +  elif xen_query_pkg_config --exists xencontrol; then
> > >      xen_ctrl_version="$(printf '%d%02d%02d' \
> > > -      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
> > > +      $(xen_query_pkg_config --modversion xencontrol | sed 's/\./ /g') )"
> > >      xen=yes
> > >
> > >    elif
> > > @@ -2216,8 +2220,8 @@ EOF
> > >      if test $xen_ctrl_version -ge 40900 ; then
> > >        xen_pc="xencontrol xenstore xenguest xenforeignmemory
> xengnttab xenevtchn"
> > >        xen_pc="$xen_pc xendevicemodel"
> > > -      xen_libs="$($pkg_config --libs $xen_pc)"
> > > -      QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
> > > +      xen_libs="$(xen_query_pkg_config --libs $xen_pc)"
> > > +      QEMU_CFLAGS="$QEMU_CFLAGS $(xen_query_pkg_config --cflags
> $xen_pc)"
> > >      elif test $xen_ctrl_version -ge 40701 ; then
> > >        libs_softmmu="$xen_stable_libs $libs_softmmu"
> > >      fi
> > >
> >
Paul Durrant March 24, 2017, 7:34 p.m. UTC | #4
> -----Original Message-----
> From: Qemu-devel [mailto:qemu-devel-
> bounces+paul.durrant=citrix.com@nongnu.org] On Behalf Of Paul Durrant
> Sent: 24 March 2017 19:18
> To: 'Stefano Stabellini' <sstabellini@kernel.org>; Juergen Gross
> <jgross@suse.com>
> Cc: Anthony Perard <anthony.perard@citrix.com>; xen-
> devel@lists.xenproject.org; qemu-devel@nongnu.org
> Subject: Re: [Qemu-devel] [PATCH RESEND] xen: limit pkg-config to
> PKG_CONFIG_PATH for xen libraries
> 
> > -----Original Message-----
> > From: Stefano Stabellini [mailto:sstabellini@kernel.org]
> > Sent: 24 March 2017 19:12
> > To: Juergen Gross <jgross@suse.com>
> > Cc: Paul Durrant <Paul.Durrant@citrix.com>; qemu-devel@nongnu.org;
> xen-
> > devel@lists.xenproject.org; Anthony Perard
> <anthony.perard@citrix.com>;
> > Stefano Stabellini <sstabellini@kernel.org>
> > Subject: Re: [PATCH RESEND] xen: limit pkg-config to PKG_CONFIG_PATH
> for
> > xen libraries
> >
> > On Fri, 24 Mar 2017, Juergen Gross wrote:
> > > On 24/03/17 18:20, Paul Durrant wrote:
> > > > The Xen tools Makefile has been modified to set PKG_CONFIG_PATH
> > such that
> > > > use of pkg-config in QEMU configure finds the newly built Xen libraries.
> > > > However, because older versions of Xen do not set
> PKG_CONFIG_PATH
> > in the
> > > > Makefile, the QEMU configure script will pick up any Xen libraries that
> > may
> > > > be installed in the build system rather than the newly built ones. Thus,
> > > > if Xen 4.9 is built and installed it becomes impossible to build tools for
> > > > an older version of Xen on the same system (without manual de-
> > installtion).
> > > >
> > > > This patch modifies configure to set PKG_CONFIG_LIBDIR to empty
> when
> > > > looking for Xen libraries to ensure the search is limited only to
> > > > PKG_CONFIG_PATH. This makes sure that, for versions of Xen prior to
> > 4.9,
> > > > pkg-config fails to find the Xen libraries an approriately falls back to
> > > > previous methods of probing.
> > > >
> > > > Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >
> > Paul, thanks for spotting this. I didn't spot it because I don't have
> > Xen installed in my build environment, but we should not rely on that.
> >
> >
> > > NAK. You are breaking normal qemu build with installed Xen pkg-config
> > > files.
> >
> > The normal QEMU build, done as part of the xen-unstable build, is
> > actually done without Xen being installed in the system. So, if I am not
> > mistaken, the current mechanism also breaks the following entirely
> > legitimate scenario:
> >
> > - user has 4.9 installed on her system
> > - user git clones xen 4.10
> > - user build xen 4.10
> >   - as part of the xen build, qemu is cloned and built
> >   - the qemu configure script picks up the pkgconfig file from
> >     /usr/share and misconfigure the xen version, setting it to 4.9
> >     instead of 4.10
> >   - the qemu build fails
> > - the xen build fails
> >
> > Am I right?
> >
> 
> I think the above would actually work because the 4.10 files would be found
> before the 4.9 files. What fails is installing 4.9 and then trying to build 4.8.

I should qualify that with saying 'trying to build 4.8 with a newer QEMU (i.e. one that has a configure which knows about pkg-config).
I still think that's a legitimate use-case though.

  Paul

> 
> > Regardless, both cases need to work correctly. A lot of people rely on
> > out of tree builds, including cross-compilations and openembedded. This
> > is a regression.
> >
> > I suggest we set PKG_CONFIG_LIBDIR (or PKG_CONFIG_PATH?) to the
> right
> > place depending on where the configure script is picking up the Xen
> > header files:
> >
> > - If the configure script picks up the Xen header files from /usr/include,
> > then we want the pkgconfig dir to be /usr/share/pkgconfig.
> >
> > - If the configure script picks up the Xen header files from
> > /local/xen-unstable.git/tools/libxc/include, then we want the pkgconfig
> > dir to be local/xen-unstable.git/tools/pkg-config.
> >
> 
> Yes, that's what is needed.
> 
> > If that's too complex, we can always go back to the good old,
> > non-pkgconfig days.
> >
> 
> Unless this can be speedily resolved I think reverting the pkg-config changes
> would be best.
> 
> Another possibility perhaps would be an explicit configure flag for in-tree and
> out-of-tree builds so we can say exactly where QEMU should be getting its
> environment from?
> 
>   Paul
> 
> >
> > > > Cc: Anthony Perard <anthony.perard@citrix.com>
> > > > Cc: Stefano Stabellini <sstabellini@kernel.org>
> > > > Cc: Juergen Gross <jgross@suse.com>
> > > > ---
> > > >  configure | 12 ++++++++----
> > > >  1 file changed, 8 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/configure b/configure
> > > > index fdf47e4..6ef5980 100755
> > > > --- a/configure
> > > > +++ b/configure
> > > > @@ -1974,6 +1974,10 @@ fi
> > > >  ##########################################
> > > >  # xen probe
> > > >
> > > > +xen_query_pkg_config() {
> > > > +    PKG_CONFIG_LIBDIR= ${pkg_config_exe} "$@"
> > > > +}
> > > > +
> > > >  if test "$xen" != "no" ; then
> > > >    xen_libs="-lxenstore -lxenctrl -lxenguest"
> > > >    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
> > > > @@ -1997,9 +2001,9 @@ EOF
> > > >      xen=no
> > > >
> > > >    # Xen version via pkg-config (Xen 4.9.0 and newer)
> > > > -  elif $pkg_config --exists xencontrol ; then
> > > > +  elif xen_query_pkg_config --exists xencontrol; then
> > > >      xen_ctrl_version="$(printf '%d%02d%02d' \
> > > > -      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
> > > > +      $(xen_query_pkg_config --modversion xencontrol | sed 's/\./ /g')
> )"
> > > >      xen=yes
> > > >
> > > >    elif
> > > > @@ -2216,8 +2220,8 @@ EOF
> > > >      if test $xen_ctrl_version -ge 40900 ; then
> > > >        xen_pc="xencontrol xenstore xenguest xenforeignmemory
> > xengnttab xenevtchn"
> > > >        xen_pc="$xen_pc xendevicemodel"
> > > > -      xen_libs="$($pkg_config --libs $xen_pc)"
> > > > -      QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
> > > > +      xen_libs="$(xen_query_pkg_config --libs $xen_pc)"
> > > > +      QEMU_CFLAGS="$QEMU_CFLAGS $(xen_query_pkg_config --
> cflags
> > $xen_pc)"
> > > >      elif test $xen_ctrl_version -ge 40701 ; then
> > > >        libs_softmmu="$xen_stable_libs $libs_softmmu"
> > > >      fi
> > > >
> > >
Juergen Gross March 27, 2017, 5:45 a.m. UTC | #5
On 24/03/17 20:34, Paul Durrant wrote:
>> -----Original Message-----
>> From: Qemu-devel [mailto:qemu-devel-
>> bounces+paul.durrant=citrix.com@nongnu.org] On Behalf Of Paul Durrant
>> Sent: 24 March 2017 19:18
>> To: 'Stefano Stabellini' <sstabellini@kernel.org>; Juergen Gross
>> <jgross@suse.com>
>> Cc: Anthony Perard <anthony.perard@citrix.com>; xen-
>> devel@lists.xenproject.org; qemu-devel@nongnu.org
>> Subject: Re: [Qemu-devel] [PATCH RESEND] xen: limit pkg-config to
>> PKG_CONFIG_PATH for xen libraries
>>
>>> -----Original Message-----
>>> From: Stefano Stabellini [mailto:sstabellini@kernel.org]
>>> Sent: 24 March 2017 19:12
>>> To: Juergen Gross <jgross@suse.com>
>>> Cc: Paul Durrant <Paul.Durrant@citrix.com>; qemu-devel@nongnu.org;
>> xen-
>>> devel@lists.xenproject.org; Anthony Perard
>> <anthony.perard@citrix.com>;
>>> Stefano Stabellini <sstabellini@kernel.org>
>>> Subject: Re: [PATCH RESEND] xen: limit pkg-config to PKG_CONFIG_PATH
>> for
>>> xen libraries
>>>
>>> On Fri, 24 Mar 2017, Juergen Gross wrote:
>>>> On 24/03/17 18:20, Paul Durrant wrote:
>>>>> The Xen tools Makefile has been modified to set PKG_CONFIG_PATH
>>> such that
>>>>> use of pkg-config in QEMU configure finds the newly built Xen libraries.
>>>>> However, because older versions of Xen do not set
>> PKG_CONFIG_PATH
>>> in the
>>>>> Makefile, the QEMU configure script will pick up any Xen libraries that
>>> may
>>>>> be installed in the build system rather than the newly built ones. Thus,
>>>>> if Xen 4.9 is built and installed it becomes impossible to build tools for
>>>>> an older version of Xen on the same system (without manual de-
>>> installtion).
>>>>>
>>>>> This patch modifies configure to set PKG_CONFIG_LIBDIR to empty
>> when
>>>>> looking for Xen libraries to ensure the search is limited only to
>>>>> PKG_CONFIG_PATH. This makes sure that, for versions of Xen prior to
>>> 4.9,
>>>>> pkg-config fails to find the Xen libraries an approriately falls back to
>>>>> previous methods of probing.
>>>>>
>>>>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>>
>>> Paul, thanks for spotting this. I didn't spot it because I don't have
>>> Xen installed in my build environment, but we should not rely on that.
>>>
>>>
>>>> NAK. You are breaking normal qemu build with installed Xen pkg-config
>>>> files.
>>>
>>> The normal QEMU build, done as part of the xen-unstable build, is
>>> actually done without Xen being installed in the system. So, if I am not
>>> mistaken, the current mechanism also breaks the following entirely
>>> legitimate scenario:
>>>
>>> - user has 4.9 installed on her system
>>> - user git clones xen 4.10
>>> - user build xen 4.10
>>>   - as part of the xen build, qemu is cloned and built
>>>   - the qemu configure script picks up the pkgconfig file from
>>>     /usr/share and misconfigure the xen version, setting it to 4.9
>>>     instead of 4.10
>>>   - the qemu build fails
>>> - the xen build fails
>>>
>>> Am I right?
>>>
>>
>> I think the above would actually work because the 4.10 files would be found
>> before the 4.9 files. What fails is installing 4.9 and then trying to build 4.8.
> 
> I should qualify that with saying 'trying to build 4.8 with a newer QEMU (i.e. one that has a configure which knows about pkg-config).
> I still think that's a legitimate use-case though.

To sum it up we have to care about the following scenarios:

a) Xen in-tree build, Xen >= 4.9
b) Xen in-tree build, Xen < 4.9
c) build out-of-Xen-tree

combined with any of:

1) no Xen installed on build machine
2) Xen >= 4.9 installed
3) Xen < 4.9 installed

1) + c) is not supported, all other combinations should work.

I suggest the following modifications of my patch:

- keep the test program for detection of Xen 4.9
- scan the extra ldflags for special mentioning of tools/libxc
  to detect Xen in-tree build < 4.9 (will detect 4.9, too, but
  this is no problem), set xen_in_tree_old if found
- if xen_in_tree_old found, don't use pkg-config for Xen version
  detection and flags
- otherwise try pkg-config first

This should cover all cases we need.


Juergen
Paul Durrant March 27, 2017, 8:01 a.m. UTC | #6
> -----Original Message-----
[snip]
> 
> To sum it up we have to care about the following scenarios:
> 
> a) Xen in-tree build, Xen >= 4.9
> b) Xen in-tree build, Xen < 4.9
> c) build out-of-Xen-tree
> 
> combined with any of:
> 
> 1) no Xen installed on build machine
> 2) Xen >= 4.9 installed
> 3) Xen < 4.9 installed
> 
> 1) + c) is not supported, all other combinations should work.
> 

Good summary.

> I suggest the following modifications of my patch:
> 
> - keep the test program for detection of Xen 4.9
> - scan the extra ldflags for special mentioning of tools/libxc
>   to detect Xen in-tree build < 4.9 (will detect 4.9, too, but
>   this is no problem), set xen_in_tree_old if found
> - if xen_in_tree_old found, don't use pkg-config for Xen version
>   detection and flags
> - otherwise try pkg-config first
> 
> This should cover all cases we need.
> 

That sounds plausible.

Thanks,

  Paul

> 
> Juergen
diff mbox

Patch

diff --git a/configure b/configure
index fdf47e4..6ef5980 100755
--- a/configure
+++ b/configure
@@ -1974,6 +1974,10 @@  fi
 ##########################################
 # xen probe
 
+xen_query_pkg_config() {
+    PKG_CONFIG_LIBDIR= ${pkg_config_exe} "$@"
+}
+
 if test "$xen" != "no" ; then
   xen_libs="-lxenstore -lxenctrl -lxenguest"
   xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
@@ -1997,9 +2001,9 @@  EOF
     xen=no
 
   # Xen version via pkg-config (Xen 4.9.0 and newer)
-  elif $pkg_config --exists xencontrol ; then
+  elif xen_query_pkg_config --exists xencontrol; then
     xen_ctrl_version="$(printf '%d%02d%02d' \
-      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
+      $(xen_query_pkg_config --modversion xencontrol | sed 's/\./ /g') )"
     xen=yes
 
   elif
@@ -2216,8 +2220,8 @@  EOF
     if test $xen_ctrl_version -ge 40900 ; then
       xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab xenevtchn"
       xen_pc="$xen_pc xendevicemodel"
-      xen_libs="$($pkg_config --libs $xen_pc)"
-      QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
+      xen_libs="$(xen_query_pkg_config --libs $xen_pc)"
+      QEMU_CFLAGS="$QEMU_CFLAGS $(xen_query_pkg_config --cflags $xen_pc)"
     elif test $xen_ctrl_version -ge 40701 ; then
       libs_softmmu="$xen_stable_libs $libs_softmmu"
     fi