Hi Paolo, On 2013/02/14 23:36, Paolo Bonzini wrote: > 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?
Thank you for the code (tricky!), I will add this. >> ########################################## >> +# 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. I see. >> + 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. OK, thanks again. > 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 >> >> >> -- Tomoki Sekiyama