diff mbox series

[3/3] nsis installer: Fix mouse-over descriptions for emulators

Message ID 20220305105743.2384766-4-peter.maydell@linaro.org
State Superseded
Headers show
Series windows installer: Fix warnings, mouse-over descriptions, item order | expand

Commit Message

Peter Maydell March 5, 2022, 10:57 a.m. UTC
We use the nsis.py script to write out an installer script Section
for each emulator executable, so the exact set of Sections depends on
which executables were built.  However the part of qemu.nsi which
specifies mouse-over descriptions for each Section still has a
hard-coded and very outdated list (with just i386 and alpha).  This
causes two problems.  Firstly, if you build the installer for a
configuration where you didn't build the i386 binaries you get
warnings like this:
  warning 6000: unknown variable/constant "{Section_i386}" detected, ignoring (macro:_==:1)
  warning 6000: unknown variable/constant "{Section_i386w}" detected, ignoring (macro:_==:1)
(this happens in our gitlab CI jobs, for instance).
Secondly, most of the emulators in the generated installer don't have
any mouseover text.

Make nsis.py generate a second output file which has the necessary
MUI_DESCRIPTION_TEXT lines for each Section it creates, so we can
include that at the right point in qemu.nsi to set the mouse-over
text.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
I opted to put the logic into the Python script, which I think
many QEMU contributors understand, rather than investigating
whether NSIS installer script magic might for instance allow
us to write out only one file rather than two, since I think
very few of us understand the NSIS installer...
---
 qemu.nsi        |  5 +----
 scripts/nsis.py | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 5 deletions(-)

Comments

Philippe Mathieu-Daudé March 5, 2022, 11:19 a.m. UTC | #1
On 5/3/22 11:57, Peter Maydell wrote:
> We use the nsis.py script to write out an installer script Section
> for each emulator executable, so the exact set of Sections depends on
> which executables were built.  However the part of qemu.nsi which
> specifies mouse-over descriptions for each Section still has a
> hard-coded and very outdated list (with just i386 and alpha).  This
> causes two problems.  Firstly, if you build the installer for a
> configuration where you didn't build the i386 binaries you get
> warnings like this:
>    warning 6000: unknown variable/constant "{Section_i386}" detected, ignoring (macro:_==:1)
>    warning 6000: unknown variable/constant "{Section_i386w}" detected, ignoring (macro:_==:1)
> (this happens in our gitlab CI jobs, for instance).
> Secondly, most of the emulators in the generated installer don't have
> any mouseover text.
> 
> Make nsis.py generate a second output file which has the necessary
> MUI_DESCRIPTION_TEXT lines for each Section it creates, so we can
> include that at the right point in qemu.nsi to set the mouse-over
> text.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> I opted to put the logic into the Python script, which I think
> many QEMU contributors understand, rather than investigating
> whether NSIS installer script magic might for instance allow
> us to write out only one file rather than two, since I think
> very few of us understand the NSIS installer...

Very much appreciated.

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>   qemu.nsi        |  5 +----
>   scripts/nsis.py | 13 ++++++++++++-
>   2 files changed, 13 insertions(+), 5 deletions(-)
John Snow March 7, 2022, 7:31 p.m. UTC | #2
On Sat, Mar 5, 2022 at 5:57 AM Peter Maydell <peter.maydell@linaro.org> wrote:
>
> We use the nsis.py script to write out an installer script Section
> for each emulator executable, so the exact set of Sections depends on
> which executables were built.  However the part of qemu.nsi which
> specifies mouse-over descriptions for each Section still has a
> hard-coded and very outdated list (with just i386 and alpha).  This
> causes two problems.  Firstly, if you build the installer for a
> configuration where you didn't build the i386 binaries you get
> warnings like this:
>   warning 6000: unknown variable/constant "{Section_i386}" detected, ignoring (macro:_==:1)
>   warning 6000: unknown variable/constant "{Section_i386w}" detected, ignoring (macro:_==:1)
> (this happens in our gitlab CI jobs, for instance).
> Secondly, most of the emulators in the generated installer don't have
> any mouseover text.
>
> Make nsis.py generate a second output file which has the necessary
> MUI_DESCRIPTION_TEXT lines for each Section it creates, so we can
> include that at the right point in qemu.nsi to set the mouse-over
> text.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> I opted to put the logic into the Python script, which I think
> many QEMU contributors understand, rather than investigating
> whether NSIS installer script magic might for instance allow
> us to write out only one file rather than two, since I think
> very few of us understand the NSIS installer...

Makes sense.

Python bits:

Reviewed-by: John Snow <jsnow@redhat.com>


> ---
>  qemu.nsi        |  5 +----
>  scripts/nsis.py | 13 ++++++++++++-
>  2 files changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/qemu.nsi b/qemu.nsi
> index a44d2be32a2..aa93adee396 100644
> --- a/qemu.nsi
> +++ b/qemu.nsi
> @@ -228,10 +228,7 @@ SectionEnd
>  ; Descriptions (mouse-over).
>  !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
>      !insertmacro MUI_DESCRIPTION_TEXT ${SectionSystem}  "System emulation."
> -    !insertmacro MUI_DESCRIPTION_TEXT ${Section_alpha}  "Alpha system emulation."
> -    !insertmacro MUI_DESCRIPTION_TEXT ${Section_alphaw} "Alpha system emulation (GUI)."
> -    !insertmacro MUI_DESCRIPTION_TEXT ${Section_i386}   "PC i386 system emulation."
> -    !insertmacro MUI_DESCRIPTION_TEXT ${Section_i386w}  "PC i386 system emulation (GUI)."
> +!include "${BINDIR}\system-mui-text.nsh"
>      !insertmacro MUI_DESCRIPTION_TEXT ${SectionTools} "Tools."
>  !ifdef DLLDIR
>      !insertmacro MUI_DESCRIPTION_TEXT ${SectionDll}   "Runtime Libraries (DLL)."
> diff --git a/scripts/nsis.py b/scripts/nsis.py
> index 383bef70332..462d6cac3b6 100644
> --- a/scripts/nsis.py
> +++ b/scripts/nsis.py
> @@ -33,7 +33,9 @@ def main():
>          subprocess.run(["make", "install", "DESTDIR=" + destdir + os.path.sep])
>          with open(
>              os.path.join(destdir + args.prefix, "system-emulations.nsh"), "w"
> -        ) as nsh:
> +        ) as nsh, open(
> +            os.path.join(destdir + args.prefix, "system-mui-text.nsh"), "w"
> +        ) as muinsh:
>              for exe in sorted(glob.glob(
>                  os.path.join(destdir + args.prefix, "qemu-system-*.exe")
>              )):
> @@ -49,6 +51,15 @@ def main():
>                          arch, exe
>                      )
>                  )
> +                if arch.endswith('w'):
> +                    desc = arch[:-1] + " emulation (GUI)."
> +                else:
> +                    desc = arch + " emulation."
> +
> +                muinsh.write(
> +                    """
> +                !insertmacro MUI_DESCRIPTION_TEXT ${{Section_{0}}} "{1}"
> +                """.format(arch, desc))
>
>          for exe in glob.glob(os.path.join(destdir + args.prefix, "*.exe")):
>              signcode(exe)
> --
> 2.25.1
>
diff mbox series

Patch

diff --git a/qemu.nsi b/qemu.nsi
index a44d2be32a2..aa93adee396 100644
--- a/qemu.nsi
+++ b/qemu.nsi
@@ -228,10 +228,7 @@  SectionEnd
 ; Descriptions (mouse-over).
 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
     !insertmacro MUI_DESCRIPTION_TEXT ${SectionSystem}  "System emulation."
-    !insertmacro MUI_DESCRIPTION_TEXT ${Section_alpha}  "Alpha system emulation."
-    !insertmacro MUI_DESCRIPTION_TEXT ${Section_alphaw} "Alpha system emulation (GUI)."
-    !insertmacro MUI_DESCRIPTION_TEXT ${Section_i386}   "PC i386 system emulation."
-    !insertmacro MUI_DESCRIPTION_TEXT ${Section_i386w}  "PC i386 system emulation (GUI)."
+!include "${BINDIR}\system-mui-text.nsh"
     !insertmacro MUI_DESCRIPTION_TEXT ${SectionTools} "Tools."
 !ifdef DLLDIR
     !insertmacro MUI_DESCRIPTION_TEXT ${SectionDll}   "Runtime Libraries (DLL)."
diff --git a/scripts/nsis.py b/scripts/nsis.py
index 383bef70332..462d6cac3b6 100644
--- a/scripts/nsis.py
+++ b/scripts/nsis.py
@@ -33,7 +33,9 @@  def main():
         subprocess.run(["make", "install", "DESTDIR=" + destdir + os.path.sep])
         with open(
             os.path.join(destdir + args.prefix, "system-emulations.nsh"), "w"
-        ) as nsh:
+        ) as nsh, open(
+            os.path.join(destdir + args.prefix, "system-mui-text.nsh"), "w"
+        ) as muinsh:
             for exe in sorted(glob.glob(
                 os.path.join(destdir + args.prefix, "qemu-system-*.exe")
             )):
@@ -49,6 +51,15 @@  def main():
                         arch, exe
                     )
                 )
+                if arch.endswith('w'):
+                    desc = arch[:-1] + " emulation (GUI)."
+                else:
+                    desc = arch + " emulation."
+
+                muinsh.write(
+                    """
+                !insertmacro MUI_DESCRIPTION_TEXT ${{Section_{0}}} "{1}"
+                """.format(arch, desc))
 
         for exe in glob.glob(os.path.join(destdir + args.prefix, "*.exe")):
             signcode(exe)