summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2014-02-17 13:00:14 +0100
committerMarc-André Lureau <marcandre.lureau@redhat.com>2014-06-19 15:27:31 +0200
commit8588daa1e0530fd6517fd0b8edb01018c7b77805 (patch)
tree9b6d900a9b273388d80b4cd20eeda9057ee20d34
parent4171d11bb69af84d45aee537a113eb4eebd09aa9 (diff)
Learn to build spice-vdagent MSI installer
-rw-r--r--Makefile.am23
-rw-r--r--configure.ac30
-rw-r--r--spice-vdagent.wxs.in78
3 files changed, 130 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 749ef56..9fa9f14 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,5 @@
NULL =
+EXTRA_DIST =
MAINTAINERCLEANFILES =
DIST_SUBDIRS = spice-protocol
@@ -61,8 +62,28 @@ vdservice_rc.$(OBJEXT): vdservice/vdservice.rc
MAINTAINERCLEANFILES += vdservice_rc.$(OBJEXT)
+deps.txt:
+ $(AM_V_GEN)rpm -qa | grep $(host_os) | sort | unix2dos > $@
-EXTRA_DIST = \
+MANUFACTURER = The Spice Project
+
+EXTRA_DIST += spice-vdagent.wxs.in
+CONFIG_STATUS_DEPENDENCIES = spice-vdagent.wxs.in
+
+spice-vdagent-$(WIXL_ARCH)-$(VERSION)$(BUILDID).msi: spice-vdagent.wxs deps.txt all
+ $(AM_V_GEN)DESTDIR=`mktemp -d`&& \
+ make -C $(top_builddir) install DESTDIR=$$DESTDIR >/dev/null && \
+ MANUFACTURER="$(MANUFACTURER)" wixl -D SourceDir=$(prefix) \
+ -D DESTDIR=$$DESTDIR$(prefix) \
+ --arch $(WIXL_ARCH) -o $@ $<
+
+msi: spice-vdagent-$(WIXL_ARCH)-$(VERSION)$(BUILDID).msi
+
+CLEANFILES = spice-vdagent-$(WIXL_ARCH)-$(VERSION)$(BUILDID).msi
+
+.PHONY: msi
+
+EXTRA_DIST += \
$(top_srcdir)/.version \
tests/clipboard.py \
vdagent.sln \
diff --git a/configure.ac b/configure.ac
index 12329b4..7f6511d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,11 +9,30 @@ AC_CONFIG_SRCDIR([vdagent])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([build-aux])
+AC_CANONICAL_HOST
AM_INIT_AUTOMAKE([1.11 foreign subdir-objects no-dist-gzip dist-xz tar-ustar])
AM_SILENT_RULES([yes])
+AC_ARG_WITH([buildid],
+AS_HELP_STRING([--with-buildid=id], [Set additional build version details]))
+AC_DEFINE_UNQUOTED([BUILDID], "$with_buildid", [Build version details])
+if test "x$with_buildid" != x; then
+ AC_SUBST([BUILDID], "-$with_buildid")
+fi
+
+major=`echo $PACKAGE_VERSION | cut -d. -f1`
+minor=`echo $PACKAGE_VERSION | cut -d. -f2`
+micro=`echo $PACKAGE_VERSION | cut -d. -f3`
+buildid=`echo $with_buildid | cut -d. -f1`
+if test "x$buildid" = x; then
+ buildid=0
+fi
+build=`expr $micro \* 256 + $buildid`
+WINDOWS_PRODUCTVERSION="$major.$minor.$build"
+AC_SUBST([WINDOWS_PRODUCTVERSION])
+
# Check for programs
AC_PROG_CC
AC_PROG_CXX
@@ -21,6 +40,16 @@ AM_PROG_CC_C_O
AC_PROG_INSTALL
AC_CHECK_TOOL(WINDRES, [windres])
+case "$host" in
+amd64*|x86_64*)
+ WIXL_ARCH="x64"
+;;
+*)
+ WIXL_ARCH="x86"
+;;
+esac
+AC_SUBST(WIXL_ARCH)
+
AC_ARG_ENABLE([debug],
AS_HELP_STRING([--enable-debug], [Enable debugging]))
@@ -75,6 +104,7 @@ AC_CONFIG_SUBDIRS([spice-protocol])
AC_CONFIG_FILES([
Makefile
mingw-spice-vdagent.spec
+spice-vdagent.wxs
])
AC_OUTPUT
diff --git a/spice-vdagent.wxs.in b/spice-vdagent.wxs.in
new file mode 100644
index 0000000..060f33d
--- /dev/null
+++ b/spice-vdagent.wxs.in
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+
+ <?define Version = "@WINDOWS_PRODUCTVERSION@"?>
+ <?define UpgradeCode = "7eb9b146-db04-42d7-a8ba-71fc8ced7eed"?>
+ <?define Arch = "@WIXL_ARCH@"?>
+ <?if $(var.Arch) = "x64"?>
+ <?define ArchString = "64-bit"?>
+ <?define ArchProgramFilesFolder = "ProgramFiles64Folder"?>
+ <?define Win64 = "yes"?>
+ <?else?>
+ <?define ArchString = "32-bit"?>
+ <?define ArchProgramFilesFolder = "ProgramFilesFolder"?>
+ <?define Win64 = "no"?>
+ <?endif?>
+
+ <Product Id="*" Name="Spice agent @VERSION@@BUILDID@ ($(var.ArchString))"
+ Manufacturer="$(env.MANUFACTURER)"
+ Version="$(var.Version)" UpgradeCode="$(var.UpgradeCode)"
+ Language="1033">
+
+ <Package InstallerVersion="200" Compressed="yes" Comments="comments"/>
+ <Media Id="1" Cabinet="cabinet.cab" EmbedCab="yes"/>
+
+ <Property Id="ARPHELPLINK" Value="http://www.spice-space.org"/>
+ <Property Id="ARPNOMODIFY" Value="1"/>
+ <Property Id="ARPNOREPAIR" Value="1"/>
+ <Upgrade Id="$(var.UpgradeCode)">
+ <UpgradeVersion Minimum="$(var.Version)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/>
+ <UpgradeVersion Minimum="0.0.0" Maximum="$(var.Version)" IncludeMinimum="yes" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/>
+ </Upgrade>
+ <Condition Message="Product already installed.">NOT NEWERVERSIONDETECTED</Condition>
+ <InstallExecuteSequence>
+ <RemoveExistingProducts After="InstallFinalize"/>
+ </InstallExecuteSequence>
+
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <Directory Id="$(var.ArchProgramFilesFolder)">
+ <Directory Id="INSTALLDIR" Name="SPICE agent">
+ <Directory Id="Dbindir" Name="bin">
+ <Component Id="CSpiceAgent" Guid="*">
+ <File Id='spiceagent' Name='vdagent.exe' DiskId='1' Source='$(var.DESTDIR)/bin/vdagent.exe' KeyPath='yes'/>
+ </Component>
+ <Component Id="CSpiceService" Guid="*">
+ <File Id='spiceservice' Name='vdservice.exe' DiskId='1' Source='$(var.DESTDIR)/bin/vdservice.exe' KeyPath='yes'/>
+ <ServiceInstall Id="ServiceInstall"
+ Name="spice-agent"
+ DisplayName="Spice agent"
+ Description="The Spice guest agent"
+ Type="ownProcess"
+ Start="auto"
+ Account="[SERVICEACCOUNT]"
+ Password="[SERVICEPASSWORD]"
+ ErrorControl="normal"/>
+ <ServiceControl Id="StartService"
+ Name="spice-agent"
+ Start="install"
+ Stop="both"
+ Remove="uninstall"
+ Wait="yes"/>
+ </Component>
+ </Directory>
+ <Component Id="CDepsTxt" Guid="*">
+ <File Id='depstxt' Name='deps.txt' DiskId='1' Source='deps.txt' KeyPath='yes'/>
+ </Component>
+ </Directory>
+ </Directory>
+ </Directory>
+
+ <Feature Id="Complete" Level="1">
+ <ComponentRef Id="CSpiceAgent"/>
+ <ComponentRef Id="CSpiceService"/>
+ <ComponentRef Id="CDepsTxt"/>
+ </Feature>
+
+ </Product>
+</Wix>