aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r--mesonbuild/mesonlib.py77
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'