Merge pull request #13596 from Ultimaker/boyscout_translations_conan_package

Build mo translation files when creating conan package
This commit is contained in:
Remco Burema 2022-11-11 13:44:33 +01:00 committed by GitHub
commit c9fc171776
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,12 +4,13 @@ from pathlib import Path
from jinja2 import Template from jinja2 import Template
from conan import ConanFile 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.env import VirtualRunEnv, Environment
from conan.tools.scm import Version from conan.tools.scm import Version
from conan.errors import ConanInvalidConfiguration, ConanException from conan.errors import ConanInvalidConfiguration, ConanException
required_conan_version = ">=1.50.0" required_conan_version = ">=1.52.0"
class CuraConan(ConanFile): class CuraConan(ConanFile):
@ -274,6 +275,12 @@ class CuraConan(ConanFile):
for req in self._um_data()["internal_requirements"]: for req in self._um_data()["internal_requirements"]:
self.requires(req) 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): def layout(self):
self.folders.source = "." self.folders.source = "."
self.folders.build = "venv" 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 self.cpp.package.resdirs = ["resources", "plugins", "packaging", "pip_requirements"] # pip_requirements should be the last item in the list
def build(self): 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): def generate(self):
cura_run_envvars = self._cura_run_env.vars(self, scope = "run") 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("\\", "\\\\"), 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") 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): def imports(self):
self.copy("CuraEngine.exe", root_package = "curaengine", src = "@bindirs", dst = "", keep_path = False) 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) 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") entitlements_file = entitlements_file if self.settings.os == "Macos" else "None")
def package(self): def package(self):
self.copy("cura_app.py", src = ".", dst = self.cpp.package.bindirs[0]) copy(self, "cura_app.py", src = self.source_path, dst = self.package_path.joinpath(self.cpp.package.bindirs[0]))
self.copy("*", src = "cura", dst = self.cpp.package.libdirs[0]) copy(self, "*", src = self.source_path.joinpath("cura"), dst = self.package_path.joinpath(self.cpp.package.libdirs[0]))
self.copy("*", src = "resources", dst = self.cpp.package.resdirs[0]) copy(self, "*", src = self.source_path.joinpath("resources"), dst = self.package_path.joinpath(self.cpp.package.resdirs[0]), excludes="*.po")
self.copy("*", src = "plugins", dst = self.cpp.package.resdirs[1]) copy(self, "*", src = self.build_path.joinpath("resources"), dst = self.package_path.joinpath(self.cpp.package.resdirs[0]))
self.copy("requirement*.txt", src = ".", dst = self.cpp.package.resdirs[-1]) copy(self, "*", src = self.source_path.joinpath("plugins"), dst = self.package_path.joinpath(self.cpp.package.resdirs[1]))
self.copy("*", src = "packaging", dst = self.cpp.package.resdirs[2]) 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): def package_info(self):
self.user_info.pip_requirements = "requirements.txt" self.user_info.pip_requirements = "requirements.txt"