qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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




  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).