summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/compilers/__init__.py34
-rw-r--r--lib/spack/spack/config.py24
-rw-r--r--lib/spack/spack/test/config.py84
-rw-r--r--lib/spack/spack/test/mock_packages_test.py72
-rw-r--r--lib/spack/spack/yaml_version_check.py4
5 files changed, 87 insertions, 131 deletions
diff --git a/lib/spack/spack/compilers/__init__.py b/lib/spack/spack/compilers/__init__.py
index d923d77da8..3cf8f2297f 100644
--- a/lib/spack/spack/compilers/__init__.py
+++ b/lib/spack/spack/compilers/__init__.py
@@ -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 compilers_for_spec(compiler_spec, scope=None, **kwargs):
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:
diff --git a/lib/spack/spack/config.py b/lib/spack/spack/config.py
index ec04c81787..e51016998c 100644
--- a/lib/spack/spack/config.py
+++ b/lib/spack/spack/config.py
@@ -146,11 +146,9 @@ section_schemas = {
'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 @@ section_schemas = {
{'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 _merge_yaml(dest, source):
# 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.
diff --git a/lib/spack/spack/test/config.py b/lib/spack/spack/test/config.py
index 8fffc09437..252d77e66b 100644
--- a/lib/spack/spack/test/config.py
+++ b/lib/spack/spack/test/config.py
@@ -32,8 +32,8 @@ from ordereddict_backport import OrderedDict
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 @@ a_comps = {
},
'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 @@ a_comps = {
},
'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 @@ a_comps = {
"fc" : '<overwritten>' },
'modules': None,
'spec': 'clang@3.3',
- 'operating_system': {
- 'name': 'CNL',
- 'version': '10'
- }
- }
-}
-
-b_comps = {
- 'icc100': {
+ 'operating_system': 'CNL10'
+ }}
+]
+
+b_comps = [
+ {'compiler': {
'paths': {
"cc" : "/icc100",
"cxx": "/icp100",
@@ -86,12 +77,9 @@ b_comps = {
},
'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 @@ b_comps = {
},
'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 @@ b_comps = {
"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 @@ class ConfigTest(MockPackagesTest):
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):
diff --git a/lib/spack/spack/test/mock_packages_test.py b/lib/spack/spack/test/mock_packages_test.py
index 9c586bd8ce..a56bd8ebdc 100644
--- a/lib/spack/spack/test/mock_packages_test.py
+++ b/lib/spack/spack/test/mock_packages_test.py
@@ -46,132 +46,108 @@ if platform.name == 'linux':
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++
diff --git a/lib/spack/spack/yaml_version_check.py b/lib/spack/spack/yaml_version_check.py
index 7e7bae4edf..5930eefafa 100644
--- a/lib/spack/spack/yaml_version_check.py
+++ b/lib/spack/spack/yaml_version_check.py
@@ -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 '