summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Becker <becker33@llnl.gov>2015-10-21 10:32:23 -0700
committerGregory Becker <becker33@llnl.gov>2015-11-10 15:45:22 -0800
commitcb5bc242db4b3096c31445731b652aa247c40581 (patch)
treed2460f710c8b9e61b6c2d388688d4b641f2c5d5e
parent2d77173dfa182140c4a4ea1102895a573684e324 (diff)
downloadspack-cb5bc242db4b3096c31445731b652aa247c40581.tar.gz
spack-cb5bc242db4b3096c31445731b652aa247c40581.tar.bz2
spack-cb5bc242db4b3096c31445731b652aa247c40581.tar.xz
spack-cb5bc242db4b3096c31445731b652aa247c40581.zip
Changed flag default to "". Updated printing and other logic to match. Seems to have solved error in normalize.
-rw-r--r--lib/spack/spack/build_environment.py7
-rw-r--r--lib/spack/spack/compiler.py5
-rw-r--r--lib/spack/spack/spec.py44
3 files changed, 16 insertions, 40 deletions
diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py
index 6ede669fd0..5ac921df22 100644
--- a/lib/spack/spack/build_environment.py
+++ b/lib/spack/spack/build_environment.py
@@ -105,15 +105,16 @@ def set_compiler_environment_variables(pkg):
os.environ['SPACK_FC'] = compiler.fc
# Incorporate the compiler default flags into the set of flags
- for flag in flags:
- if flag in compiler.flags:
+ for flag in flags:#This is all valid flags as well because it's concrete
+ if flag in compiler.flags and compiler.flags[flag] != "":
compiler.flags[flag] += ' '+flags[flag]
else:
compiler.flags[flag] = flags[flag]
# Add every valid compiler flag to the environment, prefaced by "SPACK_"
for flag in Compiler.valid_compiler_flags():
- if flag in compiler.flags:
+ #The previous block and concreteness guarantee key safety here
+ if compiler.flags[flag] != "":
os.environ['SPACK_'+flag.upper()] = compiler.flags[flag]
os.environ['SPACK_COMPILER_SPEC'] = str(pkg.spec.compiler)
diff --git a/lib/spack/spack/compiler.py b/lib/spack/spack/compiler.py
index 9b9c5f4365..3b2f57f60e 100644
--- a/lib/spack/spack/compiler.py
+++ b/lib/spack/spack/compiler.py
@@ -114,8 +114,9 @@ class Compiler(object):
self.f77 = check(f77)
self.fc = check(fc)
- #Unfortunately have to make sure these params are accepted in the same order the are returned
- #by sorted(flags) in compilers/__init__.py
+ # Unfortunately have to make sure these params are accepted
+ # in the same order they are returned by sorted(flags)
+ # in compilers/__init__.py
self.flags = {}
for flag in _valid_compiler_flags:
value = kwargs.get(flag, None)
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py
index 379b51fb39..ac0ddce10a 100644
--- a/lib/spack/spack/spec.py
+++ b/lib/spack/spack/spec.py
@@ -192,12 +192,10 @@ class CompilerSpec(object):
c = SpecParser().parse_compiler(arg)
self.name = c.name
self.versions = c.versions
-# self.flags = c.flags
elif isinstance(arg, CompilerSpec):
self.name = arg.name
self.versions = arg.versions.copy()
-# self.flags = arg.flags.copy()
else:
raise TypeError(
@@ -209,14 +207,6 @@ class CompilerSpec(object):
self.name = name
self.versions = VersionList()
self.versions.add(ver(version))
-# self.flags = {'cflags':None,'cxxflags':None,'fflags':None,'ldflags':None}
-
-# elif nargs == 3:
-# name, version, flags = args
-# self.name = name
-# self.versions = VersionList()
-# self.versions.add(ver(version))
-# self.flags = flags
else:
raise TypeError(
@@ -236,20 +226,8 @@ class CompilerSpec(object):
def satisfies(self, other, strict=False):
other = self._autospec(other)
return (self.name == other.name and
- self.versions.satisfies(other.versions, strict=strict))# and
-# self.flags_satisfy(other, strict=strict))
-
+ self.versions.satisfies(other.versions, strict=strict))
-# def flags_satisfy(self,other,strict = False):
-# if strict:
-# for flag in self.flags:
-# if not self.flags[flag] == other.flags[flag]:
-# return False
-# else:
-# for flag in self.flags:
-# if other.flags[flag] and (not self.flags[flag] or other.flags[flag] not in self.flags[flag]):
-# return False
-# return True
def constrain(self, other):
"""Intersect self's versions with other.
@@ -283,25 +261,23 @@ class CompilerSpec(object):
clone = CompilerSpec.__new__(CompilerSpec)
clone.name = self.name
clone.versions = self.versions.copy()
-# clone.flags = self.flags.copy()
return clone
def _cmp_key(self):
- return (self.name, self.versions)#, str(sorted(self.flags.items())))
+ return (self.name, self.versions)
def to_dict(self):
d = {'name' : self.name}
d.update(self.versions.to_dict())
-# d['flags'] = self.flags
return { 'compiler' : d }
@staticmethod
def from_dict(d):
d = d['compiler']
- return CompilerSpec(d['name'], VersionList.from_dict(d))#, d['flags'])
+ return CompilerSpec(d['name'], VersionList.from_dict(d))
def __str__(self):
@@ -309,11 +285,6 @@ class CompilerSpec(object):
if self.versions and self.versions != _any_version:
vlist = ",".join(str(v) for v in self.versions)
out += "@%s" % vlist
-# if self.flags:
-# for flag, value in self.flags.items():
-# if value is not None:
-# out += "+" + flag + "=" + value
-# print "outing"
return out
def __repr__(self):
@@ -405,13 +376,15 @@ class FlagMap(HashableMap):
def __init__(self, spec):
super(FlagMap, self).__init__()
self.spec = spec
+ for flag in Compiler.valid_compiler_flags():
+ self[flag] = ""
def satisfies(self, other, strict=False):
#"strict" makes no sense if this works, but it matches how we need it. Maybe
if strict:
return all(k in self and self[k] == other[k]
- for k in other)
+ for k in other if other[k] != "")
else:
return self == other
@@ -450,8 +423,9 @@ class FlagMap(HashableMap):
def __str__(self):
- sorted_keys = sorted(self.keys())
- return '+' + '+'.join(str(key) + '=\"' + str(self[key]) + '\"' for key in sorted_keys)
+ sorted_keys = filter(lambda flag: self[flag] != "", sorted(self.keys()))
+ cond_symbol = '+' if len(sorted_keys)>0 else ''
+ return cond_symbol + '+'.join(str(key) + '=\"' + str(self[key]) + '\"' for key in sorted_keys)
class DependencyMap(HashableMap):