diff --git a/lmod_manager/lmod_manager.py b/lmod_manager/lmod_manager.py index 06a5eb7..5609151 100755 --- a/lmod_manager/lmod_manager.py +++ b/lmod_manager/lmod_manager.py @@ -58,6 +58,8 @@ class Tool: @staticmethod def from_archive(archive: Path) -> Tool: + if archive.name.startswith(GnatProRust.archive_name()): + return GnatProRust(archive) if archive.name.startswith(Gnat.archive_name()): return Gnat(archive) if archive.name.startswith(Spark.archive_name()): @@ -72,6 +74,8 @@ class Tool: @staticmethod def from_module(module_name: str) -> Tool: + if module_name.startswith(GnatProRust.name()): + return GnatProRust(module_name=module_name) if module_name.startswith(Gnat.name()): return Gnat(module_name=module_name) if module_name.startswith(Spark.name()): @@ -255,6 +259,27 @@ class Rust(Tool): ) +class GnatProRust(Tool): + @staticmethod + def name() -> str: + return "gnatpro-rust" + + @staticmethod + def archive_name() -> str: + return "gnatpro-rust" + + @staticmethod + def _installation_file() -> Path: + return Path("bin/rustc") + + def _install_archive(self, installation_dir: Path) -> None: + call( + f"./install --install-dir='{installation_dir}' --force", + cwd=self._extracted_archive_dir(), + shell=True, + ) + + def main() -> Union[int, str]: parser = argparse.ArgumentParser() diff --git a/tests/data/gnatpro-rust-25.0w-20240820-x86_64-linux-bin.tar.gz b/tests/data/gnatpro-rust-25.0w-20240820-x86_64-linux-bin.tar.gz new file mode 100644 index 0000000..866e57f Binary files /dev/null and b/tests/data/gnatpro-rust-25.0w-20240820-x86_64-linux-bin.tar.gz differ diff --git a/tests/lmod_manager_test.py b/tests/lmod_manager_test.py index 3341f18..f05a18f 100644 --- a/tests/lmod_manager_test.py +++ b/tests/lmod_manager_test.py @@ -240,6 +240,13 @@ def test_install_unexpected_archive_name_format(monkeypatch: MonkeyPatch, tmp_pa "25.0w-20240417", ), ], + [ + Archive( + "gnatpro-rust-25.0w-20240820-x86_64-linux-bin.tar.gz", + "gnatpro-rust", + "25.0w-20240820", + ), + ], ], ) def test_install_and_uninstall(