[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