From 16e92794209a10588d70b62420059459d4aed334 Mon Sep 17 00:00:00 2001 From: Greg Becker Date: Fri, 19 May 2023 02:31:27 -0700 Subject: compiler specs: do not print '@=' when clear from context (#37787) Ensure that spack compiler add/find/list and lists of concrete specs print the compiler effectively as {compiler.name}{@compiler.version}. Co-authored-by: Harmen Stoppels --- lib/spack/spack/cmd/__init__.py | 2 +- lib/spack/spack/cmd/compiler.py | 10 +++++----- lib/spack/spack/spec.py | 14 ++++++++++++-- lib/spack/spack/test/cmd/compiler.py | 8 ++++---- 4 files changed, 22 insertions(+), 12 deletions(-) (limited to 'lib') diff --git a/lib/spack/spack/cmd/__init__.py b/lib/spack/spack/cmd/__init__.py index df482edfd4..c8a8b3ee13 100644 --- a/lib/spack/spack/cmd/__init__.py +++ b/lib/spack/spack/cmd/__init__.py @@ -347,7 +347,7 @@ def iter_groups(specs, indent, all_headers): spack.spec.architecture_color, architecture if architecture else "no arch", spack.spec.compiler_color, - f"{compiler}" if compiler else "no compiler", + f"{compiler.display_str}" if compiler else "no compiler", ) # Sometimes we want to display specs that are not yet concretized. diff --git a/lib/spack/spack/cmd/compiler.py b/lib/spack/spack/cmd/compiler.py index 854b8205a6..563142bc8f 100644 --- a/lib/spack/spack/cmd/compiler.py +++ b/lib/spack/spack/cmd/compiler.py @@ -98,7 +98,7 @@ def compiler_find(args): config = spack.config.config filename = config.get_config_filename(args.scope, "compilers") tty.msg("Added %d new compiler%s to %s" % (n, s, filename)) - colify(reversed(sorted(c.spec for c in new_compilers)), indent=4) + colify(reversed(sorted(c.spec.display_str for c in new_compilers)), indent=4) else: tty.msg("Found no new compilers") tty.msg("Compilers are defined in the following files:") @@ -112,13 +112,13 @@ def compiler_remove(args): tty.die("No compilers match spec %s" % cspec) elif not args.all and len(compilers) > 1: tty.error("Multiple compilers match spec %s. Choose one:" % cspec) - colify(reversed(sorted([c.spec for c in compilers])), indent=4) + colify(reversed(sorted([c.spec.display_str for c in compilers])), indent=4) tty.msg("Or, use `spack compiler remove -a` to remove all of them.") sys.exit(1) for compiler in compilers: spack.compilers.remove_compiler_from_config(compiler.spec, scope=args.scope) - tty.msg("Removed compiler %s" % compiler.spec) + tty.msg("Removed compiler %s" % compiler.spec.display_str) def compiler_info(args): @@ -130,7 +130,7 @@ def compiler_info(args): tty.die("No compilers match spec %s" % cspec) else: for c in compilers: - print(str(c.spec) + ":") + print(c.spec.display_str + ":") print("\tpaths:") for cpath in ["cc", "cxx", "f77", "fc"]: print("\t\t%s = %s" % (cpath, getattr(c, cpath, None))) @@ -188,7 +188,7 @@ def compiler_list(args): os_str += "-%s" % target cname = "%s{%s} %s" % (spack.spec.compiler_color, name, os_str) tty.hline(colorize(cname), char="-") - colify(reversed(sorted(c.spec for c in compilers))) + colify(reversed(sorted(c.spec.display_str for c in compilers))) def compiler(parser, args): diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index 522485f57e..1605152450 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -679,6 +679,16 @@ class CompilerSpec(object): d = d["compiler"] return CompilerSpec(d["name"], vn.VersionList.from_dict(d)) + @property + def display_str(self): + """Equivalent to {compiler.name}{@compiler.version} for Specs, without extra + @= for readability.""" + if self.concrete: + return f"{self.name}@{self.version}" + elif self.versions != vn.any_version: + return f"{self.name}@{self.versions}" + return self.name + def __str__(self): out = self.name if self.versions and self.versions != vn.any_version: @@ -1730,14 +1740,14 @@ class Spec(object): def short_spec(self): """Returns a version of the spec with the dependencies hashed instead of completely enumerated.""" - spec_format = "{name}{@version}{%compiler}" + spec_format = "{name}{@version}{%compiler.name}{@compiler.version}" spec_format += "{variants}{arch=architecture}{/hash:7}" return self.format(spec_format) @property def cshort_spec(self): """Returns an auto-colorized version of ``self.short_spec``.""" - spec_format = "{name}{@version}{%compiler}" + spec_format = "{name}{@version}{%compiler.name}{@compiler.version}" spec_format += "{variants}{arch=architecture}{/hash:7}" return self.cformat(spec_format) diff --git a/lib/spack/spack/test/cmd/compiler.py b/lib/spack/spack/test/cmd/compiler.py index df39671dcc..bca913f358 100644 --- a/lib/spack/spack/test/cmd/compiler.py +++ b/lib/spack/spack/test/cmd/compiler.py @@ -204,8 +204,8 @@ def test_compiler_find_mixed_suffixes(no_compilers_yaml, working_env, clangdir): os.environ["PATH"] = str(clangdir) output = compiler("find", "--scope=site") - assert "clang@=11.0.0" in output - assert "gcc@=8.4.0" in output + assert "clang@11.0.0" in output + assert "gcc@8.4.0" in output config = spack.compilers.get_compiler_config("site", False) clang = next(c["compiler"] for c in config if c["compiler"]["spec"] == "clang@=11.0.0") @@ -246,8 +246,8 @@ def test_compiler_find_prefer_no_suffix(no_compilers_yaml, working_env, clangdir os.environ["PATH"] = str(clangdir) output = compiler("find", "--scope=site") - assert "clang@=11.0.0" in output - assert "gcc@=8.4.0" in output + assert "clang@11.0.0" in output + assert "gcc@8.4.0" in output config = spack.compilers.get_compiler_config("site", False) clang = next(c["compiler"] for c in config if c["compiler"]["spec"] == "clang@=11.0.0") -- cgit v1.2.3-70-g09d2