Il 14/02/2013 07:10, Tomoki Sekiyama ha scritto: > To enable VSS support in qemu-ga for Windows, header files included in > VSS SDK is required. > The VSS support is enabled when the option like below: > ./configure --with-vss-sdk="/pass/to/VSS SDK" > > VSS SDK is available from: > http://www.microsoft.com/en-us/download/details.aspx?id=23490 > > To cross-compilie using mingw32 for Linux, you need to setup the SDK on > Windows environments to extract headers. You can also use wine to run the > setup of SDK on Linux etc.
You can also use msitools (https://live.gnome.org/msitools; right now they are not packaged for any distro, but will be in Fedora soon): ----- #! /bin/bash # extract-vsssdk-headers # Author: Paolo Bonzini <pbonz...@redhat.com> set -e if test $# = 0 || ! test -f "$1"; then echo 'Usage: extract-vsssdk-headers /path/to/setup.exe exit 1 fi # Extract .MSI file in the .exe, looking for the OLE compound # document signature. Extra data at the end does not matter. export LC_ALL=C MAGIC=$'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1' offset=`grep -abom1 "$MAGIC" setup.exe | sed -n 's/:/\n/; P' ` (dd of=/dev/null skip=$offset bs=1 count=0; cat) < "$1" > vsssdk.msi # Now extract the files. tmpdir=tmp$$ mkdir $tmpdir msiextract -C $tmpdir vsssdk.msi mv "$tmpdir/Program Files/Microsoft/VSSSDK72/inc" inc rm -rf $tmpdir vsssdk.msi exit 0 ----- Can you add this in scripts/extract-vsssdk-headers please? > ########################################## > +# check if we have VSS SDK headers for win > + > +if test "$mingw32" = "yes" -a "$guest_agent" = "yes" ; then > + case "$vss_win32_sdk" in > + "") vss_win32_include="" ;; > + *\ *) # The SDK is installed in "Program Files" by default, but we cannot > + # handle path with spaces. So we copy the headers into ".sdk/sdk". > + vss_win32_include="-I$source_path/.sdk/vss" > + symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" > + ;; > + *) vss_win32_include="-I$vss_win32_sdk" > + esac Please also add support for these: --with-vss-sdk=no and --without-vss-sdk to disable VSS --with-vss-sdk (with no path) is the same as "--with-vss-sdk=", but should fail if the program does not compile. The default should be what you have now, i.e. test and proceed according to the result. > + cat > $TMPC << EOF > +#define __MIDL_user_allocate_free_DEFINED__ > +#include <inc/win2003/vss.h> > +int main(void) { return VSS_CTX_BACKUP; } > +EOF > + if compile_prog "$vss_win32_include" "" ; then > + guest_agent_with_vss="yes" > + QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" > + libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ > -Wl,--enable-stdcall-fixup $libs_qga" > + else > + if test "$vss_win32_sdk" != "" ; then > + echo "ERROR: Please download and install Microsoft VSS SDK from" > + echo "ERROR: > http://www.microsoft.com/en-us/download/details.aspx?id=23490" Please add a note here detailing how to extract the headers on POSIX systems. Paolo > + feature_not_found "VSS support" > + fi > + guest_agent_with_vss="no" > + fi > +fi > + > +########################################## > > ########################################## > # check if we have fdatasync > @@ -3343,6 +3380,7 @@ echo "usb net redir $usb_redir" > echo "OpenGL support $opengl" > echo "libiscsi support $libiscsi" > echo "build guest agent $guest_agent" > +echo "QGA VSS support $guest_agent_with_vss" > echo "seccomp support $seccomp" > echo "coroutine backend $coroutine_backend" > echo "GlusterFS support $glusterfs" > @@ -3404,6 +3442,9 @@ if test "$mingw32" = "yes" ; then > version_micro=0 > echo > "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" > >> $config_host_mak > echo > "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" > >> $config_host_mak > + if test "$guest_agent_with_vss" = "yes" ; then > + echo "CONFIG_QGA_VSS=y" >> $config_host_mak > + fi > else > echo "CONFIG_POSIX=y" >> $config_host_mak > fi > > >