diff --git a/conanfile.py b/conanfile.py index 2dc934e253..32482ccf2f 100644 --- a/conanfile.py +++ b/conanfile.py @@ -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"