I made a hash of that minor merge
Merge commit '4eeb' into features/newarch
This commit is contained in:
		@@ -73,16 +73,14 @@ def _to_dict(compiler):
 | 
			
		||||
    d = {}
 | 
			
		||||
    d['spec'] = str(compiler.spec)
 | 
			
		||||
    d['paths'] = dict( (attr, getattr(compiler, attr, None)) for attr in _path_instance_vars )
 | 
			
		||||
    d['operating_system'] = compiler.operating_system.to_dict()
 | 
			
		||||
    d['operating_system'] = str(compiler.operating_system)
 | 
			
		||||
    d['modules'] = compiler.modules
 | 
			
		||||
 | 
			
		||||
    if not compiler.alias:
 | 
			
		||||
        yaml_text = yaml.dump(
 | 
			
		||||
            d, default_flow_style=True, width=sys.maxint)
 | 
			
		||||
        sha = hashlib.sha1(yaml_text)
 | 
			
		||||
        compiler.alias = base64.b32encode(sha.digest()).lower()[:8]
 | 
			
		||||
    if compiler.alias:
 | 
			
		||||
        d['alias'] = compiler.alias
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
            compiler.alias: d
 | 
			
		||||
            'compiler': d
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -91,11 +89,11 @@ def get_compiler_config(scope=None):
 | 
			
		||||
    """
 | 
			
		||||
    def init_compiler_config():
 | 
			
		||||
        """Compiler search used when Spack has no compilers."""
 | 
			
		||||
        config = {}
 | 
			
		||||
        compilers = find_compilers()
 | 
			
		||||
        compilers_dict = []
 | 
			
		||||
        for compiler in compilers:
 | 
			
		||||
            config.update(_to_dict(compiler))
 | 
			
		||||
        spack.config.update_config('compilers', config, scope=scope)
 | 
			
		||||
            compilers_dict.append(_to_dict(compiler))
 | 
			
		||||
        spack.config.update_config('compilers', compilers_dict, scope=scope)
 | 
			
		||||
 | 
			
		||||
    config = spack.config.get_config('compilers', scope=scope)
 | 
			
		||||
    # Update the configuration if there are currently no compilers
 | 
			
		||||
@@ -127,7 +125,7 @@ def add_compilers_to_config(compilers, scope=None):
 | 
			
		||||
    """
 | 
			
		||||
    compiler_config = get_compiler_config(scope)
 | 
			
		||||
    for compiler in compilers:
 | 
			
		||||
        compiler_config = _to_dict(compiler)
 | 
			
		||||
        compiler_config.append(_to_dict(compiler))
 | 
			
		||||
 | 
			
		||||
    spack.config.update_config('compilers', compiler_config, scope)
 | 
			
		||||
 | 
			
		||||
@@ -167,8 +165,8 @@ def all_compilers_config(scope=None):
 | 
			
		||||
 | 
			
		||||
def all_compilers(scope=None):
 | 
			
		||||
    # Return compiler specs from the merged config.
 | 
			
		||||
    return [spack.spec.CompilerSpec(s['spec'])
 | 
			
		||||
            for s in all_compilers_config(scope).values()]
 | 
			
		||||
    return [spack.spec.CompilerSpec(s['compiler']['spec'])
 | 
			
		||||
            for s in all_compilers_config(scope)]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def default_compiler():
 | 
			
		||||
@@ -230,11 +228,10 @@ def compilers_for_spec(compiler_spec, scope=None, **kwargs):
 | 
			
		||||
    def get_compilers(cspec):
 | 
			
		||||
        compilers = []
 | 
			
		||||
 | 
			
		||||
        for aka, cmp in config.items():
 | 
			
		||||
            if cmp['spec'] != str(cspec):
 | 
			
		||||
        for items in config:
 | 
			
		||||
            if items['compiler']['spec'] != str(cspec):
 | 
			
		||||
                continue
 | 
			
		||||
            items = cmp
 | 
			
		||||
            alias = aka
 | 
			
		||||
            items = items['compiler']
 | 
			
		||||
        
 | 
			
		||||
            if not ('paths' in items and all(n in items['paths'] for n in _path_instance_vars)):
 | 
			
		||||
                raise InvalidCompilerConfigurationError(cspec)
 | 
			
		||||
@@ -258,6 +255,9 @@ def get_compilers(cspec):
 | 
			
		||||
            else:
 | 
			
		||||
                operating_system = None
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            alias = items['alias'] if 'alias' in items else None
 | 
			
		||||
 | 
			
		||||
            flags = {}
 | 
			
		||||
            for f in spack.spec.FlagMap.valid_compiler_flags():
 | 
			
		||||
                if f in items:
 | 
			
		||||
 
 | 
			
		||||
@@ -146,11 +146,9 @@
 | 
			
		||||
        'additionalProperties': False,
 | 
			
		||||
        'patternProperties': {
 | 
			
		||||
            'compilers:?': {  # optional colon for overriding site config.
 | 
			
		||||
                'type': 'object',
 | 
			
		||||
                'default': {},
 | 
			
		||||
                'additionalProperties': False,
 | 
			
		||||
                'patternProperties': {
 | 
			
		||||
                    r'\w[\w-]*': {   # alias
 | 
			
		||||
                'type': 'array',
 | 
			
		||||
                'items': {
 | 
			
		||||
                    'compiler': {
 | 
			
		||||
                        'type': 'object',
 | 
			
		||||
                        'additionalProperties': False,
 | 
			
		||||
                        'required': ['paths', 'spec', 'modules', 'operating_system'],
 | 
			
		||||
@@ -180,15 +178,10 @@
 | 
			
		||||
                                                        {'type' : 'null' }]},
 | 
			
		||||
                                    'ldlibs': { 'anyOf': [ {'type' : 'string' },
 | 
			
		||||
                                                        {'type' : 'null' }]}}},
 | 
			
		||||
                            'spec': { 'type': 'string'},#r'\w[\w-]*@\w[\w-]*'
 | 
			
		||||
                            'operating_system': {
 | 
			
		||||
                                'type': 'object',
 | 
			
		||||
                                'required': ['name', 'version'],
 | 
			
		||||
                                'additionalProperties': False,
 | 
			
		||||
                                'properties': {
 | 
			
		||||
                                    'name': {'type': 'string'},
 | 
			
		||||
                                    'version': {'type': 'string'}
 | 
			
		||||
                                    }},
 | 
			
		||||
                            'spec': { 'type': 'string'},
 | 
			
		||||
                            'operating_system': { 'type': 'string'},
 | 
			
		||||
                            'alias': { 'anyOf': [ {'type' : 'string'},
 | 
			
		||||
                                                    {'type' : 'null' }]},
 | 
			
		||||
                            'modules': { 'anyOf': [ {'type' : 'string'},
 | 
			
		||||
                                                    {'type' : 'null' },
 | 
			
		||||
                                                    {'type': 'array'},
 | 
			
		||||
@@ -591,8 +584,7 @@ def they_are(t):
 | 
			
		||||
 | 
			
		||||
    # Source list is prepended (for precedence)
 | 
			
		||||
    if they_are(list):
 | 
			
		||||
        seen = set(source)
 | 
			
		||||
        dest[:] = source + [x for x in dest if x not in seen]
 | 
			
		||||
        dest[:] = source + [x for x in dest if x not in source]
 | 
			
		||||
        return dest
 | 
			
		||||
 | 
			
		||||
    # Source dict is merged into dest.
 | 
			
		||||
 
 | 
			
		||||
@@ -32,8 +32,8 @@
 | 
			
		||||
from spack.test.mock_packages_test import *
 | 
			
		||||
 | 
			
		||||
# Some sample compiler config data
 | 
			
		||||
a_comps =  {
 | 
			
		||||
    'gcc473': {
 | 
			
		||||
a_comps =  [
 | 
			
		||||
    {'compiler': {
 | 
			
		||||
        'paths': {
 | 
			
		||||
            "cc" : "/gcc473",
 | 
			
		||||
            "cxx": "/g++473",
 | 
			
		||||
@@ -42,12 +42,9 @@
 | 
			
		||||
            },
 | 
			
		||||
        'modules': None,
 | 
			
		||||
        'spec': 'gcc@4.7.3',
 | 
			
		||||
        'operating_system': {
 | 
			
		||||
            'name': 'CNL',
 | 
			
		||||
            'version': '10'
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
    'gcc450': {
 | 
			
		||||
        'operating_system': 'CNL10'
 | 
			
		||||
        }},
 | 
			
		||||
    {'compiler': {
 | 
			
		||||
        'paths': {
 | 
			
		||||
            "cc" : "/gcc450",
 | 
			
		||||
            "cxx": "/g++450",
 | 
			
		||||
@@ -56,12 +53,9 @@
 | 
			
		||||
            },
 | 
			
		||||
        'modules': None,
 | 
			
		||||
        'spec': 'gcc@4.5.0',
 | 
			
		||||
        'operating_system': {
 | 
			
		||||
            'name': 'CNL',
 | 
			
		||||
            'version': '10'
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
    'clang33': {
 | 
			
		||||
        'operating_system': 'CNL10'
 | 
			
		||||
        }},
 | 
			
		||||
    {'compiler': {
 | 
			
		||||
        'paths': {
 | 
			
		||||
            "cc" : "<overwritten>",
 | 
			
		||||
            "cxx": "<overwritten>",
 | 
			
		||||
@@ -69,15 +63,12 @@
 | 
			
		||||
            "fc" : '<overwritten>' },
 | 
			
		||||
        'modules': None,
 | 
			
		||||
        'spec': 'clang@3.3',
 | 
			
		||||
        'operating_system': {
 | 
			
		||||
            'name': 'CNL',
 | 
			
		||||
            'version': '10'
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
        'operating_system': 'CNL10'
 | 
			
		||||
        }}
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
b_comps = {
 | 
			
		||||
    'icc100': {
 | 
			
		||||
b_comps = [
 | 
			
		||||
    {'compiler': {
 | 
			
		||||
        'paths': {
 | 
			
		||||
            "cc" : "/icc100",
 | 
			
		||||
            "cxx": "/icp100",
 | 
			
		||||
@@ -86,12 +77,9 @@
 | 
			
		||||
            },
 | 
			
		||||
        'modules': None,
 | 
			
		||||
        'spec': 'icc@10.0',
 | 
			
		||||
        'operating_system': {
 | 
			
		||||
            'name': 'CNL',
 | 
			
		||||
            'version': '10'
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
    'icc111': {
 | 
			
		||||
        'operating_system': 'CNL10'
 | 
			
		||||
        }},
 | 
			
		||||
    {'compiler': {
 | 
			
		||||
        'paths': {
 | 
			
		||||
            "cc" : "/icc111",
 | 
			
		||||
            "cxx": "/icp111",
 | 
			
		||||
@@ -100,12 +88,9 @@
 | 
			
		||||
            },
 | 
			
		||||
        'modules': None,
 | 
			
		||||
        'spec': 'icc@11.1',
 | 
			
		||||
        'operating_system': {
 | 
			
		||||
            'name': 'CNL',
 | 
			
		||||
            'version': '10'
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
    'clang33': {
 | 
			
		||||
        'operating_system': 'CNL10'
 | 
			
		||||
        }},
 | 
			
		||||
    {'compiler': {
 | 
			
		||||
        'paths': {
 | 
			
		||||
            "cc" : "<overwritten>",
 | 
			
		||||
            "cxx": "<overwritten>",
 | 
			
		||||
@@ -113,12 +98,9 @@
 | 
			
		||||
            "fc" : '<overwritten>' },
 | 
			
		||||
        'modules': None,
 | 
			
		||||
        'spec': 'clang@3.3',
 | 
			
		||||
        'operating_system': {
 | 
			
		||||
            'name': 'CNL',
 | 
			
		||||
            'version': '10'
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
        'operating_system': 'CNL10'
 | 
			
		||||
        }}
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# Some Sample repo data
 | 
			
		||||
repos_low = [ "/some/path" ]
 | 
			
		||||
@@ -143,15 +125,21 @@ def check_config(self, comps, *compiler_names):
 | 
			
		||||
        config = spack.config.get_config('compilers')
 | 
			
		||||
        compiler_list = ['cc', 'cxx', 'f77', 'fc']
 | 
			
		||||
        param_list = ['modules', 'paths', 'spec', 'operating_system']
 | 
			
		||||
        for alias, compiler in config.items():
 | 
			
		||||
            if compiler['spec'] in compiler_names:
 | 
			
		||||
        for compiler in config:
 | 
			
		||||
            conf = compiler['compiler']
 | 
			
		||||
            if conf['spec'] in compiler_names:
 | 
			
		||||
                comp = None
 | 
			
		||||
                for c in comps:
 | 
			
		||||
                    if c['compiler']['spec'] == conf['spec']:
 | 
			
		||||
                        comp = c['compiler']
 | 
			
		||||
                        break
 | 
			
		||||
                if not comp:
 | 
			
		||||
                    self.fail('Bad config spec')
 | 
			
		||||
                for p in param_list:
 | 
			
		||||
                    expected = comps[alias][p]
 | 
			
		||||
                    actual = config[alias][p]
 | 
			
		||||
                    self.assertEqual(expected, actual)
 | 
			
		||||
                    self.assertEqual(conf[p], comp[p])
 | 
			
		||||
                for c in compiler_list:
 | 
			
		||||
                    expected = comps[alias]['paths'][c]
 | 
			
		||||
                    actual = config[alias]['paths'][c]
 | 
			
		||||
                    expected = comp['paths'][c]
 | 
			
		||||
                    actual = conf['paths'][c]
 | 
			
		||||
                    self.assertEqual(expected, actual)
 | 
			
		||||
 | 
			
		||||
    def test_write_list_in_memory(self):
 | 
			
		||||
 
 | 
			
		||||
@@ -46,132 +46,108 @@
 | 
			
		||||
 | 
			
		||||
mock_compiler_config = """\
 | 
			
		||||
compilers:
 | 
			
		||||
  clang3.3GENLINUX:
 | 
			
		||||
- compiler:
 | 
			
		||||
    spec: clang@3.3
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: {0} 
 | 
			
		||||
      version: '{1}'
 | 
			
		||||
    operating_system: {0}{1}
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/clang
 | 
			
		||||
      cxx: /path/to/clang++
 | 
			
		||||
      f77: None
 | 
			
		||||
      fc: None
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  gcc4.5GENLINUX: 
 | 
			
		||||
- compiler:
 | 
			
		||||
    spec: gcc@4.5.0  
 | 
			
		||||
    operating_system: 
 | 
			
		||||
      name: {0} 
 | 
			
		||||
      version: '{1}' 
 | 
			
		||||
    operating_system: {0}{1}
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/gcc
 | 
			
		||||
      cxx: /path/to/g++
 | 
			
		||||
      f77: None
 | 
			
		||||
      fc: None
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  clang3.3CNL:
 | 
			
		||||
- compiler:
 | 
			
		||||
    spec: clang@3.3
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: CNL
 | 
			
		||||
      version: '10'
 | 
			
		||||
    operating_system: CNL10
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/clang
 | 
			
		||||
      cxx: /path/to/clang++
 | 
			
		||||
      f77: None
 | 
			
		||||
      fc: None
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  clang3.3SUSE:
 | 
			
		||||
- compiler:
 | 
			
		||||
    spec: clang@3.3
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: SuSE
 | 
			
		||||
      version: '11'
 | 
			
		||||
    operating_system: SuSE11
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/clang
 | 
			
		||||
      cxx: /path/to/clang++
 | 
			
		||||
      f77: None
 | 
			
		||||
      fc: None
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  clang3.3RHL:
 | 
			
		||||
- compiler:
 | 
			
		||||
    spec: clang@3.3
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: redhat
 | 
			
		||||
      version: '6'
 | 
			
		||||
    operating_system: redhat6
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/clang
 | 
			
		||||
      cxx: /path/to/clang++
 | 
			
		||||
      f77: None
 | 
			
		||||
      fc: None
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  clang3.3OSX:
 | 
			
		||||
- compiler:
 | 
			
		||||
    spec: clang@3.3
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: yosemite
 | 
			
		||||
      version: '10.10'
 | 
			
		||||
    operating_system: yosemite
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/clang
 | 
			
		||||
      cxx: /path/to/clang++
 | 
			
		||||
      f77: None
 | 
			
		||||
      fc: None
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  gcc4.5.0CNL:
 | 
			
		||||
- compiler:
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/gcc
 | 
			
		||||
      cxx: /path/to/g++
 | 
			
		||||
      f77: /path/to/gfortran
 | 
			
		||||
      fc: /path/to/gfortran
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: CNL
 | 
			
		||||
      version: '10'
 | 
			
		||||
    operating_system: CNL10
 | 
			
		||||
    spec: gcc@4.5.0
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  gcc4.5.0SUSE:
 | 
			
		||||
- compiler:
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/gcc
 | 
			
		||||
      cxx: /path/to/g++
 | 
			
		||||
      f77: /path/to/gfortran
 | 
			
		||||
      fc: /path/to/gfortran
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: SuSE
 | 
			
		||||
      version: '11'
 | 
			
		||||
    operating_system: SuSE11
 | 
			
		||||
    spec: gcc@4.5.0
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  gcc4.5.0RHL:
 | 
			
		||||
- compiler:
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/gcc
 | 
			
		||||
      cxx: /path/to/g++
 | 
			
		||||
      f77: /path/to/gfortran
 | 
			
		||||
      fc: /path/to/gfortran
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: redhat
 | 
			
		||||
      version: '6'
 | 
			
		||||
    operating_system: redhat6
 | 
			
		||||
    spec: gcc@4.5.0
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  gcc4.5.0OSX:
 | 
			
		||||
- compiler:
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/gcc
 | 
			
		||||
      cxx: /path/to/g++
 | 
			
		||||
      f77: /path/to/gfortran
 | 
			
		||||
      fc: /path/to/gfortran
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: yosemite
 | 
			
		||||
      version: '10.10'
 | 
			
		||||
    operating_system: yosemite
 | 
			
		||||
    spec: gcc@4.5.0
 | 
			
		||||
    modules: 'None'
 | 
			
		||||
  gcc4.5.0ELCAP:
 | 
			
		||||
- compiler:
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/gcc
 | 
			
		||||
      cxx: /path/to/g++
 | 
			
		||||
      f77: /path/to/gfortran
 | 
			
		||||
      fc: /path/to/gfortran
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: elcapitan
 | 
			
		||||
      version: '10.11'
 | 
			
		||||
    operating_system: elcapitan
 | 
			
		||||
    spec: gcc@4.5.0
 | 
			
		||||
    modules: 'None' 
 | 
			
		||||
  clang3.3ELCAP:
 | 
			
		||||
- compiler:
 | 
			
		||||
    spec: clang@3.3
 | 
			
		||||
    operating_system:
 | 
			
		||||
      name: elcapitan
 | 
			
		||||
      version: '10.11'
 | 
			
		||||
    operating_system: elcapitan
 | 
			
		||||
    paths:
 | 
			
		||||
      cc: /path/to/clang
 | 
			
		||||
      cxx: /path/to/clang++
 | 
			
		||||
 
 | 
			
		||||
@@ -44,9 +44,9 @@ def check_compiler_yaml_version():
 | 
			
		||||
                data = syaml.load(f)
 | 
			
		||||
 | 
			
		||||
        if data:
 | 
			
		||||
            compilers = data['compilers'].items()
 | 
			
		||||
            compilers = data['compilers']
 | 
			
		||||
            if len(compilers) > 0:
 | 
			
		||||
                if 'operating_system' not in compilers[0][1]:
 | 
			
		||||
                if 'operating_system' not in compilers[0]['compiler']:
 | 
			
		||||
                    new_file = os.path.join(scope.path, '_old_compilers.yaml')
 | 
			
		||||
                    tty.warn('%s in out of date compilers format. ' 
 | 
			
		||||
                             'Moved to %s. Spack automatically generate '
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user