diff options
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r-- | mesonbuild/mesonlib.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 2c563e4..e0f48f5 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -14,11 +14,13 @@ """A library of random helper functionality.""" from pathlib import Path +import copy import sys import stat import time import platform, subprocess, operator, os, shlex, shutil, re import collections +import enum from enum import Enum from functools import lru_cache, wraps from itertools import tee, filterfalse @@ -375,6 +377,12 @@ class PerMachine(T.Generic[_T]): def __setitem__(self, machine: MachineChoice, val: _T) -> None: setattr(self, machine.get_lower_case_name(), val) + def map(self, fun): + return PerMachine( + fun(self.build), + fun(self.host), + ) + def miss_defaulting(self) -> "PerMachineDefaultable[T.Optional[_T]]": """Unset definition duplicated from their previous to None @@ -473,6 +481,75 @@ class PerThreeMachineDefaultable(PerMachineDefaultable, PerThreeMachine[T.Option return 'PerThreeMachineDefaultable({!r}, {!r}, {!r})'.format(self.build, self.host, self.target) +class Language(Enum): + + """Enum class representing the languages Meson supports. + """ + + # Alphabetized for now, but order comparisons explicitly disallowed so it + # shouldn't matter. + C = enum.auto() + CPP = enum.auto() + CS = enum.auto() + CUDA = enum.auto() + D = enum.auto() + FORTRAN = enum.auto() + JAVA = enum.auto() + OBJC = enum.auto() + OBJCPP = enum.auto() + RUST = enum.auto() + SWIFT = enum.auto() + VALA = enum.auto() + + def get_lower_case_name(self) -> str: + return { + Language.C: 'c', + Language.CPP: 'cpp', + Language.CS: 'cs', + Language.CUDA: 'cuda', + Language.D: 'd', + Language.FORTRAN: 'fortran', + Language.JAVA: 'java', + Language.OBJC: 'objc', + Language.OBJCPP: 'objcpp', + Language.RUST: 'rust', + Language.SWIFT: 'swift', + Language.VALA: 'vala', + }[self] + + @classmethod + def from_lower_case_name(cls, lang_name: str) -> T.Optional['Language']: + return { + 'c': Language.C, + 'cpp': Language.CPP, + 'cs': Language.CS, + 'cuda': Language.CUDA, + 'd': Language.D, + 'fortran': Language.FORTRAN, + 'java': Language.JAVA, + 'objc': Language.OBJC, + 'objcpp': Language.OBJCPP, + 'rust': Language.RUST, + 'swift': Language.SWIFT, + 'vala': Language.VALA, + }.get(lang_name, None) + + def get_display_name(self) -> str: + return { + Language.C: 'C', + Language.CPP: 'C++', + Language.CS: 'C#', + Language.CUDA: 'Cuda', + Language.D: 'D', + Language.FORTRAN: 'Fortran', + Language.JAVA: 'Java', + Language.OBJC: 'Objective-C', + Language.OBJCPP: 'Objective-C++', + Language.RUST: 'Rust', + Language.SWIFT: 'Swift', + Language.VALA: 'Vala', + }[self] + def is_sunos() -> bool: return platform.system().lower() == 'sunos' |