Build mo translation files when creating conan package

Added a build step which uses the Conan package gettext as a tool_requires
to convert the po files to mo files and store these in the resources folder

When on Windows the msys2 recipe is used to ensure that we have a bash environment
to run gnu gettext

Creating the mo files as part of the conan package will ensures that we no longer
need to store them in the cura-binary-data and generate them manually. This should
result in less risk of human error during the release cycle
This commit is contained in:
jelle Spijker 2022-10-19 01:45:18 +02:00 committed by Jelle Spijker
parent 1f5336805c
commit 96363c652a
No known key found for this signature in database
GPG key ID: 6662DC033BE6B99A

View file

@ -4,7 +4,8 @@ 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
@ -274,6 +275,11 @@ class CuraConan(ConanFile):
for req in self._um_data()["internal_requirements"]:
self.requires(req)
def build_requirements(self):
if self.settings_build.os == "Windows" and not self.conf.get("tools.microsoft.bash:path", default=False, check_type=bool):
self.tool_requires("msys2/cci.latest")
self.tool_requires("gettext/0.21")
def layout(self):
self.folders.source = "."
self.folders.build = "venv"
@ -284,7 +290,15 @@ 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.settings.os == "Windows":
self.win_bash = True # We need gettext, which requires the bash environment
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"msgfmt {po_file} -o {mo_file} -f", env="conanbuild")
self.win_bash = None
def generate(self):
cura_run_envvars = self._cura_run_env.vars(self, scope = "run")
@ -418,12 +432,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"