[Spice-devel] [NSIS 7/7] packaging: add Makefile, spec file, jenkins automation

Yedidyah Bar David didi at redhat.com
Tue Oct 20 04:35:28 PDT 2015


Allow 'make dist'.

Allow building the spice installer and building/installing the ovirt
installer.

VERSION moved from the nsis file to the Makefile and will be maintained
there.

Some Makefile variables (format: PARAM (valid values) [default]):
MODE (SPICE,OVIRT) [SPICE] - its value is passed as a define to makensis
DISPLAYED_VERSION () [$VERSION] - what's written to the registry
INSTALLER () [depends on MODE] - installer filename without .exe ext
UNINSTALLER () [depends on MODE] - uninstaller filename without .exe ext

Some of the code in the Makefile was copied and adapted from
ovirt-wgt-installer.spec. The spec file itself was also copied here and
adapted, and will be removed [1] from its current location.

Add jenkins.ovirt.org automation.

Change all /usr/share/artifacts to /usr/share.

See also:

https://gerrit.ovirt.org/45833 - spice-nsis aka ovirt-wgt
https://gerrit.ovirt.org/47460 - ovirt-wgt-toolchain
https://gerrit.ovirt.org/47461 - ovirt-guest-agent

[1] https://gerrit.ovirt.org/47432

Change-Id: I0d651065697d962d4e351ffc1b7274c8eb37cb22
Signed-off-by: Sandro Bonazzola <sbonazzo at redhat.com>
Signed-off-by: Yedidyah Bar David <didi at redhat.com>
---
 Makefile                            | 100 ++++++++++++++++++++++++++++++++++++
 automation/README.md                |   8 +++
 automation/build-artifacts.packages |  10 ++++
 automation/build-artifacts.repos    |   2 +
 automation/build-artifacts.sh       |  21 ++++++++
 automation/check-patch.packages     |  10 ++++
 automation/check-patch.repos        |   2 +
 automation/check-patch.sh           |  21 ++++++++
 ovirt-wgt-installer.spec            |  63 +++++++++++++++++++++++
 win-guest-tools.nsis                |  31 +++++++----
 10 files changed, 259 insertions(+), 9 deletions(-)
 create mode 100644 Makefile
 create mode 100644 automation/README.md
 create mode 100644 automation/build-artifacts.packages
 create mode 100644 automation/build-artifacts.repos
 create mode 100755 automation/build-artifacts.sh
 create mode 100644 automation/check-patch.packages
 create mode 100644 automation/check-patch.repos
 create mode 100755 automation/check-patch.sh
 create mode 100644 ovirt-wgt-installer.spec

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..44716f2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,100 @@
+NAME="spice-nsis"
+VERSION="0.103"
+DISPLAYED_VERSION=$(VERSION)
+ARCHIVE=$(NAME)-$(VERSION).tar.gz
+
+# set to OVIRT to build the ovirt guest tools installer
+MODE=SPICE
+
+ifeq ($(MODE),SPICE)
+INSTALLER=spice-guest-tools-$(VERSION)
+UNINSTALLER=Uninstall spice-guest-tools
+else
+ifeq ($(MODE),OVIRT)
+INSTALLER=ovirt-guest-tools-setup
+UNINSTALLER=Uninstall ovirt-guest-tools-setup
+else
+$(error Please set MODE to one of SPICE or OVIRT, not [$(MODE)])
+endif
+endif
+
+# common dependencies/sources
+MINGW32BIN=/usr/i686-w64-mingw32/sys-root/mingw/bin
+MINGW64BIN=/usr/x86_64-w64-mingw32/sys-root/mingw/bin
+VIRTIOWINDRIVERS=/usr/share/virtio-win-drivers
+QXLDRIVER=/usr/share/spice-qxl
+
+# ovirt dependencies/sources
+OVIRTGA=/usr/share/ovirt-guest-agent-windows
+VCREDIST=/usr/share/vcredist-x86/vcredist_x86.exe
+
+# Common definitions for targets
+PREFIX=/usr/local
+DATAROOT_DIR=$(PREFIX)/share
+
+# ovirt-install targets
+OVIRT_NAME=ovirt-wgt-installer
+OVIRT_DATA_DIR=$(DATAROOT_DIR)/$(OVIRT_NAME)
+OVIRT_DATA_DIR_ISO=$(DATAROOT_DIR)/$(OVIRT_NAME)-iso
+
+all: copy-files installer
+
+copy-files: common-files extra-files
+
+# Note that the installer does not depend here on the copied files,
+# so that 'make install-*' will not have to recreate it.
+# that's the "lazy" way. The correct way would have been to (automatically)
+# add dependencies here per each external file we copy.
+# If you do update one of the dependencies (say one of the drivers),
+# run 'make clean' before trying again to build.
+installer: $(INSTALLER).exe
+
+$(INSTALLER).exe: win-guest-tools.nsis
+	makensis \
+		-DVERSION=$(VERSION) \
+		-D$(MODE) \
+		-DDISPLAYED_VERSION=$(DISPLAYED_VERSION) \
+		-DINSTALLER=$(INSTALLER) \
+		-D'UNINSTALLER=$(UNINSTALLER)' \
+		win-guest-tools.nsis
+
+common-files:
+	mkdir -p bin/vdagent_x86 bin/vdagent_x64
+	mkdir -p drivers/virtio drivers/qxl
+	cp $(MINGW32BIN)/vdagent.exe bin/vdagent_x86/
+	cp $(MINGW32BIN)/vdservice.exe bin/vdagent_x86/
+	cp $(MINGW64BIN)/vdagent.exe bin/vdagent_x64/
+	cp $(MINGW64BIN)/vdservice.exe bin/vdagent_x64/
+	cp -a $(VIRTIOWINDRIVERS)/* drivers/virtio/
+	cp -a $(QXLDRIVER)/* drivers/qxl/
+
+
+# Extra files:
+
+ifeq ($(MODE),SPICE)
+extra-files:
+	: TODO: Add here spice-specific files if any
+else
+ifeq ($(MODE),OVIRT)
+extra-files:
+	cp $(OVIRTGA)/OVirtGuestService.exe bin/
+	cp $(OVIRTGA)/default.ini bin/
+	cp $(OVIRTGA)/default-logger.ini bin/
+	cp $(OVIRTGA)/ovirt-guest-agent.ini bin/
+	cp $(VCREDIST) bin/
+endif
+endif
+
+install-ovirt: installer
+	mkdir -p $(DESTDIR)$(OVIRT_DATA_DIR) $(DESTDIR)$(OVIRT_DATA_DIR_ISO)
+	cp $(INSTALLER).exe $(DESTDIR)$(OVIRT_DATA_DIR)
+	cp -a bin drivers $(DESTDIR)$(OVIRT_DATA_DIR_ISO)
+
+# TODO add install-spice targets?
+
+clean:
+	rm -rf *.exe bin drivers
+
+dist:
+	git archive --prefix $(NAME)/ --format=tar.gz HEAD -o $(ARCHIVE)
+
diff --git a/automation/README.md b/automation/README.md
new file mode 100644
index 0000000..1b6a399
--- /dev/null
+++ b/automation/README.md
@@ -0,0 +1,8 @@
+Continuous Integration Scripts
+==============================
+
+This directory contains scripts for Continuous Integration provided by
+[oVirt Jenkins](http://jenkins.ovirt.org/)
+system and follows the standard defined in
+[Build and test standards](http://www.ovirt.org/CI/Build_and_test_standards)
+wiki page.
diff --git a/automation/build-artifacts.packages b/automation/build-artifacts.packages
new file mode 100644
index 0000000..f6b7897
--- /dev/null
+++ b/automation/build-artifacts.packages
@@ -0,0 +1,10 @@
+make
+mingw32-nsis
+mingw32-spice-vdagent
+mingw64-spice-vdagent
+ovirt-guest-agent-windows
+vcredist-x86
+virtio-win-drivers
+spice-qxl
+nsis-simple-service-plugin
+git
diff --git a/automation/build-artifacts.repos b/automation/build-artifacts.repos
new file mode 100644
index 0000000..a31e01a
--- /dev/null
+++ b/automation/build-artifacts.repos
@@ -0,0 +1,2 @@
+ovirt-master-snapshot,http://resources.ovirt.org/pub/ovirt-master-snapshot/rpm/$distro
+ovirt-master-snapshot-static,http://resources.ovirt.org/pub/ovirt-master-snapshot-static/rpm/$distro
diff --git a/automation/build-artifacts.sh b/automation/build-artifacts.sh
new file mode 100755
index 0000000..ad7c292
--- /dev/null
+++ b/automation/build-artifacts.sh
@@ -0,0 +1,21 @@
+#!/bin/bash -xe
+[[ -d exported-artifacts ]] \
+|| mkdir -p exported-artifacts
+
+[[ -d tmp.repos ]] \
+|| mkdir -p tmp.repos
+
+SUFFIX=".$(date -u +%Y%m%d%H%M%S).git$(git rev-parse --short HEAD)"
+
+make dist
+yum-builddep ovirt-wgt-installer.spec
+rpmbuild \
+    -D "_topdir $PWD/tmp.repos" \
+    -D "release_suffix ${SUFFIX}" \
+    -ta spice-nsis-*.tar.gz
+
+mv *.tar.gz exported-artifacts
+find \
+    "$PWD/tmp.repos" \
+    -iname \*.rpm \
+    -exec mv {} exported-artifacts/ \;
diff --git a/automation/check-patch.packages b/automation/check-patch.packages
new file mode 100644
index 0000000..f6b7897
--- /dev/null
+++ b/automation/check-patch.packages
@@ -0,0 +1,10 @@
+make
+mingw32-nsis
+mingw32-spice-vdagent
+mingw64-spice-vdagent
+ovirt-guest-agent-windows
+vcredist-x86
+virtio-win-drivers
+spice-qxl
+nsis-simple-service-plugin
+git
diff --git a/automation/check-patch.repos b/automation/check-patch.repos
new file mode 100644
index 0000000..a31e01a
--- /dev/null
+++ b/automation/check-patch.repos
@@ -0,0 +1,2 @@
+ovirt-master-snapshot,http://resources.ovirt.org/pub/ovirt-master-snapshot/rpm/$distro
+ovirt-master-snapshot-static,http://resources.ovirt.org/pub/ovirt-master-snapshot-static/rpm/$distro
diff --git a/automation/check-patch.sh b/automation/check-patch.sh
new file mode 100755
index 0000000..ad7c292
--- /dev/null
+++ b/automation/check-patch.sh
@@ -0,0 +1,21 @@
+#!/bin/bash -xe
+[[ -d exported-artifacts ]] \
+|| mkdir -p exported-artifacts
+
+[[ -d tmp.repos ]] \
+|| mkdir -p tmp.repos
+
+SUFFIX=".$(date -u +%Y%m%d%H%M%S).git$(git rev-parse --short HEAD)"
+
+make dist
+yum-builddep ovirt-wgt-installer.spec
+rpmbuild \
+    -D "_topdir $PWD/tmp.repos" \
+    -D "release_suffix ${SUFFIX}" \
+    -ta spice-nsis-*.tar.gz
+
+mv *.tar.gz exported-artifacts
+find \
+    "$PWD/tmp.repos" \
+    -iname \*.rpm \
+    -exec mv {} exported-artifacts/ \;
diff --git a/ovirt-wgt-installer.spec b/ovirt-wgt-installer.spec
new file mode 100644
index 0000000..1d79c41
--- /dev/null
+++ b/ovirt-wgt-installer.spec
@@ -0,0 +1,63 @@
+Name:		ovirt-wgt-installer
+Version:	3.6.0
+Release:	0.2_master%{?release_suffix}%{?dist}
+Summary:	oVirt Windows Guest Tools Installer
+License:	GPLv2 and GPLv2+ and ASL 2.0 and Zlib and MIT and Python and Platform SDK Redistributable EULA and Microsoft DDK Redistributable EULA
+Source:		http://resources.ovirt.org/pub/ovirt-3.6-snapshot/src/ovirt-wgt/spice-nsis-0.103.tar.gz
+URL:		http://www.ovirt.org/Features/oVirt_Windows_Guest_Tools
+BuildArch:	noarch
+Packager:	Lev Veyde <lveyde at redhat.com>
+
+BuildRequires:	mingw32-nsis >= 2.46
+BuildRequires:	mingw32-spice-vdagent >= 0.7.3
+BuildRequires:	mingw64-spice-vdagent >= 0.7.3
+BuildRequires:	ovirt-guest-agent-windows
+BuildRequires:	vcredist-x86
+BuildRequires:	virtio-win-drivers
+BuildRequires:	spice-qxl
+BuildRequires:	nsis-simple-service-plugin
+
+%description
+oVirt Windows Guest Tools installer.
+The installer includes VirtIO-Win drivers, Spice QXL drivers, as well as oVirt and Spice Guest Agents.
+
+%global make_common_opts \\\
+	PREFIX=%{_prefix} \\\
+	MODE=OVIRT \\\
+	DISPLAYED_VERSION='%{version}-%{release}'
+
+%prep
+%setup -n spice-nsis -q
+
+%build
+
+make %{make_common_opts}
+
+%install
+
+make %{make_common_opts} install-ovirt DESTDIR="%{buildroot}"
+
+%files
+%{_datadir}/%{name}/ovirt-guest-tools-setup.exe
+
+%package iso
+Summary: RPM wrapper for %{name}
+
+%description iso
+A package wrapping %{name} to provide dependency features.
+
+%files iso
+%{_datadir}/%{name}-iso
+
+%changelog
+* Tue Oct 20 2015 Yedidyah Bar David <didi at redhat.com> 3.6.0-0.2
+- merged into upstream git repo spice-nsis
+- separated Makefile out of the spec file
+- dropped "artifacts" from all paths
+- added jenkins automation
+
+* Mon Nov 24 2014 Lev Veyde <lveyde at redhat.com> 0.9.1-2
+- Updated oVirt Guest Agent
+
+* Wed Oct 08 2014 Lev Veyde <lveyde at redhat.com> 0.9.1-1
+- Initial version
diff --git a/win-guest-tools.nsis b/win-guest-tools.nsis
index b2b06a7..a2c148b 100644
--- a/win-guest-tools.nsis
+++ b/win-guest-tools.nsis
@@ -41,13 +41,11 @@ SetCompressor /SOLID lzma
 !include "x64.nsh"
 
 !ifdef SPICE
-!define FILENAME "spice-guest-tools"
 !define NAME "SPICE Guest Tools"
 !define PUBLISHER "The SPICE Project"
 !define REGKEYNAME "SpiceGuestTools"
 !define URL "http://spice-space.org"
 !else ifdef OVIRT
-!define FILENAME "ovirt-guest-tools-setup"
 !define NAME "oVirt Guest Tools"
 !define PUBLISHER "The oVirt Project"
 !define REGKEYNAME "oVirtGuestTools"
@@ -55,11 +53,26 @@ SetCompressor /SOLID lzma
 !else
 !error "OVIRT or SPICE symbol should passed to makensis with the -D flag"
 !endif
-!define VERSION "0.103"
+
+!ifndef VERSION
+!error "-DVERSION=<version> should be passed to makensis, see Makefile"
+!endif
+
+!ifndef DISPLAYED_VERSION
+!define DISPLAYED_VERSION "${VERSION}"
+!endif
+
+!ifndef INSTALLER
+!error "-DINSTALLER=<installer> should be passed to makensis"
+!endif
+
+!ifndef UNINSTALLER
+!error "-DUNINSTALLER=<uninstaller> should be passed to makensis"
+!endif
 
 Name "${NAME}"
 Caption "${NAME} Installer"
-OutFile "${FILENAME}-${VERSION}.exe"
+OutFile "${INSTALLER}.exe"
 InstallDir "$PROGRAMFILES\${NAME}"
 BrandingText ""
 
@@ -185,15 +198,15 @@ Section "install"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REGKEYNAME}" \
                  "DisplayName" "${NAME}"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REGKEYNAME}" \
-                 "DisplayVersion" "${VERSION}"
+                 "DisplayVersion" "${DISPLAYED_VERSION}"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REGKEYNAME}" \
                  "Publisher" "${PUBLISHER}"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REGKEYNAME}" \
                  "URLInfoAbout" "${URL}"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REGKEYNAME}" \
-                 "UninstallString" "$\"$INSTDIR\Uninstall ${FILENAME}$\""
+                 "UninstallString" "$\"$INSTDIR\${UNINSTALLER}$\""
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REGKEYNAME}" \
-                 "QuietUninstallString" "$\"$INSTDIR\Uninstall ${FILENAME}$\" /S"
+                 "QuietUninstallString" "$\"$INSTDIR\${UNINSTALLER}$\" /S"
   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REGKEYNAME}" \
                  "NoModify" "1"
   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REGKEYNAME}" \
@@ -211,7 +224,7 @@ Section "Uninstall"
   SetOutPath "$TEMP"
 
   Delete /rebootok "$INSTDIR\version.txt"
-  Delete /rebootok "$INSTDIR\Uninstall ${FILENAME}.exe"
+  Delete /rebootok "$INSTDIR\${UNINSTALLER}.exe"
   Delete /rebootok "$INSTDIR\32\vdagent.exe"
   Delete /rebootok "$INSTDIR\32\vdservice.exe"
   RMDir /rebootok "$INSTDIR\32"
@@ -229,7 +242,7 @@ Section "Uninstall"
 SectionEnd
 
 Section -post
-  WriteUninstaller "$INSTDIR\Uninstall ${FILENAME}.exe"
+  WriteUninstaller "$INSTDIR\${UNINSTALLER}.exe"
 SectionEnd
 
 Function .onInit
-- 
2.1.4



More information about the Spice-devel mailing list