Browse Source

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>
Stefan Weil 7 months ago
parent
commit
b9eab5efc1
1 changed files with 5 additions and 5 deletions
  1. 5 5
      scripts/nsis.py

+ 5 - 5
scripts/nsis.py

@@ -37,10 +37,10 @@ def find_deps(exe_or_dll, search_path, analyzed_deps):
 
 
         analyzed_deps.add(dep)
         analyzed_deps.add(dep)
         # locate the dll dependencies recursively
         # 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)
         deps.extend(rdeps)
 
 
-    return deps
+    return analyzed_deps, deps
 
 
 def main():
 def main():
     parser = argparse.ArgumentParser(description="QEMU NSIS build helper.")
     parser = argparse.ArgumentParser(description="QEMU NSIS build helper.")
@@ -92,18 +92,18 @@ def main():
         dlldir = os.path.join(destdir + prefix, "dll")
         dlldir = os.path.join(destdir + prefix, "dll")
         os.mkdir(dlldir)
         os.mkdir(dlldir)
 
 
+        analyzed_deps = set()
         for exe in glob.glob(os.path.join(destdir + prefix, "*.exe")):
         for exe in glob.glob(os.path.join(destdir + prefix, "*.exe")):
             signcode(exe)
             signcode(exe)
 
 
             # find all dll dependencies
             # 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)
             deps.remove(exe)
 
 
             # copy all dlls to the DLLDIR
             # copy all dlls to the DLLDIR
             for dep in deps:
             for dep in deps:
                 dllfile = os.path.join(dlldir, os.path.basename(dep))
                 dllfile = os.path.join(dlldir, os.path.basename(dep))
-                if (os.path.exists(dllfile)):
-                    continue
                 print("Copying '%s' to '%s'" % (dep, dllfile))
                 print("Copying '%s' to '%s'" % (dep, dllfile))
                 shutil.copy(dep, dllfile)
                 shutil.copy(dep, dllfile)