From patchwork Thu Jun 6 15:06:41 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomoki Sekiyama X-Patchwork-Id: 249445 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id AF6DF2C007A for ; Fri, 7 Jun 2013 01:09:02 +1000 (EST) Received: from localhost ([::1]:34102 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UkboC-0005e6-LA for incoming@patchwork.ozlabs.org; Thu, 06 Jun 2013 11:09:00 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37106) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ukbmf-0003m3-Fb for qemu-devel@nongnu.org; Thu, 06 Jun 2013 11:07:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ukbma-00021j-IN for qemu-devel@nongnu.org; Thu, 06 Jun 2013 11:07:25 -0400 Received: from usindpps06.hds.com ([207.126.252.19]:43125) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ukbma-00020d-9Q for qemu-devel@nongnu.org; Thu, 06 Jun 2013 11:07:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=hds.com; h=subject : to : from : cc : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=mail1; bh=arwDHv23kUbKoT2uhraLVfinoCSzcjuf3KOPFPkZPYs=; b=W3/wVTGovEJ2ak4HolmHqNEPkBlMMIR0Wm54PV5dQNWnSoJlBxOUHESMgzSfYGg0jI+r OfoZ8f9miYenelUW6R5W38EupwbeeBlV+/yKL9eiddHve6Hjlb2n22gnx77MI1bJysOQ ZWmfFaDRz19+Efz8GhwrzHOt8foxVWTwajlDvCPaAQ5eMhdn6rGpCyVWsc83UKCgymhk MfuslgYzB+WFmov4nGRgV95Y0ZBIencX89y0UGWCUogS5UYQRyBZPdbkEyV8BTO6UrYY r0jq60HWk2nMtNiA43x6N795FDjMboip3DQKJ7qFqc8B4oS8Yl82iRFiu+vKTfCBqeJK Uw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=hdsstg.com; h=subject : to : from : cc : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=mail1; bh=arwDHv23kUbKoT2uhraLVfinoCSzcjuf3KOPFPkZPYs=; b=fpXu2XewSMyzuAxnaad0nx6YTYtEVY1O2Z9EtJr10vgjRaU57ylqp3JDAQyNkYtU6oDf VPky26yRoWOLXHfVik8KF5V0GOSkEOqi0xg66P6f71jZ5E95fUafR/YC9oYXV8HQ3IRH rxTwQf3VIZOQkJOrNj9utnc8HzTDAastWgG6EKT6m4rn4agBJo16P7nT76HS+yPUlneA 9xS4tpQhvAxG/5vO14yXLOIejTRvZUuJ2ecDdbRP5S/5olWq3JHJq0rlkucIdkQF2o1Q VDHUl5C5Gnmuddv74LmZRFm9EHJEbAZmf2eAGZAeJhDp1G5dJaQgmC9DaBb96J7uZDA3 MQ== Received: from usindmail01.hds.com (usindmail03 [207.126.252.22]) by usindpps06.hds.com (8.14.4/8.14.4) with ESMTP id r56F6hvM025861; Thu, 6 Jun 2013 08:06:43 -0700 Received: from hds.com (usindnetf5d-vlan47float.corp.hds.com [10.74.73.11]) by usindmail01.hds.com (8.14.1/8.14.1) with ESMTP id r56F6g9B032977; Thu, 6 Jun 2013 11:06:42 -0400 (EDT) To: qemu-devel@nongnu.org From: Tomoki Sekiyama Date: Thu, 06 Jun 2013 11:06:41 -0400 Message-ID: <20130606150641.10486.35710.stgit@hds.com> In-Reply-To: <20130606150618.10486.60669.stgit@hds.com> References: <20130606150618.10486.60669.stgit@hds.com> User-Agent: StGit/0.16 MIME-Version: 1.0 X-Proofpoint-SPF-Result: pass X-Proofpoint-SPF-Record: v=spf1 mx ip4:207.126.244.0/26 ip4:207.126.252.0/25 include:mktomail.com include:cloud.hds.com ~all X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.10.8626, 1.0.431, 0.0.0000 definitions=2013-06-06_06:2013-06-06, 2013-06-06, 1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=outbound_policy score=0 spamscore=0 ipscore=0 suspectscore=4 phishscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=6.0.2-1211240000 definitions=main-1306060111 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x X-Received-From: 207.126.252.19 Cc: libaiqing@huawei.com, stefanha@gmail.com, mdroth@linux.vnet.ibm.com, lcapitulino@redhat.com, vrozenfe@redhat.com, pbonzini@redhat.com, seiji.aguchi@hds.com, areis@redhat.com Subject: [Qemu-devel] [PATCH v4 05/10] qemu-ga: Add configure options to specify path to Windows/VSS SDK X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org To enable VSS support in qemu-ga for Windows, header files included in VSS SDK are required. The VSS support is enabled by the configure option like below: ./configure --with-vss-sdk="/path/to/VSS SDK" If the path is omitted, it tries to search the headers from default paths and VSS support is enabled only if the SDK is found. VSS support is disabled if --without-vss-sdk or --with-vss-sdk=no is specified. VSS SDK is available from: http://www.microsoft.com/en-us/download/details.aspx?id=23490 To cross-compile using mingw, you need to setup the SDK on Windows environments to extract headers. You can also extract the SDK headers on POSIX environments using scripts/extract-vss-headers and msitools. In addition, --with-win-sdk="/path/to/Windows SDK" option is also added to specify path to Windows SDK, which may be used for native-compile of .tlb file of qemu-ga VSS provider. However, this is usually unnecessary because pre-compiled .tlb file is included. Signed-off-by: Tomoki Sekiyama Reviewed-by: Laszlo Ersek --- .gitignore | 1 + Makefile | 1 + configure | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/.gitignore b/.gitignore index 64e9466..67facd3 100644 --- a/.gitignore +++ b/.gitignore @@ -79,6 +79,7 @@ fsdev/virtfs-proxy-helper.pod *.la *.pc .libs +.sdk *.swp *.orig .pc diff --git a/Makefile b/Makefile index a96736b..4851ba0 100644 --- a/Makefile +++ b/Makefile @@ -272,6 +272,7 @@ distclean: clean for d in $(TARGET_DIRS); do \ rm -rf $$d || exit 1 ; \ done + rm -Rf .sdk if test -f pixman/config.log; then make -C pixman distclean; fi if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi diff --git a/configure b/configure index a2fc3f3..cafe830 100755 --- a/configure +++ b/configure @@ -232,6 +232,8 @@ usb_redir="" glx="" zlib="yes" guest_agent="yes" +guest_agent_with_vss="no" +vss_win32_sdk="" want_tools="yes" libiscsi="" coroutine="" @@ -919,6 +921,14 @@ for opt do ;; --disable-guest-agent) guest_agent="no" ;; + --with-vss-sdk) vss_win32_sdk="" + ;; + --with-vss-sdk=*) vss_win32_sdk="$optarg" + ;; + --without-vss-sdk) vss_win32_sdk="no" + ;; + --with-win-sdk=*) win_sdk="$optarg" + ;; --enable-tools) want_tools="yes" ;; --disable-tools) want_tools="no" @@ -1151,6 +1161,8 @@ echo " --disable-usb-redir disable usb network redirection support" echo " --enable-usb-redir enable usb network redirection support" echo " --disable-guest-agent disable building of the QEMU Guest Agent" echo " --enable-guest-agent enable building of the QEMU Guest Agent" +echo " --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent" +echo " --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)" echo " --disable-seccomp disable seccomp support" echo " --enable-seccomp enables seccomp support" echo " --with-coroutine=BACKEND coroutine backend. Supported options:" @@ -3066,6 +3078,57 @@ if test "$usb_redir" != "no" ; then fi ########################################## +# check if we have VSS SDK headers for win + +if test "$mingw32" = "yes" -a "$guest_agent" = "yes" -a "$vss_win32_sdk" != "no" ; then + case "$vss_win32_sdk" in + "") vss_win32_include="-I$source_path" ;; + *\ *) # The SDK is installed in "Program Files" by default, but we cannot + # handle path with spaces. So we symlink the headers into ".sdk/vss". + 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 + cat > $TMPC << EOF +#define __MIDL_user_allocate_free_DEFINED__ +#include +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:" + echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" + echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" + echo "ERROR: scripts/extract-vsssdk-headers setup.exe" + echo "ERROR: The headers are extracted in the directory \`inc'." + feature_not_found "VSS support" + fi + guest_agent_with_vss="no" + fi +fi + +########################################## +# lookup Windows platform SDK (if not specified) +# The SDK is needed only to build .tlb (type library) file of guest agent +# VSS provider from the source. It is usually unnecessary because the +# pre-compiled .tlb file is included. + +if test "$mingw32" = "yes" -a "$guest_agent" = "yes" -a "$guest_agent_with_vss" = "yes" ; then + if test -z "$win_sdk"; then + programfiles="$PROGRAMFILES" + test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" + if test -n "$programfiles"; then + win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null + fi + fi +fi + +########################################## ########################################## # check if we have fdatasync @@ -3466,6 +3529,7 @@ echo "Manual directory `eval echo $mandir`" echo "ELF interp prefix $interp_prefix" else echo "local state directory queried at runtime" +echo "Windows SDK $win_sdk" fi echo "Source path $source_path" echo "C compiler $cc" @@ -3552,6 +3616,7 @@ echo "usb net redir $usb_redir" echo "GLX support $glx" 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" echo "GlusterFS support $glusterfs" @@ -3627,6 +3692,10 @@ 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 + echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak + fi else echo "CONFIG_POSIX=y" >> $config_host_mak fi