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>
Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
Tested-by: Paul Durrant <paul.durrant@citrix.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
Juergen Gross 2017-03-27 09:42:45 +02:00 committed by Stefano Stabellini
parent 14d015b6fc
commit c1cdd9d5be

155
configure vendored
View File

@ -1975,30 +1975,46 @@ fi
# xen probe # xen probe
if test "$xen" != "no" ; then if test "$xen" != "no" ; then
xen_libs="-lxenstore -lxenctrl -lxenguest" # Check whether Xen library path is specified via --extra-ldflags to avoid
xen_stable_libs="-lxencall -lxenforeignmemory -lxengnttab -lxenevtchn" # 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 ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
# If no, we are done and there is no Xen support. $pkg_config --exists xencontrol ; then
# If yes, more tests are run to detect the Xen version. 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) xen_libs="-lxenstore -lxenctrl -lxenguest"
cat > $TMPC <<EOF xen_stable_libs="-lxencall -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> #include <xenctrl.h>
int main(void) { int main(void) {
return 0; return 0;
} }
EOF EOF
if ! compile_prog "" "$xen_libs" ; then if ! compile_prog "" "$xen_libs" ; then
# Xen not found # Xen not found
if test "$xen" = "yes" ; then if test "$xen" = "yes" ; then
feature_not_found "xen" "Install xen devel" feature_not_found "xen" "Install xen devel"
fi fi
xen=no xen=no
# Xen unstable # Xen unstable
elif elif
cat > $TMPC <<EOF && cat > $TMPC <<EOF &&
#undef XC_WANT_COMPAT_DEVICEMODEL_API #undef XC_WANT_COMPAT_DEVICEMODEL_API
#define __XEN_TOOLS__ #define __XEN_TOOLS__
#include <xendevicemodel.h> #include <xendevicemodel.h>
@ -2011,13 +2027,13 @@ int main(void) {
return 0; return 0;
} }
EOF EOF
compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
then then
xen_stable_libs="-lxendevicemodel $xen_stable_libs" xen_stable_libs="-lxendevicemodel $xen_stable_libs"
xen_ctrl_version=40900 xen_ctrl_version=40900
xen=yes xen=yes
elif elif
cat > $TMPC <<EOF && cat > $TMPC <<EOF &&
/* /*
* If we have stable libs the we don't want the libxc compat * If we have stable libs the we don't want the libxc compat
* layers, regardless of what CFLAGS we may have been given. * layers, regardless of what CFLAGS we may have been given.
@ -2067,12 +2083,12 @@ int main(void) {
return 0; return 0;
} }
EOF EOF
compile_prog "" "$xen_libs $xen_stable_libs" compile_prog "" "$xen_libs $xen_stable_libs"
then then
xen_ctrl_version=40800 xen_ctrl_version=40800
xen=yes xen=yes
elif elif
cat > $TMPC <<EOF && cat > $TMPC <<EOF &&
/* /*
* If we have stable libs the we don't want the libxc compat * If we have stable libs the we don't want the libxc compat
* layers, regardless of what CFLAGS we may have been given. * layers, regardless of what CFLAGS we may have been given.
@ -2118,12 +2134,12 @@ int main(void) {
return 0; return 0;
} }
EOF EOF
compile_prog "" "$xen_libs $xen_stable_libs" compile_prog "" "$xen_libs $xen_stable_libs"
then then
xen_ctrl_version=40701 xen_ctrl_version=40701
xen=yes xen=yes
elif elif
cat > $TMPC <<EOF && cat > $TMPC <<EOF &&
#include <xenctrl.h> #include <xenctrl.h>
#include <stdint.h> #include <stdint.h>
int main(void) { int main(void) {
@ -2133,14 +2149,14 @@ int main(void) {
return 0; return 0;
} }
EOF EOF
compile_prog "" "$xen_libs" compile_prog "" "$xen_libs"
then then
xen_ctrl_version=40700 xen_ctrl_version=40700
xen=yes xen=yes
# Xen 4.6 # Xen 4.6
elif elif
cat > $TMPC <<EOF && cat > $TMPC <<EOF &&
#include <xenctrl.h> #include <xenctrl.h>
#include <xenstore.h> #include <xenstore.h>
#include <stdint.h> #include <stdint.h>
@ -2161,14 +2177,14 @@ int main(void) {
return 0; return 0;
} }
EOF EOF
compile_prog "" "$xen_libs" compile_prog "" "$xen_libs"
then then
xen_ctrl_version=40600 xen_ctrl_version=40600
xen=yes xen=yes
# Xen 4.5 # Xen 4.5
elif elif
cat > $TMPC <<EOF && cat > $TMPC <<EOF &&
#include <xenctrl.h> #include <xenctrl.h>
#include <xenstore.h> #include <xenstore.h>
#include <stdint.h> #include <stdint.h>
@ -2188,13 +2204,13 @@ int main(void) {
return 0; return 0;
} }
EOF EOF
compile_prog "" "$xen_libs" compile_prog "" "$xen_libs"
then then
xen_ctrl_version=40500 xen_ctrl_version=40500
xen=yes xen=yes
elif elif
cat > $TMPC <<EOF && cat > $TMPC <<EOF &&
#include <xenctrl.h> #include <xenctrl.h>
#include <xenstore.h> #include <xenstore.h>
#include <stdint.h> #include <stdint.h>
@ -2213,24 +2229,25 @@ int main(void) {
return 0; return 0;
} }
EOF EOF
compile_prog "" "$xen_libs" compile_prog "" "$xen_libs"
then then
xen_ctrl_version=40200 xen_ctrl_version=40200
xen=yes xen=yes
else else
if test "$xen" = "yes" ; then if test "$xen" = "yes" ; then
feature_not_found "xen (unsupported version)" \ feature_not_found "xen (unsupported version)" \
"Install a supported xen (xen 4.2 or newer)" "Install a supported xen (xen 4.2 or newer)"
fi
xen=no
fi fi
xen=no
fi
if test "$xen" = yes; then if test "$xen" = yes; then
if test $xen_ctrl_version -ge 40701 ; then if test $xen_ctrl_version -ge 40701 ; then
libs_softmmu="$xen_stable_libs $libs_softmmu" libs_softmmu="$xen_stable_libs $libs_softmmu"
fi
libs_softmmu="$xen_libs $libs_softmmu"
fi fi
libs_softmmu="$xen_libs $libs_softmmu"
fi fi
fi fi