Merge pull request #1085 from NERSC/bugfix/compiler_find
Bugfix/compiler find and gfortran fix.
This commit is contained in:
commit
3f90fee614
@ -76,10 +76,16 @@ def compiler_find(args):
|
|||||||
if not paths:
|
if not paths:
|
||||||
paths = get_path('PATH')
|
paths = get_path('PATH')
|
||||||
|
|
||||||
compilers = [c for c in spack.compilers.find_compilers(*args.add_paths)
|
# Don't initialize compilers config via compilers.get_compiler_config.
|
||||||
if c.spec not in spack.compilers.all_compilers(scope=args.scope)]
|
# Just let compiler_find do the
|
||||||
|
# entire process and return an empty config from all_compilers
|
||||||
|
# Default for any other process is init_config=True
|
||||||
|
compilers = [c for c in spack.compilers.find_compilers(*paths)
|
||||||
|
if c.spec not in spack.compilers.all_compilers(
|
||||||
|
scope=args.scope, init_config=False)]
|
||||||
if compilers:
|
if compilers:
|
||||||
spack.compilers.add_compilers_to_config(compilers, scope=args.scope)
|
spack.compilers.add_compilers_to_config(compilers, scope=args.scope,
|
||||||
|
init_config=False)
|
||||||
n = len(compilers)
|
n = len(compilers)
|
||||||
s = 's' if n > 1 else ''
|
s = 's' if n > 1 else ''
|
||||||
filename = spack.config.get_config_filename(args.scope, 'compilers')
|
filename = spack.config.get_config_filename(args.scope, 'compilers')
|
||||||
|
@ -83,7 +83,7 @@ def _to_dict(compiler):
|
|||||||
return {'compiler': d}
|
return {'compiler': d}
|
||||||
|
|
||||||
|
|
||||||
def get_compiler_config(scope=None):
|
def get_compiler_config(scope=None, init_config=True):
|
||||||
"""Return the compiler configuration for the specified architecture.
|
"""Return the compiler configuration for the specified architecture.
|
||||||
"""
|
"""
|
||||||
def init_compiler_config():
|
def init_compiler_config():
|
||||||
@ -93,12 +93,12 @@ def init_compiler_config():
|
|||||||
for compiler in compilers:
|
for compiler in compilers:
|
||||||
compilers_dict.append(_to_dict(compiler))
|
compilers_dict.append(_to_dict(compiler))
|
||||||
spack.config.update_config('compilers', compilers_dict, scope=scope)
|
spack.config.update_config('compilers', compilers_dict, scope=scope)
|
||||||
|
|
||||||
config = spack.config.get_config('compilers', scope=scope)
|
config = spack.config.get_config('compilers', scope=scope)
|
||||||
# Update the configuration if there are currently no compilers
|
# Update the configuration if there are currently no compilers
|
||||||
# configured. Avoid updating automatically if there ARE site
|
# configured. Avoid updating automatically if there ARE site
|
||||||
# compilers configured but no user ones.
|
# compilers configured but no user ones.
|
||||||
if not config:
|
if not config and init_config:
|
||||||
if scope is None:
|
if scope is None:
|
||||||
# We know no compilers were configured in any scope.
|
# We know no compilers were configured in any scope.
|
||||||
init_compiler_config()
|
init_compiler_config()
|
||||||
@ -117,14 +117,14 @@ def init_compiler_config():
|
|||||||
return [] # Return empty list which we will later append to.
|
return [] # Return empty list which we will later append to.
|
||||||
|
|
||||||
|
|
||||||
def add_compilers_to_config(compilers, scope=None):
|
def add_compilers_to_config(compilers, scope=None, init_config=True):
|
||||||
"""Add compilers to the config for the specified architecture.
|
"""Add compilers to the config for the specified architecture.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- compilers: a list of Compiler objects.
|
- compilers: a list of Compiler objects.
|
||||||
- scope: configuration scope to modify.
|
- scope: configuration scope to modify.
|
||||||
"""
|
"""
|
||||||
compiler_config = get_compiler_config(scope)
|
compiler_config = get_compiler_config(scope, init_config)
|
||||||
for compiler in compilers:
|
for compiler in compilers:
|
||||||
compiler_config.append(_to_dict(compiler))
|
compiler_config.append(_to_dict(compiler))
|
||||||
global _cache_config_file
|
global _cache_config_file
|
||||||
@ -153,23 +153,23 @@ def remove_compiler_from_config(compiler_spec, scope=None):
|
|||||||
spack.config.update_config('compilers', filtered_compiler_config, scope)
|
spack.config.update_config('compilers', filtered_compiler_config, scope)
|
||||||
|
|
||||||
|
|
||||||
def all_compilers_config(scope=None):
|
def all_compilers_config(scope=None, init_config=True):
|
||||||
"""Return a set of specs for all the compiler versions currently
|
"""Return a set of specs for all the compiler versions currently
|
||||||
available to build with. These are instances of CompilerSpec.
|
available to build with. These are instances of CompilerSpec.
|
||||||
"""
|
"""
|
||||||
# Get compilers for this architecture.
|
# Get compilers for this architecture.
|
||||||
global _cache_config_file #Create a cache of the config file so we don't load all the time.
|
global _cache_config_file #Create a cache of the config file so we don't load all the time.
|
||||||
if not _cache_config_file:
|
if not _cache_config_file:
|
||||||
_cache_config_file = get_compiler_config(scope)
|
_cache_config_file = get_compiler_config(scope, init_config)
|
||||||
return _cache_config_file
|
return _cache_config_file
|
||||||
else:
|
else:
|
||||||
return _cache_config_file
|
return _cache_config_file
|
||||||
|
|
||||||
|
|
||||||
def all_compilers(scope=None):
|
def all_compilers(scope=None, init_config=True):
|
||||||
# Return compiler specs from the merged config.
|
# Return compiler specs from the merged config.
|
||||||
return [spack.spec.CompilerSpec(s['compiler']['spec'])
|
return [spack.spec.CompilerSpec(s['compiler']['spec'])
|
||||||
for s in all_compilers_config(scope)]
|
for s in all_compilers_config(scope, init_config)]
|
||||||
|
|
||||||
|
|
||||||
def default_compiler():
|
def default_compiler():
|
||||||
|
@ -77,9 +77,9 @@ def fc_version(cls, fc):
|
|||||||
return get_compiler_version(
|
return get_compiler_version(
|
||||||
fc, '-dumpversion',
|
fc, '-dumpversion',
|
||||||
# older gfortran versions don't have simple dumpversion output.
|
# older gfortran versions don't have simple dumpversion output.
|
||||||
r'(?:GNU Fortran \(GCC\))?(\d+\.\d+(?:\.\d+)?)', module)
|
r'(?:GNU Fortran \(GCC\))?(\d+\.\d+(?:\.\d+)?)')
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def f77_version(cls, f77):
|
def f77_version(cls, f77):
|
||||||
return cls.fc_version(f77, module)
|
return cls.fc_version(f77)
|
||||||
|
Loading…
Reference in New Issue
Block a user