diff options
author | John Ericson <git@JohnEricson.me> | 2018-10-05 11:37:43 -0400 |
---|---|---|
committer | John Ericson <git@JohnEricson.me> | 2018-10-05 23:31:15 -0400 |
commit | d69d2697cd24bd59181916f39c4284a7679b6da4 (patch) | |
tree | c37ce15ed6825842f51bec0b6996805277221f04 | |
parent | 2ff69b20df0864182fdf2b146d29dc67d0cb9a5b (diff) | |
download | meson-d69d2697cd24bd59181916f39c4284a7679b6da4.zip meson-d69d2697cd24bd59181916f39c4284a7679b6da4.tar.gz meson-d69d2697cd24bd59181916f39c4284a7679b6da4.tar.bz2 |
Pull out essence total map essence of MachineInfos into PerMachine
We'll eventually have many other data structure duplicated for each
build, host, and target machines. This sets up the infrastructure for
that.
-rw-r--r-- | mesonbuild/environment.py | 8 | ||||
-rw-r--r-- | mesonbuild/mesonlib.py | 49 |
2 files changed, 52 insertions, 5 deletions
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index f01ba38..fe06c36 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -17,7 +17,7 @@ import configparser, os, platform, re, sys, shlex, shutil, subprocess from . import coredata from .linkers import ArLinker, ArmarLinker, VisualStudioLinker, DLinker from . import mesonlib -from .mesonlib import EnvironmentException, Popen_safe +from .mesonlib import EnvironmentException, PerMachine, Popen_safe from . import mlog from . import compilers @@ -1147,11 +1147,9 @@ class MachineInfo: literal['cpu'], literal['endian']) -class MachineInfos: +class MachineInfos(PerMachine): def __init__(self): - self.build = None - self.host = None - self.target = None + super().__init__(None, None, None) def default_missing(self): """Default host to buid and target to host. diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 33900b6..0094a92 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -20,6 +20,8 @@ import stat import time import platform, subprocess, operator, os, shutil, re import collections +from enum import Enum + from mesonbuild import mlog have_fcntl = False @@ -277,6 +279,53 @@ def classify_unity_sources(compilers, sources): compsrclist[comp].append(src) return compsrclist +class OrderedEnum(Enum): + """ + An Enum which additionally offers homogeneous ordered comparison. + """ + def __ge__(self, other): + if self.__class__ is other.__class__: + return self.value >= other.value + return NotImplemented + + def __gt__(self, other): + if self.__class__ is other.__class__: + return self.value > other.value + return NotImplemented + + def __le__(self, other): + if self.__class__ is other.__class__: + return self.value <= other.value + return NotImplemented + + def __lt__(self, other): + if self.__class__ is other.__class__: + return self.value < other.value + return NotImplemented + +MachineChoice = OrderedEnum('MachineChoice', ['BUILD', 'HOST', 'TARGET']) + +class PerMachine: + def __init__(self, build, host, target): + self.build = build, + self.host = host + self.target = target + + def __getitem__(self, machine: MachineChoice): + return { + MachineChoice.BUILD: self.build, + MachineChoice.HOST: self.host, + MachineChoice.TARGET: self.target + }[machine] + + def __setitem__(self, machine: MachineChoice, val): + key = { + MachineChoice.BUILD: 'build', + MachineChoice.HOST: 'host', + MachineChoice.TARGET: 'target' + }[machine] + setattr(self, key, val) + def is_osx(): return platform.system().lower() == 'darwin' |