Commit b9eab5efc1 for qemu.org

commit b9eab5efc1a631b476656859beb8eaaa895eb202
Author: Stefan Weil <sw@weilnetz.de>
Date:   Thu Jan 16 16:03:06 2025 +0000

    scripts/nsis.py: Run dependency check for each DLL file only once

    Each DLL should only be checked once for dependencies, but
    several hundred (781 in my test) unneeded checks were done.

    Now the script is significantly faster (16 s in my build).

    Signed-off-by: Stefan Weil <sw@weilnetz.de>
    Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
    Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
    Message-Id: <20250111215244.1680931-1-sw@weilnetz.de>
    Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
    Message-Id: <20250116160306.1709518-38-alex.bennee@linaro.org>

diff --git a/scripts/nsis.py b/scripts/nsis.py
index 03ed7608a2..af4e064819 100644
--- a/scripts/nsis.py
+++ b/scripts/nsis.py
@@ -37,10 +37,10 @@ def find_deps(exe_or_dll, search_path, analyzed_deps):

         analyzed_deps.add(dep)
         # locate the dll dependencies recursively
-        rdeps = find_deps(dll, search_path, analyzed_deps)
+        analyzed_deps, rdeps = find_deps(dll, search_path, analyzed_deps)
         deps.extend(rdeps)

-    return deps
+    return analyzed_deps, deps

 def main():
     parser = argparse.ArgumentParser(description="QEMU NSIS build helper.")
@@ -92,18 +92,18 @@ def main():
         dlldir = os.path.join(destdir + prefix, "dll")
         os.mkdir(dlldir)

+        analyzed_deps = set()
         for exe in glob.glob(os.path.join(destdir + prefix, "*.exe")):
             signcode(exe)

             # find all dll dependencies
-            deps = set(find_deps(exe, search_path, set()))
+            analyzed_deps, deps = find_deps(exe, search_path, analyzed_deps)
+            deps = set(deps)
             deps.remove(exe)

             # copy all dlls to the DLLDIR
             for dep in deps:
                 dllfile = os.path.join(dlldir, os.path.basename(dep))
-                if (os.path.exists(dllfile)):
-                    continue
                 print("Copying '%s' to '%s'" % (dep, dllfile))
                 shutil.copy(dep, dllfile)