changed compiler yaml format
This commit is contained in:
parent
196737c217
commit
992bcac794
@ -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 '
|
||||
|
Loading…
Reference in New Issue
Block a user