meson: add NSIS building
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>
This commit is contained in:
parent
b81efab7c7
commit
8adfeba953
56
Makefile
56
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),)
|
||||
|
25
meson.build
25
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']}
|
||||
|
78
scripts/nsis.py
Normal file
78
scripts/nsis.py
Normal file
@ -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()
|
Loading…
Reference in New Issue
Block a user