Source code for spack.cmd.providers

# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

import io
import sys

import llnl.util.tty.colify as colify

import spack.cmd
import spack.repo

description = "list packages that provide a particular virtual package"
section = "basic"
level = "long"


[docs] def setup_parser(subparser): subparser.epilog = "If called without argument returns the list of all valid virtual packages" subparser.add_argument( "virtual_package", nargs="*", help="find packages that provide this virtual package" )
[docs] def providers(parser, args): valid_virtuals = sorted(spack.repo.PATH.provider_index.providers.keys()) buffer = io.StringIO() isatty = sys.stdout.isatty() if isatty: buffer.write("Virtual packages:\n") colify.colify(valid_virtuals, output=buffer, tty=isatty, indent=4) valid_virtuals_str = buffer.getvalue() # If called without arguments, list all the virtual packages if not args.virtual_package: print(valid_virtuals_str) return # Otherwise, parse the specs from command line specs = spack.cmd.parse_specs(args.virtual_package) # Check prerequisites non_virtual = [str(s) for s in specs if not s.virtual or s.name not in valid_virtuals] if non_virtual: msg = "non-virtual specs cannot be part of the query " msg += "[{0}]\n".format(", ".join(non_virtual)) msg += valid_virtuals_str raise ValueError(msg) # Display providers for spec in specs: if sys.stdout.isatty(): print("{0}:".format(spec)) spack.cmd.display_specs(sorted(spack.repo.PATH.providers_for(spec))) print("")