|
@@ -4,12 +4,13 @@ from pathlib import Path
|
|
|
from jinja2 import Template
|
|
|
|
|
|
from conan import ConanFile
|
|
|
-from conan.tools.files import copy, rmdir, save
|
|
|
+from conan.tools.files import copy, rmdir, save, mkdir
|
|
|
+from conan.tools.microsoft import unix_path
|
|
|
from conan.tools.env import VirtualRunEnv, Environment
|
|
|
from conan.tools.scm import Version
|
|
|
from conan.errors import ConanInvalidConfiguration, ConanException
|
|
|
|
|
|
-required_conan_version = ">=1.50.0"
|
|
|
+required_conan_version = ">=1.52.0"
|
|
|
|
|
|
|
|
|
class CuraConan(ConanFile):
|
|
@@ -274,6 +275,12 @@ class CuraConan(ConanFile):
|
|
|
for req in self._um_data()["internal_requirements"]:
|
|
|
self.requires(req)
|
|
|
|
|
|
+ def build_requirements(self):
|
|
|
+ if self.options.devtools:
|
|
|
+ if self.settings.os != "Windows" or self.conf.get("tools.microsoft.bash:path", check_type = str):
|
|
|
+ # FIXME: once m4, autoconf, automake are Conan V2 ready use self.win_bash and add gettext as base tool_requirement
|
|
|
+ self.tool_requires("gettext/0.21", force_host_context=True)
|
|
|
+
|
|
|
def layout(self):
|
|
|
self.folders.source = "."
|
|
|
self.folders.build = "venv"
|
|
@@ -284,7 +291,14 @@ class CuraConan(ConanFile):
|
|
|
self.cpp.package.resdirs = ["resources", "plugins", "packaging", "pip_requirements"] # pip_requirements should be the last item in the list
|
|
|
|
|
|
def build(self):
|
|
|
- pass
|
|
|
+ if self.options.devtools:
|
|
|
+ if self.settings.os != "Windows" or self.conf.get("tools.microsoft.bash:path", check_type = str):
|
|
|
+ # FIXME: once m4, autoconf, automake are Conan V2 ready use self.win_bash and add gettext as base tool_requirement
|
|
|
+ cpp_info = self.dependencies["gettext"].cpp_info
|
|
|
+ for po_file in self.source_path.joinpath("resources", "i18n").glob("**/*.po"):
|
|
|
+ mo_file = self.build_path.joinpath(po_file.with_suffix('.mo').relative_to(self.source_path))
|
|
|
+ mkdir(self, str(unix_path(self, mo_file.parent)))
|
|
|
+ self.run(f"{cpp_info.bindirs[0]}/msgfmt {po_file} -o {mo_file} -f", env="conanbuild", ignore_errors=True)
|
|
|
|
|
|
def generate(self):
|
|
|
cura_run_envvars = self._cura_run_env.vars(self, scope = "run")
|
|
@@ -303,6 +317,16 @@ class CuraConan(ConanFile):
|
|
|
icon_path = "'{}'".format(Path(self.source_folder, "packaging", self._um_data()["pyinstaller"]["icon"][str(self.settings.os)])).replace("\\", "\\\\"),
|
|
|
entitlements_file = entitlements_file if self.settings.os == "Macos" else "None")
|
|
|
|
|
|
+ # Update the po files
|
|
|
+ if self.settings.os != "Windows" or self.conf.get("tools.microsoft.bash:path", check_type = str):
|
|
|
+ # FIXME: once m4, autoconf, automake are Conan V2 ready use self.win_bash and add gettext as base tool_requirement
|
|
|
+ cpp_info = self.dependencies["gettext"].cpp_info
|
|
|
+ for po_file in self.source_path.joinpath("resources", "i18n").glob("**/*.po"):
|
|
|
+ pot_file = self.source_path.joinpath("resources", "i18n", po_file.with_suffix('.pot').name)
|
|
|
+ mkdir(self, str(unix_path(self, pot_file.parent)))
|
|
|
+ self.run(f"{cpp_info.bindirs[0]}/msgmerge --no-wrap --no-fuzzy-matching -width=140 -o {po_file} {po_file} {pot_file}",
|
|
|
+ env = "conanbuild", ignore_errors = True)
|
|
|
+
|
|
|
def imports(self):
|
|
|
self.copy("CuraEngine.exe", root_package = "curaengine", src = "@bindirs", dst = "", keep_path = False)
|
|
|
self.copy("CuraEngine", root_package = "curaengine", src = "@bindirs", dst = "", keep_path = False)
|
|
@@ -420,12 +444,13 @@ echo "CURA_VERSION_FULL={{ cura_version_full }}" >> ${{ env_prefix }}GITHUB_ENV
|
|
|
entitlements_file = entitlements_file if self.settings.os == "Macos" else "None")
|
|
|
|
|
|
def package(self):
|
|
|
- self.copy("cura_app.py", src = ".", dst = self.cpp.package.bindirs[0])
|
|
|
- self.copy("*", src = "cura", dst = self.cpp.package.libdirs[0])
|
|
|
- self.copy("*", src = "resources", dst = self.cpp.package.resdirs[0])
|
|
|
- self.copy("*", src = "plugins", dst = self.cpp.package.resdirs[1])
|
|
|
- self.copy("requirement*.txt", src = ".", dst = self.cpp.package.resdirs[-1])
|
|
|
- self.copy("*", src = "packaging", dst = self.cpp.package.resdirs[2])
|
|
|
+ copy(self, "cura_app.py", src = self.source_path, dst = self.package_path.joinpath(self.cpp.package.bindirs[0]))
|
|
|
+ copy(self, "*", src = self.source_path.joinpath("cura"), dst = self.package_path.joinpath(self.cpp.package.libdirs[0]))
|
|
|
+ copy(self, "*", src = self.source_path.joinpath("resources"), dst = self.package_path.joinpath(self.cpp.package.resdirs[0]), excludes="*.po")
|
|
|
+ copy(self, "*", src = self.build_path.joinpath("resources"), dst = self.package_path.joinpath(self.cpp.package.resdirs[0]))
|
|
|
+ copy(self, "*", src = self.source_path.joinpath("plugins"), dst = self.package_path.joinpath(self.cpp.package.resdirs[1]))
|
|
|
+ copy(self, "requirement*.txt", src = self.source_path, dst = self.package_path.joinpath(self.cpp.package.resdirs[-1]))
|
|
|
+ copy(self, "*", src = self.source_path.joinpath("packaging"), dst = self.package_path.joinpath(self.cpp.package.resdirs[2]))
|
|
|
|
|
|
def package_info(self):
|
|
|
self.user_info.pip_requirements = "requirements.txt"
|