Message ID | 20170327074245.3821-1-jgross@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> -----Original Message----- > From: Juergen Gross [mailto:jgross@suse.com] > Sent: 27 March 2017 08:43 > To: qemu-devel@nongnu.org; xen-devel@lists.xenproject.org > Cc: Anthony Perard <anthony.perard@citrix.com>; kraxel@redhat.com; > sstabellini@kernel.org; Paul Durrant <Paul.Durrant@citrix.com>; Juergen > Gross <jgross@suse.com> > Subject: [PATCH v2] configure: use pkg-config for obtaining xen version > > Instead of trying to guess the Xen version to use by compiling various > test programs first just ask the system via pkg-config. Only if it > can't return the version fall back to the test program scheme. > > If configure is being called with dedicated flags for the Xen libraries > use those instead of the pkg-config output. This will avoid breaking > an in-tree Xen build of an old Xen version while a new Xen version is > installed on the build machine: pkg-config would pick up the installed > Xen config files as the Xen tree wouldn't contain any of them. > > Signed-off-by: Juergen Gross <jgross@suse.com> > --- > V2: - use pkg-config only if no Xen library paths have been specified via > --extra-ldflags > - keep test program for detecting Xen 4.9 This all looks plausible but it doesn't seem to be working for me when trying to build 4.8. I'm still getting a xen ctrl version of 40900... still trying to figure out why. Also, the whitespace changes later on in the patch should probably be split out. Paul > --- > configure | 155 ++++++++++++++++++++++++++++++++++-------------------- > -------- > 1 file changed, 86 insertions(+), 69 deletions(-) > > diff --git a/configure b/configure > index aabf098..c34b025 100755 > --- a/configure > +++ b/configure > @@ -1962,30 +1962,46 @@ fi > # xen probe > > if test "$xen" != "no" ; then > - xen_libs="-lxenstore -lxenctrl -lxenguest" > - xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" > + # Check whether Xen library path is specified via --extra-ldflags to avoid > + # overriding this setting with pkg-config output. If not, try pkg-config > + # to obtain all needed flags. > > - # First we test whether Xen headers and libraries are available. > - # If no, we are done and there is no Xen support. > - # If yes, more tests are run to detect the Xen version. > + if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ > + $pkg_config --exists xencontrol ; then > + xen_ctrl_version="$(printf '%d%02d%02d' \ > + $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" > + xen=yes > + xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" > + xen_pc="$xen_pc xenevtchn xendevicemodel" > + QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" > + libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" > + LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS" > + else > > - # Xen (any) > - cat > $TMPC <<EOF > + xen_libs="-lxenstore -lxenctrl -lxenguest" > + xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" > + > + # First we test whether Xen headers and libraries are available. > + # If no, we are done and there is no Xen support. > + # If yes, more tests are run to detect the Xen version. > + > + # Xen (any) > + cat > $TMPC <<EOF > #include <xenctrl.h> > int main(void) { > return 0; > } > EOF > - if ! compile_prog "" "$xen_libs" ; then > - # Xen not found > - if test "$xen" = "yes" ; then > - feature_not_found "xen" "Install xen devel" > - fi > - xen=no > + if ! compile_prog "" "$xen_libs" ; then > + # Xen not found > + if test "$xen" = "yes" ; then > + feature_not_found "xen" "Install xen devel" > + fi > + xen=no > > - # Xen unstable > - elif > - cat > $TMPC <<EOF && > + # Xen unstable > + elif > + cat > $TMPC <<EOF && > #undef XC_WANT_COMPAT_DEVICEMODEL_API > #define __XEN_TOOLS__ > #include <xendevicemodel.h> > @@ -1998,13 +2014,13 @@ int main(void) { > return 0; > } > EOF > - compile_prog "" "$xen_libs $xen_stable_libs -lxendevicemodel" > - then > - xen_stable_libs="$xen_stable_libs -lxendevicemodel" > - xen_ctrl_version=40900 > - xen=yes > - elif > - cat > $TMPC <<EOF && > + compile_prog "" "$xen_libs $xen_stable_libs -lxendevicemodel" > + then > + xen_stable_libs="$xen_stable_libs -lxendevicemodel" > + xen_ctrl_version=40900 > + xen=yes > + elif > + cat > $TMPC <<EOF && > /* > * If we have stable libs the we don't want the libxc compat > * layers, regardless of what CFLAGS we may have been given. > @@ -2054,12 +2070,12 @@ int main(void) { > return 0; > } > EOF > - compile_prog "" "$xen_libs $xen_stable_libs" > - then > - xen_ctrl_version=40800 > - xen=yes > - elif > - cat > $TMPC <<EOF && > + compile_prog "" "$xen_libs $xen_stable_libs" > + then > + xen_ctrl_version=40800 > + xen=yes > + elif > + cat > $TMPC <<EOF && > /* > * If we have stable libs the we don't want the libxc compat > * layers, regardless of what CFLAGS we may have been given. > @@ -2105,12 +2121,12 @@ int main(void) { > return 0; > } > EOF > - compile_prog "" "$xen_libs $xen_stable_libs" > - then > - xen_ctrl_version=40701 > - xen=yes > - elif > - cat > $TMPC <<EOF && > + compile_prog "" "$xen_libs $xen_stable_libs" > + then > + xen_ctrl_version=40701 > + xen=yes > + elif > + cat > $TMPC <<EOF && > #include <xenctrl.h> > #include <stdint.h> > int main(void) { > @@ -2120,14 +2136,14 @@ int main(void) { > return 0; > } > EOF > - compile_prog "" "$xen_libs" > - then > - xen_ctrl_version=40700 > - xen=yes > + compile_prog "" "$xen_libs" > + then > + xen_ctrl_version=40700 > + xen=yes > > - # Xen 4.6 > - elif > - cat > $TMPC <<EOF && > + # Xen 4.6 > + elif > + cat > $TMPC <<EOF && > #include <xenctrl.h> > #include <xenstore.h> > #include <stdint.h> > @@ -2148,14 +2164,14 @@ int main(void) { > return 0; > } > EOF > - compile_prog "" "$xen_libs" > - then > - xen_ctrl_version=40600 > - xen=yes > + compile_prog "" "$xen_libs" > + then > + xen_ctrl_version=40600 > + xen=yes > > - # Xen 4.5 > - elif > - cat > $TMPC <<EOF && > + # Xen 4.5 > + elif > + cat > $TMPC <<EOF && > #include <xenctrl.h> > #include <xenstore.h> > #include <stdint.h> > @@ -2175,13 +2191,13 @@ int main(void) { > return 0; > } > EOF > - compile_prog "" "$xen_libs" > - then > - xen_ctrl_version=40500 > - xen=yes > + compile_prog "" "$xen_libs" > + then > + xen_ctrl_version=40500 > + xen=yes > > - elif > - cat > $TMPC <<EOF && > + elif > + cat > $TMPC <<EOF && > #include <xenctrl.h> > #include <xenstore.h> > #include <stdint.h> > @@ -2200,24 +2216,25 @@ int main(void) { > return 0; > } > EOF > - compile_prog "" "$xen_libs" > - then > - xen_ctrl_version=40200 > - xen=yes > + compile_prog "" "$xen_libs" > + then > + xen_ctrl_version=40200 > + xen=yes > > - else > - if test "$xen" = "yes" ; then > - feature_not_found "xen (unsupported version)" \ > - "Install a supported xen (xen 4.2 or newer)" > + else > + if test "$xen" = "yes" ; then > + feature_not_found "xen (unsupported version)" \ > + "Install a supported xen (xen 4.2 or newer)" > + fi > + xen=no > fi > - xen=no > - fi > > - if test "$xen" = yes; then > - if test $xen_ctrl_version -ge 40701 ; then > - libs_softmmu="$xen_stable_libs $libs_softmmu" > + if test "$xen" = yes; then > + if test $xen_ctrl_version -ge 40701 ; then > + libs_softmmu="$xen_stable_libs $libs_softmmu" > + fi > + libs_softmmu="$xen_libs $libs_softmmu" > fi > - libs_softmmu="$xen_libs $libs_softmmu" > fi > fi > > -- > 2.10.2
On 27/03/17 11:07, Paul Durrant wrote: >> -----Original Message----- >> From: Juergen Gross [mailto:jgross@suse.com] >> Sent: 27 March 2017 08:43 >> To: qemu-devel@nongnu.org; xen-devel@lists.xenproject.org >> Cc: Anthony Perard <anthony.perard@citrix.com>; kraxel@redhat.com; >> sstabellini@kernel.org; Paul Durrant <Paul.Durrant@citrix.com>; Juergen >> Gross <jgross@suse.com> >> Subject: [PATCH v2] configure: use pkg-config for obtaining xen version >> >> Instead of trying to guess the Xen version to use by compiling various >> test programs first just ask the system via pkg-config. Only if it >> can't return the version fall back to the test program scheme. >> >> If configure is being called with dedicated flags for the Xen libraries >> use those instead of the pkg-config output. This will avoid breaking >> an in-tree Xen build of an old Xen version while a new Xen version is >> installed on the build machine: pkg-config would pick up the installed >> Xen config files as the Xen tree wouldn't contain any of them. >> >> Signed-off-by: Juergen Gross <jgross@suse.com> >> --- >> V2: - use pkg-config only if no Xen library paths have been specified via >> --extra-ldflags >> - keep test program for detecting Xen 4.9 > > This all looks plausible but it doesn't seem to be working for me when trying to build 4.8. I'm still getting a xen ctrl version of 40900... still trying to figure out why. I suppose you reverted my previous patch? Do you happen to have some stale 4.9 libraries in your Xen tree? What happens without this patch? > Also, the whitespace changes later on in the patch should probably be split out. Hmm, those are just due to the nesting level of the if's changed. I don't think they can easily be split out without having a malformed indentation. Juergen
> -----Original Message----- > From: Juergen Gross [mailto:jgross@suse.com] > Sent: 27 March 2017 10:15 > To: Paul Durrant <Paul.Durrant@citrix.com>; qemu-devel@nongnu.org; xen- > devel@lists.xenproject.org > Cc: Anthony Perard <anthony.perard@citrix.com>; kraxel@redhat.com; > sstabellini@kernel.org > Subject: Re: [PATCH v2] configure: use pkg-config for obtaining xen version > > On 27/03/17 11:07, Paul Durrant wrote: > >> -----Original Message----- > >> From: Juergen Gross [mailto:jgross@suse.com] > >> Sent: 27 March 2017 08:43 > >> To: qemu-devel@nongnu.org; xen-devel@lists.xenproject.org > >> Cc: Anthony Perard <anthony.perard@citrix.com>; kraxel@redhat.com; > >> sstabellini@kernel.org; Paul Durrant <Paul.Durrant@citrix.com>; Juergen > >> Gross <jgross@suse.com> > >> Subject: [PATCH v2] configure: use pkg-config for obtaining xen version > >> > >> Instead of trying to guess the Xen version to use by compiling various > >> test programs first just ask the system via pkg-config. Only if it > >> can't return the version fall back to the test program scheme. > >> > >> If configure is being called with dedicated flags for the Xen libraries > >> use those instead of the pkg-config output. This will avoid breaking > >> an in-tree Xen build of an old Xen version while a new Xen version is > >> installed on the build machine: pkg-config would pick up the installed > >> Xen config files as the Xen tree wouldn't contain any of them. > >> > >> Signed-off-by: Juergen Gross <jgross@suse.com> > >> --- > >> V2: - use pkg-config only if no Xen library paths have been specified via > >> --extra-ldflags > >> - keep test program for detecting Xen 4.9 > > > > This all looks plausible but it doesn't seem to be working for me when > trying to build 4.8. I'm still getting a xen ctrl version of 40900... still trying to > figure out why. > > I suppose you reverted my previous patch? > Yes, I reverted that then applied this one. > Do you happen to have some stale 4.9 libraries in your Xen tree? > Yes, it was picking up a libxendevicemodel when it should not have been. It would be handy if the probe compilations used --nostdlib, but that's not regression introduced by your patch. Now that pkg-config is used for out-of-tree builds I guess it may be possible to add that though. > What happens without this patch? > > > Also, the whitespace changes later on in the patch should probably be split > out. > > Hmm, those are just due to the nesting level of the if's changed. > I don't think they can easily be split out without having a > malformed indentation. > Ok, I see that now I look at the code rather than just the patch. So, having fixed my linkage issue... Tested-by: Paul Durrant <paul.durrant@citrix.com> > > Juergen
On Mon, 27 Mar 2017, Paul Durrant wrote: > > -----Original Message----- > > From: Juergen Gross [mailto:jgross@suse.com] > > Sent: 27 March 2017 10:15 > > To: Paul Durrant <Paul.Durrant@citrix.com>; qemu-devel@nongnu.org; xen- > > devel@lists.xenproject.org > > Cc: Anthony Perard <anthony.perard@citrix.com>; kraxel@redhat.com; > > sstabellini@kernel.org > > Subject: Re: [PATCH v2] configure: use pkg-config for obtaining xen version > > > > On 27/03/17 11:07, Paul Durrant wrote: > > >> -----Original Message----- > > >> From: Juergen Gross [mailto:jgross@suse.com] > > >> Sent: 27 March 2017 08:43 > > >> To: qemu-devel@nongnu.org; xen-devel@lists.xenproject.org > > >> Cc: Anthony Perard <anthony.perard@citrix.com>; kraxel@redhat.com; > > >> sstabellini@kernel.org; Paul Durrant <Paul.Durrant@citrix.com>; Juergen > > >> Gross <jgross@suse.com> > > >> Subject: [PATCH v2] configure: use pkg-config for obtaining xen version > > >> > > >> Instead of trying to guess the Xen version to use by compiling various > > >> test programs first just ask the system via pkg-config. Only if it > > >> can't return the version fall back to the test program scheme. > > >> > > >> If configure is being called with dedicated flags for the Xen libraries > > >> use those instead of the pkg-config output. This will avoid breaking > > >> an in-tree Xen build of an old Xen version while a new Xen version is > > >> installed on the build machine: pkg-config would pick up the installed > > >> Xen config files as the Xen tree wouldn't contain any of them. > > >> > > >> Signed-off-by: Juergen Gross <jgross@suse.com> > > >> --- > > >> V2: - use pkg-config only if no Xen library paths have been specified via > > >> --extra-ldflags > > >> - keep test program for detecting Xen 4.9 > > > > > > This all looks plausible but it doesn't seem to be working for me when > > trying to build 4.8. I'm still getting a xen ctrl version of 40900... still trying to > > figure out why. > > > > I suppose you reverted my previous patch? > > > > Yes, I reverted that then applied this one. > > > Do you happen to have some stale 4.9 libraries in your Xen tree? > > > > Yes, it was picking up a libxendevicemodel when it should not have been. It would be handy if the probe compilations used --nostdlib, but that's not regression introduced by your patch. Now that pkg-config is used for out-of-tree builds I guess it may be possible to add that though. > > > What happens without this patch? > > > > > Also, the whitespace changes later on in the patch should probably be split > > out. > > > > Hmm, those are just due to the nesting level of the if's changed. > > I don't think they can easily be split out without having a > > malformed indentation. > > > > Ok, I see that now I look at the code rather than just the patch. So, having fixed my linkage issue... > > Tested-by: Paul Durrant <paul.durrant@citrix.com> Yes, that works. Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
diff --git a/configure b/configure index aabf098..c34b025 100755 --- a/configure +++ b/configure @@ -1962,30 +1962,46 @@ fi # xen probe if test "$xen" != "no" ; then - xen_libs="-lxenstore -lxenctrl -lxenguest" - xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" + # Check whether Xen library path is specified via --extra-ldflags to avoid + # overriding this setting with pkg-config output. If not, try pkg-config + # to obtain all needed flags. - # First we test whether Xen headers and libraries are available. - # If no, we are done and there is no Xen support. - # If yes, more tests are run to detect the Xen version. + if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ + $pkg_config --exists xencontrol ; then + xen_ctrl_version="$(printf '%d%02d%02d' \ + $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" + xen=yes + xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" + xen_pc="$xen_pc xenevtchn xendevicemodel" + QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" + libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" + LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS" + else - # Xen (any) - cat > $TMPC <<EOF + xen_libs="-lxenstore -lxenctrl -lxenguest" + xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" + + # First we test whether Xen headers and libraries are available. + # If no, we are done and there is no Xen support. + # If yes, more tests are run to detect the Xen version. + + # Xen (any) + cat > $TMPC <<EOF #include <xenctrl.h> int main(void) { return 0; } EOF - if ! compile_prog "" "$xen_libs" ; then - # Xen not found - if test "$xen" = "yes" ; then - feature_not_found "xen" "Install xen devel" - fi - xen=no + if ! compile_prog "" "$xen_libs" ; then + # Xen not found + if test "$xen" = "yes" ; then + feature_not_found "xen" "Install xen devel" + fi + xen=no - # Xen unstable - elif - cat > $TMPC <<EOF && + # Xen unstable + elif + cat > $TMPC <<EOF && #undef XC_WANT_COMPAT_DEVICEMODEL_API #define __XEN_TOOLS__ #include <xendevicemodel.h> @@ -1998,13 +2014,13 @@ int main(void) { return 0; } EOF - compile_prog "" "$xen_libs $xen_stable_libs -lxendevicemodel" - then - xen_stable_libs="$xen_stable_libs -lxendevicemodel" - xen_ctrl_version=40900 - xen=yes - elif - cat > $TMPC <<EOF && + compile_prog "" "$xen_libs $xen_stable_libs -lxendevicemodel" + then + xen_stable_libs="$xen_stable_libs -lxendevicemodel" + xen_ctrl_version=40900 + xen=yes + elif + cat > $TMPC <<EOF && /* * If we have stable libs the we don't want the libxc compat * layers, regardless of what CFLAGS we may have been given. @@ -2054,12 +2070,12 @@ int main(void) { return 0; } EOF - compile_prog "" "$xen_libs $xen_stable_libs" - then - xen_ctrl_version=40800 - xen=yes - elif - cat > $TMPC <<EOF && + compile_prog "" "$xen_libs $xen_stable_libs" + then + xen_ctrl_version=40800 + xen=yes + elif + cat > $TMPC <<EOF && /* * If we have stable libs the we don't want the libxc compat * layers, regardless of what CFLAGS we may have been given. @@ -2105,12 +2121,12 @@ int main(void) { return 0; } EOF - compile_prog "" "$xen_libs $xen_stable_libs" - then - xen_ctrl_version=40701 - xen=yes - elif - cat > $TMPC <<EOF && + compile_prog "" "$xen_libs $xen_stable_libs" + then + xen_ctrl_version=40701 + xen=yes + elif + cat > $TMPC <<EOF && #include <xenctrl.h> #include <stdint.h> int main(void) { @@ -2120,14 +2136,14 @@ int main(void) { return 0; } EOF - compile_prog "" "$xen_libs" - then - xen_ctrl_version=40700 - xen=yes + compile_prog "" "$xen_libs" + then + xen_ctrl_version=40700 + xen=yes - # Xen 4.6 - elif - cat > $TMPC <<EOF && + # Xen 4.6 + elif + cat > $TMPC <<EOF && #include <xenctrl.h> #include <xenstore.h> #include <stdint.h> @@ -2148,14 +2164,14 @@ int main(void) { return 0; } EOF - compile_prog "" "$xen_libs" - then - xen_ctrl_version=40600 - xen=yes + compile_prog "" "$xen_libs" + then + xen_ctrl_version=40600 + xen=yes - # Xen 4.5 - elif - cat > $TMPC <<EOF && + # Xen 4.5 + elif + cat > $TMPC <<EOF && #include <xenctrl.h> #include <xenstore.h> #include <stdint.h> @@ -2175,13 +2191,13 @@ int main(void) { return 0; } EOF - compile_prog "" "$xen_libs" - then - xen_ctrl_version=40500 - xen=yes + compile_prog "" "$xen_libs" + then + xen_ctrl_version=40500 + xen=yes - elif - cat > $TMPC <<EOF && + elif + cat > $TMPC <<EOF && #include <xenctrl.h> #include <xenstore.h> #include <stdint.h> @@ -2200,24 +2216,25 @@ int main(void) { return 0; } EOF - compile_prog "" "$xen_libs" - then - xen_ctrl_version=40200 - xen=yes + compile_prog "" "$xen_libs" + then + xen_ctrl_version=40200 + xen=yes - else - if test "$xen" = "yes" ; then - feature_not_found "xen (unsupported version)" \ - "Install a supported xen (xen 4.2 or newer)" + else + if test "$xen" = "yes" ; then + feature_not_found "xen (unsupported version)" \ + "Install a supported xen (xen 4.2 or newer)" + fi + xen=no fi - xen=no - fi - if test "$xen" = yes; then - if test $xen_ctrl_version -ge 40701 ; then - libs_softmmu="$xen_stable_libs $libs_softmmu" + if test "$xen" = yes; then + if test $xen_ctrl_version -ge 40701 ; then + libs_softmmu="$xen_stable_libs $libs_softmmu" + fi + libs_softmmu="$xen_libs $libs_softmmu" fi - libs_softmmu="$xen_libs $libs_softmmu" fi fi
Instead of trying to guess the Xen version to use by compiling various test programs first just ask the system via pkg-config. Only if it can't return the version fall back to the test program scheme. If configure is being called with dedicated flags for the Xen libraries use those instead of the pkg-config output. This will avoid breaking an in-tree Xen build of an old Xen version while a new Xen version is installed on the build machine: pkg-config would pick up the installed Xen config files as the Xen tree wouldn't contain any of them. Signed-off-by: Juergen Gross <jgross@suse.com> --- V2: - use pkg-config only if no Xen library paths have been specified via --extra-ldflags - keep test program for detecting Xen 4.9 --- configure | 155 ++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 86 insertions(+), 69 deletions(-)