From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Daniel P . Berrangé" <berrange@redhat.com>
Subject: [PULL 18/24] meson: add NSIS building
Date: Tue, 1 Sep 2020 05:11:26 -0400 [thread overview]
Message-ID: <20200901091132.29601-19-pbonzini@redhat.com> (raw)
In-Reply-To: <20200901091132.29601-1-pbonzini@redhat.com>
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20200826110419.528931-9-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Makefile | 56 -----------------------------------
meson.build | 25 ++++++++++++++++
scripts/nsis.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 103 insertions(+), 56 deletions(-)
create mode 100644 scripts/nsis.py
diff --git a/Makefile b/Makefile
index 75db8be52e..f187ddf47a 100644
--- a/Makefile
+++ b/Makefile
@@ -232,62 +232,6 @@ distclean: clean ninja-distclean
# Needed by "meson install"
export DESTDIR
-ifdef CONFIG_WIN32
-
-INSTALLER = qemu-setup-$(VERSION)$(EXESUF)
-
-nsisflags = -V2 -NOCD
-
-ifneq ($(wildcard $(SRC_PATH)/dll),)
-ifeq ($(ARCH),x86_64)
-# 64 bit executables
-DLL_PATH = $(SRC_PATH)/dll/w64
-nsisflags += -DW64
-else
-# 32 bit executables
-DLL_PATH = $(SRC_PATH)/dll/w32
-endif
-endif
-
-.PHONY: installer
-installer: $(INSTALLER)
-
-INSTDIR=/tmp/qemu-nsis
-
-$(INSTALLER): $(SRC_PATH)/qemu.nsi
- $(MAKE) install DESTDIR=${INSTDIR}
-ifdef SIGNCODE
- (cd ${INSTDIR}/${bindir}; \
- for i in *.exe; do \
- $(SIGNCODE) $${i}; \
- done \
- )
-endif # SIGNCODE
- (cd ${INSTDIR}/${bindir}; \
- for i in qemu-system-*.exe; do \
- arch=$${i%.exe}; \
- arch=$${arch#qemu-system-}; \
- echo Section \"$$arch\" Section_$$arch; \
- echo SetOutPath \"\$$INSTDIR\"; \
- echo File \"\$${BINDIR}\\$$i\"; \
- echo SectionEnd; \
- done \
- ) >${INSTDIR}/${bindir}/system-emulations.nsh
- makensis $(nsisflags) \
- $(if $(BUILD_DOCS),-DCONFIG_DOCUMENTATION="y") \
- $(if $(CONFIG_GTK),-DCONFIG_GTK="y") \
- -DBINDIR="${INSTDIR}/${bindir}" \
- $(if $(DLL_PATH),-DDLLDIR="$(DLL_PATH)") \
- -DSRCDIR="$(SRC_PATH)" \
- -DOUTFILE="$(INSTALLER)" \
- -DDISPLAYVERSION="$(VERSION)" \
- $(SRC_PATH)/qemu.nsi
- rm -r ${INSTDIR}
-ifdef SIGNCODE
- $(SIGNCODE) $(INSTALLER)
-endif # SIGNCODE
-endif # CONFIG_WIN
-
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
ifneq ($(wildcard config-host.mak),)
diff --git a/meson.build b/meson.build
index a71b199c5e..78ac86f3a1 100644
--- a/meson.build
+++ b/meson.build
@@ -1230,6 +1230,31 @@ if build_docs
endif
endif
+if host_machine.system() == 'windows'
+ nsis_cmd = [
+ find_program('scripts/nsis.py'),
+ '@OUTPUT@',
+ get_option('prefix'),
+ meson.current_source_dir(),
+ host_machine.cpu_family(),
+ '--',
+ '-DDISPLAYVERSION=' + meson.project_version(),
+ ]
+ if build_docs
+ nsis_cmd += '-DCONFIG_DOCUMENTATION=y'
+ endif
+ if 'CONFIG_GTK' in config_host
+ nsis_cmd += '-DCONFIG_GTK=y'
+ endif
+
+ nsis = custom_target('nsis',
+ output: 'qemu-setup-' + meson.project_version() + '.exe',
+ input: files('qemu.nsi'),
+ build_always_stale: true,
+ command: nsis_cmd + ['@INPUT@'])
+ alias_target('installer', nsis)
+endif
+
summary_info = {}
summary_info += {'Install prefix': config_host['prefix']}
summary_info += {'BIOS directory': config_host['qemu_datadir']}
diff --git a/scripts/nsis.py b/scripts/nsis.py
new file mode 100644
index 0000000000..e1c409344e
--- /dev/null
+++ b/scripts/nsis.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2020 Red Hat, Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import argparse
+import glob
+import os
+import shutil
+import subprocess
+import tempfile
+
+
+def signcode(path):
+ cmd = os.environ.get("SIGNCODE")
+ if not cmd:
+ return
+ subprocess.run([cmd, path])
+
+
+def main():
+ parser = argparse.ArgumentParser(description="QEMU NSIS build helper.")
+ parser.add_argument("outfile")
+ parser.add_argument("prefix")
+ parser.add_argument("srcdir")
+ parser.add_argument("cpu")
+ parser.add_argument("nsisargs", nargs="*")
+ args = parser.parse_args()
+
+ destdir = tempfile.mkdtemp()
+ try:
+ subprocess.run(["make", "install", "DESTDIR=" + destdir + os.path.sep])
+ with open(
+ os.path.join(destdir + args.prefix, "system-emulations.nsh"), "w"
+ ) as nsh:
+ for exe in glob.glob(
+ os.path.join(destdir + args.prefix, "qemu-system-*.exe")
+ ):
+ exe = os.path.basename(exe)
+ arch = exe[12:-4]
+ nsh.write(
+ """
+ Section "{0}" Section_{0}
+ SetOutPath "$INSTDIR"
+ File "${{BINDIR}}\\{1}"
+ SectionEnd
+ """.format(
+ arch, exe
+ )
+ )
+
+ for exe in glob.glob(os.path.join(destdir + args.prefix, "*.exe")):
+ signcode(exe)
+
+ makensis = [
+ "makensis",
+ "-V2",
+ "-NOCD",
+ "-DSRCDIR=" + args.srcdir,
+ "-DBINDIR=" + destdir + args.prefix,
+ ]
+ dlldir = "w32"
+ if args.cpu == "x86_64":
+ dlldir = "w64"
+ makensis += ["-DW64"]
+ if os.path.exists(os.path.join(args.srcdir, "dll")):
+ makensis += "-DDLLDIR={0}/dll/{1}".format(args.srcdir, dlldir)
+
+ makensis += ["-DOUTFILE=" + args.outfile] + args.nsisargs
+ subprocess.run(makensis)
+ signcode(args.outfile)
+ finally:
+ shutil.rmtree(destdir)
+
+
+if __name__ == "__main__":
+ main()
--
2.26.2
next prev parent reply other threads:[~2020-09-01 9:19 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-01 9:11 [PULL 00/24] Meson changes for 2020-09-01 Paolo Bonzini
2020-09-01 9:11 ` [PULL 01/24] meson: bump submodule to 0.55.1 Paolo Bonzini
2020-09-01 9:11 ` [PULL 02/24] block: always link with zlib Paolo Bonzini
2020-09-01 9:11 ` [PULL 03/24] meson: fix SDL2_image detection Paolo Bonzini
2020-09-01 9:11 ` [PULL 04/24] meson: install pc-bios blobs Paolo Bonzini
2020-09-01 9:11 ` [PULL 05/24] meson: install scripts/qemu-trace-stap Paolo Bonzini
2020-09-01 9:11 ` [PULL 06/24] meson: install icons Paolo Bonzini
2020-09-01 9:11 ` [PULL 07/24] meson: install desktop file Paolo Bonzini
2020-09-01 9:11 ` [PULL 08/24] meson: install $localstatedir/run for qga Paolo Bonzini
2020-09-01 9:11 ` [PULL 09/24] build-sys: remove install target from Makefile Paolo Bonzini
2020-09-01 9:11 ` [PULL 10/24] meson: move zlib detection to meson Paolo Bonzini
2020-09-01 9:11 ` [PULL 11/24] configure: rename confsuffix option Paolo Bonzini
2020-09-01 9:11 ` [PULL 12/24] configure: always /-seperate directory from qemu_suffix Paolo Bonzini
2020-09-01 9:11 ` [PULL 13/24] configure: build docdir like other suffixed directories Paolo Bonzini
2020-09-01 9:11 ` [PULL 14/24] meson: pass qemu_suffix option Paolo Bonzini
2020-09-01 9:11 ` [PULL 15/24] meson: use meson datadir instead of qemu_datadir Paolo Bonzini
2020-09-01 9:11 ` [PULL 16/24] meson: pass docdir option Paolo Bonzini
2020-09-01 9:11 ` [PULL 17/24] meson: use meson mandir instead of qemu_mandir Paolo Bonzini
2020-09-01 9:11 ` Paolo Bonzini [this message]
2020-09-01 9:11 ` [PULL 19/24] meson: add pixman dependency to chardev/baum module Paolo Bonzini
2020-09-01 9:11 ` [PULL 20/24] meson: add pixman dependency to UI modules Paolo Bonzini
2020-09-01 9:11 ` [PULL 21/24] configure: do not include ${prefix} in firmwarepath Paolo Bonzini
2020-09-01 9:11 ` [PULL 22/24] meson: use pkg-config method to find dependencies Paolo Bonzini
2020-09-01 9:11 ` [PULL 23/24] build: fix recurse-all target Paolo Bonzini
2020-09-01 9:11 ` [PULL 24/24] meson: add description to options Paolo Bonzini
2020-09-01 9:32 ` Marc-André Lureau
2020-09-01 12:12 ` [PULL 00/24] Meson changes for 2020-09-01 Peter Maydell
2020-09-01 13:19 ` 罗勇刚(Yonggang Luo)
2020-09-01 16:19 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200901091132.29601-19-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=berrange@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).