mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-11 18:09:02 +08:00
Copy resources to to correct paths
Still WIP, but needs to be committed due to not copying sources (1gb saving) Contributes to CURA-9365
This commit is contained in:
parent
8a905fcb7d
commit
705231d56a
91
conanfile.py
91
conanfile.py
@ -1,14 +1,18 @@
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from io import StringIO
|
||||
|
||||
from platform import python_version
|
||||
|
||||
from jinja2 import Template
|
||||
|
||||
from conan import ConanFile
|
||||
from conan.tools import files
|
||||
from conan.tools.env import VirtualRunEnv
|
||||
from conans import tools
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
from conan.errors import ConanInvalidConfiguration, ConanException
|
||||
|
||||
required_conan_version = ">=1.47.0"
|
||||
|
||||
@ -21,8 +25,7 @@ class CuraConan(ConanFile):
|
||||
description = "3D printer / slicing GUI built on top of the Uranium framework"
|
||||
topics = ("conan", "python", "pyqt5", "qt", "qml", "3d-printing", "slicer")
|
||||
build_policy = "missing"
|
||||
exports = "LICENSE*", "Ultimaker-Cura.spec.jinja"
|
||||
exports_sources = "CuraVersion.py.jinja"
|
||||
exports = "LICENSE*", "Ultimaker-Cura.spec.jinja", "CuraVersion.py.jinja", "requirements.txt", "requirements-dev.txt", "requirements-ultimaker.txt"
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
no_copy_source = True # We won't build so no need to copy sources to the build folder
|
||||
|
||||
@ -54,6 +57,12 @@ class CuraConan(ConanFile):
|
||||
"revision": "auto"
|
||||
}
|
||||
|
||||
@property
|
||||
def _venv_path(self):
|
||||
if self.settings.os == "Windows":
|
||||
return "Scripts"
|
||||
return "bin"
|
||||
|
||||
@property
|
||||
def _staging(self):
|
||||
return self.options.staging in ["True", 'true']
|
||||
@ -183,18 +192,84 @@ class CuraConan(ConanFile):
|
||||
self.copy("*.dylib", src = "@libdirs", dst = "venv/bin")
|
||||
|
||||
def deploy(self):
|
||||
self.copy_deps("CuraEngine.exe", root_package = "curaengine", src = "@bindirs", dst = "", keep_path = False)
|
||||
self.copy_deps("CuraEngine", root_package = "curaengine", src = "@bindirs", dst = "", keep_path = False)
|
||||
# Setup the Virtual Python Environment in the user space
|
||||
python_interpreter = Path(self.deps_user_info["cpython"].python)
|
||||
|
||||
self.copy_deps("*.fdm_material", root_package = "fdm_materials", src = "@resdirs", dst = "resources/materials", keep_path = False)
|
||||
self.copy_deps("*.sig", root_package = "fdm_materials", src = "@resdirs", dst = "resources/materials", keep_path = False)
|
||||
# When on Windows execute as Windows Path
|
||||
if self.settings.os == "Windows":
|
||||
python_interpreter = Path(*[f'"{p}"' if " " in p else p for p in python_interpreter.parts])
|
||||
|
||||
# Create the virtual environment
|
||||
self.run(f"""{python_interpreter} -m venv {self.install_folder}""", run_environment = True, env = "conanrun")
|
||||
|
||||
# Make sure there executable is named the same on all three OSes this allows it to be called with `python`
|
||||
# simplifying GH Actions steps
|
||||
if self.settings.os != "Windows":
|
||||
python_venv_interpreter = Path(self.install_folder, self._venv_path, "python")
|
||||
if not python_venv_interpreter.exists():
|
||||
python_venv_interpreter.hardlink_to(Path(self.install_folder, self._venv_path, Path(sys.executable).stem + Path(sys.executable).suffix))
|
||||
else:
|
||||
python_venv_interpreter = Path(self.install_folder, self._venv_path, Path(sys.executable).stem + Path(sys.executable).suffix)
|
||||
|
||||
if not python_venv_interpreter.exists():
|
||||
raise ConanException(f"Virtual environment Python interpreter not found at: {python_venv_interpreter}")
|
||||
if self.settings.os == "Windows":
|
||||
python_venv_interpreter = Path(*[f'"{p}"' if " " in p else p for p in python_venv_interpreter.parts])
|
||||
|
||||
buffer = StringIO()
|
||||
outer = '"' if self.settings.os == "Windows" else "'"
|
||||
inner = "'" if self.settings.os == "Windows" else '"'
|
||||
self.run(f"{python_venv_interpreter} -c {outer}import sysconfig; print(sysconfig.get_path({inner}purelib{inner})){outer}",
|
||||
env = "conanrun",
|
||||
output = buffer)
|
||||
pythonpath = buffer.getvalue().splitlines()[-1]
|
||||
|
||||
run_env = VirtualRunEnv(self)
|
||||
env = run_env.environment()
|
||||
|
||||
env.define_path("VIRTUAL_ENV", self.install_folder)
|
||||
env.prepend_path("PATH", os.path.join(self.install_folder, self._venv_path))
|
||||
env.prepend_path("PYTHONPATH", pythonpath)
|
||||
env.unset("PYTHONHOME")
|
||||
|
||||
envvars = env.vars(self.conanfile, scope = "run")
|
||||
|
||||
# Install some base_packages
|
||||
self.run(f"""{python_venv_interpreter} -m pip install wheel setuptools""", run_environment = True, env = "conanrun")
|
||||
|
||||
# Install the requirements*.text
|
||||
# TODO: loop through dependencies and go over each requirement file per dependency (maybe we should add this to the conandata, or
|
||||
# define cpp_user_info in dependencies
|
||||
|
||||
# Copy CuraEngine.exe to bindirs of Virtual Python Environment
|
||||
# TODO: Fix source such that it will get the curaengine relative from the executable (Python bindir in this case)
|
||||
self.copy_deps("CuraEngine.exe", root_package = "curaengine", src = "@bindirs",
|
||||
dst = os.path.join(self.install_folder, self._venv_path), keep_path = False)
|
||||
self.copy_deps("CuraEngine", root_package = "curaengine", src = "@bindirs",
|
||||
dst = os.path.join(self.install_folder, self._venv_path), keep_path = False)
|
||||
|
||||
# Copy resources of Cura (keep folder structure)
|
||||
self.copy_deps("*", root_package = "cura", src = "@resdirs", dst = os.path.join(self.install_folder, "share", "cura", "resources"),
|
||||
keep_path = True)
|
||||
|
||||
# Copy materials (flat)
|
||||
self.copy_deps("*.fdm_material", root_package = "fdm_materials", src = "@resdirs",
|
||||
dst = os.path.join(self.install_folder, "share", "cura", "resources", "materials"), keep_path = False)
|
||||
self.copy_deps("*.sig", root_package = "fdm_materials", src = "@resdirs",
|
||||
dst = os.path.join(self.install_folder, "share", "cura", "resources", "materials"), keep_path = False)
|
||||
|
||||
# Copy resources of Uranium (keep folder structure)
|
||||
self.copy_deps("*", root_package = "uranium", src = "@resdirs",
|
||||
dst = os.path.join(self.install_folder, "share", "cura", "resources"), keep_path = True)
|
||||
|
||||
# Copy dynamic libs to site-packages
|
||||
self.copy_deps("*.dll", src = "@bindirs", dst = "venv/Lib/site-packages")
|
||||
self.copy_deps("*.pyd", src = "@libdirs", dst = "venv/Lib/site-packages")
|
||||
self.copy_deps("*.pyi", src = "@libdirs", dst = "venv/Lib/site-packages")
|
||||
self.copy_deps("*.dylib", src = "@libdirs", dst = "venv/bin")
|
||||
|
||||
with open(Path("CuraVersion.py.jinja"), "r") as f:
|
||||
# Make sure the CuraVersion.py is up to date with the correct settings
|
||||
with open(Path(Path(__file__).parent, "CuraVersion.py.jinja"), "r") as f:
|
||||
cura_version_py = Template(f.read())
|
||||
|
||||
# TODO: Extend
|
||||
|
Loading…
x
Reference in New Issue
Block a user