vbox: Let configure detect/set the XPCOMC directory

This allows the user to give an explicit path to configure

  ./configure --with-vbox=/path/to/virtualbox

instead of having the VirtualBox driver probe a set of possible
paths at runtime. If no explicit path is specified then configure
probes the set of "known" paths.

https://bugzilla.redhat.com/show_bug.cgi?id=609185
This commit is contained in:
Matthias Bolte 2010-06-29 20:01:45 +02:00
parent ed005221ff
commit df90ca7661
2 changed files with 64 additions and 23 deletions

View File

@ -232,7 +232,9 @@ AC_ARG_WITH([phyp],
AC_ARG_WITH([xenapi],
AC_HELP_STRING([--with-xenapi], [add XenAPI support @<:@default=check@:>@]),[],[with_xenapi=check])
AC_ARG_WITH([vbox],
AC_HELP_STRING([--with-vbox], [add VirtualBox support @<:@default=yes@:>@]),[],[with_vbox=yes])
AC_HELP_STRING([--with-vbox=@<:@PFX@:>@],
[VirtualBox XPCOMC location @<:@default=check@:>@]),[],
[with_vbox=check])
AC_ARG_WITH([lxc],
AC_HELP_STRING([--with-lxc], [add Linux Container support @<:@default=check@:>@]),[],[with_lxc=check])
AC_ARG_WITH([one],
@ -315,6 +317,62 @@ if test "$with_openvz" = "yes"; then
fi
AM_CONDITIONAL([WITH_OPENVZ], [test "$with_openvz" = "yes"])
dnl
dnl check for VirtualBox XPCOMC location
dnl
vbox_xpcomc_dir=
if test "x$with_vbox" = "xyes" || test "x$with_vbox" = "xcheck"; then
AC_MSG_CHECKING([for VirtualBox XPCOMC location])
for vbox in \
/usr/lib/virtualbox/VBoxXPCOMC.so \
/usr/lib/VirtualBox/VBoxXPCOMC.so \
/opt/virtualbox/VBoxXPCOMC.so \
/opt/VirtualBox/VBoxXPCOMC.so \
/opt/virtualbox/i386/VBoxXPCOMC.so \
/opt/VirtualBox/i386/VBoxXPCOMC.so \
/opt/virtualbox/amd64/VBoxXPCOMC.so \
/opt/VirtualBox/amd64/VBoxXPCOMC.so \
/usr/local/lib/virtualbox/VBoxXPCOMC.so \
/usr/local/lib/VirtualBox/VBoxXPCOMC.so \
/Application/VirtualBox.app/Contents/MacOS/VBoxXPCOMC.dylib \
; do
if test -f "$vbox"; then
vbox_xpcomc_dir=`AS_DIRNAME(["$vbox"])`
break
fi
done
if test -n "$vbox_xpcomc_dir"; then
AC_MSG_RESULT([$vbox_xpcomc_dir])
with_vbox=yes
else
if test "x$with_vbox" = "xcheck"; then
AC_MSG_RESULT([not found, disabling VirtualBox driver])
with_vbox=no
else
AC_MSG_RESULT([not found])
AC_MSG_ERROR([VirtualBox XPCOMC is required for the VirtualBox driver])
fi
fi
else
if test "x$with_vbox" != "xno"; then
if test -f ${with_vbox}/VBoxXPCOMC.so || \
test -f ${with_vbox}/VBoxXPCOMC.dylib; then
vbox_xpcomc_dir=$with_vbox
with_vbox=yes
else
AC_MSG_ERROR([$with_vbox does not contain VirtualBox XPCOMC])
fi
fi
fi
AC_DEFINE_UNQUOTED([VBOX_XPCOMC_DIR], ["$vbox_xpcomc_dir"],
[Location of directory containing VirtualBox XPCOMC library])
if test "x$with_vbox" = "xyes"; then
AC_SEARCH_LIBS([dlopen], [dl], [], [AC_MSG_ERROR([Unable to find dlopen()])])
case $ac_cv_search_dlopen in

View File

@ -29,9 +29,8 @@
/*******************************************************************************
* Header Files *
*******************************************************************************/
#ifdef LIBVIRT_VERSION
# include <config.h>
#endif /* LIBVIRT_VERSION */
#include <config.h>
#include <stdio.h>
#include <string.h>
@ -192,28 +191,12 @@ int VBoxCGlueInit(void)
return tryLoadOne(pszHome, 0);
/*
* Try the known standard locations.
* Try the configured location.
*/
g_szVBoxErrMsg[0] = '\0';
#if defined(__gnu__linux__) || defined(__linux__)
if (tryLoadOne("/opt/VirtualBox", 1) == 0)
if (tryLoadOne(VBOX_XPCOMC_DIR, 1) == 0)
return 0;
if (tryLoadOne("/usr/lib/virtualbox", 1) == 0)
return 0;
#elif defined(__sun__)
if (tryLoadOne("/opt/VirtualBox/amd64", 1) == 0)
return 0;
if (tryLoadOne("/opt/VirtualBox/i386", 1) == 0)
return 0;
#elif defined(__APPLE__)
if (tryLoadOne("/Application/VirtualBox.app/Contents/MacOS", 1) == 0)
return 0;
#elif defined(__FreeBSD__)
if (tryLoadOne("/usr/local/lib/virtualbox", 1) == 0)
return 0;
#else
# error "port me"
#endif
/*
* Finally try the dynamic linker search path.