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.
pull/4326/head
John Ericson 7 years ago
parent 2ff69b20df
commit d69d2697cd
  1. 8
      mesonbuild/environment.py
  2. 49
      mesonbuild/mesonlib.py

@ -17,7 +17,7 @@ import configparser, os, platform, re, sys, shlex, shutil, subprocess
from . import coredata from . import coredata
from .linkers import ArLinker, ArmarLinker, VisualStudioLinker, DLinker from .linkers import ArLinker, ArmarLinker, VisualStudioLinker, DLinker
from . import mesonlib from . import mesonlib
from .mesonlib import EnvironmentException, Popen_safe from .mesonlib import EnvironmentException, PerMachine, Popen_safe
from . import mlog from . import mlog
from . import compilers from . import compilers
@ -1147,11 +1147,9 @@ class MachineInfo:
literal['cpu'], literal['cpu'],
literal['endian']) literal['endian'])
class MachineInfos: class MachineInfos(PerMachine):
def __init__(self): def __init__(self):
self.build = None super().__init__(None, None, None)
self.host = None
self.target = None
def default_missing(self): def default_missing(self):
"""Default host to buid and target to host. """Default host to buid and target to host.

@ -20,6 +20,8 @@ import stat
import time import time
import platform, subprocess, operator, os, shutil, re import platform, subprocess, operator, os, shutil, re
import collections import collections
from enum import Enum
from mesonbuild import mlog from mesonbuild import mlog
have_fcntl = False have_fcntl = False
@ -277,6 +279,53 @@ def classify_unity_sources(compilers, sources):
compsrclist[comp].append(src) compsrclist[comp].append(src)
return compsrclist 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(): def is_osx():
return platform.system().lower() == 'darwin' return platform.system().lower() == 'darwin'

Loading…
Cancel
Save