aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ericson <git@JohnEricson.me>2018-10-05 11:37:43 -0400
committerJohn Ericson <git@JohnEricson.me>2018-10-05 23:31:15 -0400
commitd69d2697cd24bd59181916f39c4284a7679b6da4 (patch)
treec37ce15ed6825842f51bec0b6996805277221f04
parent2ff69b20df0864182fdf2b146d29dc67d0cb9a5b (diff)
downloadmeson-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.py8
-rw-r--r--mesonbuild/mesonlib.py49
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'