Browse Source

Fix adding all shared libs managed by Conan to pyinstaller

Closes #13422

Contributes to CURA-9711
jelle Spijker 2 years ago
parent
commit
ca90ac7787
2 changed files with 9 additions and 17 deletions
  1. 0 11
      conandata.yml
  2. 9 6
      conanfile.py

+ 0 - 11
conandata.yml

@@ -220,7 +220,6 @@
             Windows: "./icons/Cura.ico"
             Macos: "./icons/cura.icns"
             Linux: "./icons/cura-128.png"
-
 "5.2.0-beta.1":
     requirements:
         - "pyarcus/5.2.0-beta.1"
@@ -298,16 +297,6 @@
                 src: "bin"
                 dst: "."
                 binary: "CuraEngine"
-            spdlog:
-                package: "spdlog"
-                src: "lib"
-                dst: "."
-                binary: "libspdlog"
-            fmt:
-                package: "fmt"
-                src: "lib"
-                dst: "."
-                binary: "libfmt"
         hiddenimports:
             - "pySavitar"
             - "pyArcus"

+ 9 - 6
conanfile.py

@@ -216,14 +216,17 @@ class CuraConan(ConanFile):
             for bin in src_path.glob(binary["binary"]):
                 binaries.append((str(bin), binary["dst"]))
 
-        for _, dependency in self.dependencies.items():
-            for bin_paths in dependency.cpp_info.bindirs:
-                binaries.extend([(f"{p}", ".") for p in Path(bin_paths).glob("**/*.dll")])
-                binaries.extend([(f"{p}", ".") for p in Path(bin_paths).glob("**/*.dylib")])
-                binaries.extend([(f"{p}", ".") for p in Path(bin_paths).glob("**/*.so")])
+        # Make sure all Conan dependencies which are shared are added to the binary list for pyinstaller
+        for _, dependency in self.dependencies.host.items():
+            if hasattr(dependency.options, "shared") and dependency.options.shared:
+                for bin_paths in dependency.cpp_info.bindirs:
+                    binaries.extend([(f"{p}", ".") for p in Path(bin_paths).glob("**/*")])
+                for lib_paths in dependency.cpp_info.libdirs:
+                    binaries.extend([(f"{p}", ".") for p in Path(lib_paths).glob("**/*")])
 
         # Copy dynamic libs from lib path
-        binaries.extend([(f"{p}", ".") for p in Path(self._base_dir.joinpath("lib")).glob("**/*.dylib")])
+        binaries.extend([(f"{p}", ".") for p in Path(self._base_dir.joinpath("lib")).glob("**/*.dylib*")])
+        binaries.extend([(f"{p}", ".") for p in Path(self._base_dir.joinpath("lib")).glob("**/*.so*")])
 
         # Collect all dll's from PyQt6 and place them in the root
         binaries.extend([(f"{p}", ".") for p in Path(self._site_packages, "PyQt6", "Qt6").glob("**/*.dll")])