From 7fd94fc4bc1e8609cc44524dd1139e3d63bb571f Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Fri, 18 Feb 2022 19:51:01 +0100 Subject: [PATCH] spack external find: change default behavior (#29031) See https://github.com/spack/spack/issues/25353#issuecomment-1041868116 This commit changes the default behavior of ``` $ spack external find ``` from searching all the possible packages Spack knows about to search only for the ones tagged as being a "build-tool". It also introduces a `--all` option to restore the old behavior. --- lib/spack/spack/cmd/external.py | 22 +++++++++++++++++-- lib/spack/spack/test/cmd/external.py | 4 ++-- share/spack/spack-completion.bash | 2 +- .../repos/builtin/packages/bazel/package.py | 3 +++ .../builtin/packages/binutils/package.py | 2 ++ .../repos/builtin/packages/bison/package.py | 2 ++ .../repos/builtin/packages/ccache/package.py | 2 ++ .../builtin/packages/coreutils/package.py | 2 ++ .../repos/builtin/packages/cvs/package.py | 2 ++ .../builtin/packages/diffutils/package.py | 2 ++ .../builtin/packages/findutils/package.py | 2 ++ .../repos/builtin/packages/gawk/package.py | 2 +- .../repos/builtin/packages/git/package.py | 2 ++ .../repos/builtin/packages/groff/package.py | 2 ++ .../repos/builtin/packages/meson/package.py | 2 ++ .../repos/builtin/packages/ninja/package.py | 4 ++-- .../repos/builtin/packages/openssh/package.py | 2 ++ .../repos/builtin/packages/openssl/package.py | 2 ++ .../repos/builtin/packages/patch/package.py | 2 ++ .../repos/builtin/packages/scons/package.py | 2 ++ .../builtin/packages/subversion/package.py | 2 ++ .../repos/builtin/packages/tar/package.py | 2 ++ .../repos/builtin/packages/texinfo/package.py | 2 ++ 23 files changed, 63 insertions(+), 8 deletions(-) diff --git a/lib/spack/spack/cmd/external.py b/lib/spack/spack/cmd/external.py index 8a8dec9025..7e73572028 100644 --- a/lib/spack/spack/cmd/external.py +++ b/lib/spack/spack/cmd/external.py @@ -39,8 +39,17 @@ def setup_parser(subparser): '--scope', choices=scopes, metavar=scopes_metavar, default=spack.config.default_modify_scope('packages'), help="configuration scope to modify") + find_parser.add_argument( + '--all', action='store_true', + help="search for all packages that Spack knows about" + ) spack.cmd.common.arguments.add_common_arguments(find_parser, ['tags']) find_parser.add_argument('packages', nargs=argparse.REMAINDER) + find_parser.epilog = ( + 'The search is by default on packages tagged with the "build-tools" or ' + '"core-packages" tags. Use the --all option to search for every possible ' + 'package Spack knows how to find.' + ) sp.add_parser( 'list', help='list detectable packages, by repository and name' @@ -48,6 +57,14 @@ def setup_parser(subparser): def external_find(args): + # If the user didn't specify anything, search for build tools by default + if not args.tags and not args.all and not args.packages: + args.tags = ['core-packages', 'build-tools'] + + # If the user specified both --all and --tag, then --all has precedence + if args.all and args.tags: + args.tags = [] + # Construct the list of possible packages to be detected packages_to_check = [] @@ -64,9 +81,10 @@ def external_find(args): # Since tags are cached it's much faster to construct what we need # to search directly, rather than filtering after the fact packages_to_check = [ - spack.repo.get(pkg) for pkg in - spack.repo.path.packages_with_tags(*args.tags) + spack.repo.get(pkg) for tag in args.tags for pkg in + spack.repo.path.packages_with_tags(tag) ] + packages_to_check = list(set(packages_to_check)) # If the list of packages is empty, search for every possible package if not args.tags and not packages_to_check: diff --git a/lib/spack/spack/test/cmd/external.py b/lib/spack/spack/test/cmd/external.py index d8928798ab..f1bcad0c89 100644 --- a/lib/spack/spack/test/cmd/external.py +++ b/lib/spack/spack/test/cmd/external.py @@ -124,7 +124,7 @@ def test_find_external_cmd_not_buildable( def test_find_external_cmd_full_repo( mutable_config, working_env, mock_executable, mutable_mock_repo): - """Test invoking 'spack external find' with no additional arguments, which + """Test invoking 'spack external find --all' with no additional arguments iterates through each package in the repository. """ @@ -134,7 +134,7 @@ def test_find_external_cmd_full_repo( prefix = os.path.dirname(os.path.dirname(exe_path1)) os.environ['PATH'] = ':'.join([os.path.dirname(exe_path1)]) - external('find') + external('find', '--all') pkgs_cfg = spack.config.get('packages') pkg_cfg = pkgs_cfg['find-externals1'] diff --git a/share/spack/spack-completion.bash b/share/spack/spack-completion.bash index 26a19c15a9..6531761e89 100755 --- a/share/spack/spack-completion.bash +++ b/share/spack/spack-completion.bash @@ -1024,7 +1024,7 @@ _spack_external() { _spack_external_find() { if $list_options then - SPACK_COMPREPLY="-h --help --not-buildable --scope -t --tag" + SPACK_COMPREPLY="-h --help --not-buildable --scope --all -t --tag" else _all_packages fi diff --git a/var/spack/repos/builtin/packages/bazel/package.py b/var/spack/repos/builtin/packages/bazel/package.py index 59c8bee95d..619243204d 100644 --- a/var/spack/repos/builtin/packages/bazel/package.py +++ b/var/spack/repos/builtin/packages/bazel/package.py @@ -17,6 +17,9 @@ class Bazel(Package): url = "https://github.com/bazelbuild/bazel/releases/download/3.1.0/bazel-3.1.0-dist.zip" maintainers = ['adamjstewart'] + + tags = ['build-tools'] + version('4.0.0', sha256='d350f80e70654932db252db380d2ec0144a00e86f8d9f2b4c799ffdb48e9cdd1') version('3.7.2', sha256='de255bb42163a915312df9f4b86e5b874b46d9e8d4b72604b5123c3a845ed9b1') version('3.7.1', sha256='c9244e5905df6b0190113e26082c72d58b56b1b0dec66d076f083ce4089b0307') diff --git a/var/spack/repos/builtin/packages/binutils/package.py b/var/spack/repos/builtin/packages/binutils/package.py index 8d4a4ad692..f67b8fe358 100644 --- a/var/spack/repos/builtin/packages/binutils/package.py +++ b/var/spack/repos/builtin/packages/binutils/package.py @@ -13,6 +13,8 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage): maintainers = ['alalazo'] + tags = ['build-tools', 'core-packages'] + executables = ['^nm$', '^readelf$'] version('2.37', sha256='67fc1a4030d08ee877a4867d3dcab35828148f87e1fd05da6db585ed5a166bd4') diff --git a/var/spack/repos/builtin/packages/bison/package.py b/var/spack/repos/builtin/packages/bison/package.py index ef18220d49..4c9a200f0a 100644 --- a/var/spack/repos/builtin/packages/bison/package.py +++ b/var/spack/repos/builtin/packages/bison/package.py @@ -18,6 +18,8 @@ class Bison(AutotoolsPackage, GNUMirrorPackage): homepage = "https://www.gnu.org/software/bison/" gnu_mirror_path = "bison/bison-3.6.4.tar.gz" + tags = ['build-tools'] + executables = ['^bison$'] version('3.8.2', sha256='06c9e13bdf7eb24d4ceb6b59205a4f67c2c7e7213119644430fe82fbd14a0abb') diff --git a/var/spack/repos/builtin/packages/ccache/package.py b/var/spack/repos/builtin/packages/ccache/package.py index 07a676a046..3258bceb4f 100644 --- a/var/spack/repos/builtin/packages/ccache/package.py +++ b/var/spack/repos/builtin/packages/ccache/package.py @@ -17,6 +17,8 @@ class Ccache(CMakePackage): url = "https://github.com/ccache/ccache/releases/download/v4.2.1/ccache-4.2.1.tar.gz" maintainers = ['haampie'] + tags = ['build-tools'] + executables = ['^ccache$'] version('4.5.1', sha256='f0d3cff5d555d6868f14a7d05696f0370074e475304fd5aa152b98f892364981') diff --git a/var/spack/repos/builtin/packages/coreutils/package.py b/var/spack/repos/builtin/packages/coreutils/package.py index 27ffa35a57..b9eb5b416d 100644 --- a/var/spack/repos/builtin/packages/coreutils/package.py +++ b/var/spack/repos/builtin/packages/coreutils/package.py @@ -16,6 +16,8 @@ class Coreutils(AutotoolsPackage, GNUMirrorPackage): homepage = 'https://www.gnu.org/software/coreutils/' gnu_mirror_path = 'coreutils/coreutils-8.26.tar.xz' + tags = ['core-packages'] + version('8.32', sha256='4458d8de7849df44ccab15e16b1548b285224dbba5f08fac070c1c0e0bcc4cfa') version('8.31', sha256='ff7a9c918edce6b4f4b2725e3f9b37b0c4d193531cac49a48b56c4d0d3a9e9fd') version('8.30', sha256='e831b3a86091496cdba720411f9748de81507798f6130adeaef872d206e1b057') diff --git a/var/spack/repos/builtin/packages/cvs/package.py b/var/spack/repos/builtin/packages/cvs/package.py index 23df7412be..b7afc94d90 100644 --- a/var/spack/repos/builtin/packages/cvs/package.py +++ b/var/spack/repos/builtin/packages/cvs/package.py @@ -20,6 +20,8 @@ class Cvs(AutotoolsPackage, GNUMirrorPackage): patch('https://gentoofan.org/gentoo/poly-c_overlay/dev-vcs/cvs/files/cvs-1.12.13.1-fix-gnulib-SEGV-vasnprintf.patch', sha256='e13db2acebad3ca5be5d8e0fa97f149b0f9661e4a9a731965c8226290c6413c0', when='@1.12.13') + tags = ['build-tools'] + parallel = False executables = [r'^cvs$'] diff --git a/var/spack/repos/builtin/packages/diffutils/package.py b/var/spack/repos/builtin/packages/diffutils/package.py index b350230be3..af83d5fa0d 100644 --- a/var/spack/repos/builtin/packages/diffutils/package.py +++ b/var/spack/repos/builtin/packages/diffutils/package.py @@ -12,6 +12,8 @@ class Diffutils(AutotoolsPackage, GNUMirrorPackage): """GNU Diffutils is a package of several programs related to finding differences between files.""" + tags = ['core-packages'] + executables = [r'^diff$'] homepage = "https://www.gnu.org/software/diffutils/" diff --git a/var/spack/repos/builtin/packages/findutils/package.py b/var/spack/repos/builtin/packages/findutils/package.py index 080e213237..1d99923b7a 100644 --- a/var/spack/repos/builtin/packages/findutils/package.py +++ b/var/spack/repos/builtin/packages/findutils/package.py @@ -12,6 +12,8 @@ class Findutils(AutotoolsPackage, GNUMirrorPackage): """The GNU Find Utilities are the basic directory searching utilities of the GNU operating system.""" + tags = ['core-packages'] + homepage = "https://www.gnu.org/software/findutils/" gnu_mirror_path = "findutils/findutils-4.8.0.tar.xz" diff --git a/var/spack/repos/builtin/packages/gawk/package.py b/var/spack/repos/builtin/packages/gawk/package.py index a47b0e59a9..d4c2fc185c 100644 --- a/var/spack/repos/builtin/packages/gawk/package.py +++ b/var/spack/repos/builtin/packages/gawk/package.py @@ -24,7 +24,7 @@ class Gawk(AutotoolsPackage, GNUMirrorPackage): executables = ['^gawk$'] - tags = ['build-tools'] + tags = ['build-tools', 'core-packages'] version('5.1.1', sha256='d87629386e894bbea11a5e00515fc909dc9b7249529dad9e6a3a2c77085f7ea2') version('5.1.0', sha256='cf5fea4ac5665fd5171af4716baab2effc76306a9572988d5ba1078f196382bd') diff --git a/var/spack/repos/builtin/packages/git/package.py b/var/spack/repos/builtin/packages/git/package.py index 916fa95173..36545c892f 100644 --- a/var/spack/repos/builtin/packages/git/package.py +++ b/var/spack/repos/builtin/packages/git/package.py @@ -19,6 +19,8 @@ class Git(AutotoolsPackage): homepage = "http://git-scm.com" url = "https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.12.0.tar.gz" + tags = ['build-tools'] + executables = ['^git$'] # In order to add new versions here, add a new list entry with: diff --git a/var/spack/repos/builtin/packages/groff/package.py b/var/spack/repos/builtin/packages/groff/package.py index 43b21c1c76..e9b7a530a6 100644 --- a/var/spack/repos/builtin/packages/groff/package.py +++ b/var/spack/repos/builtin/packages/groff/package.py @@ -17,6 +17,8 @@ class Groff(AutotoolsPackage, GNUMirrorPackage): homepage = "https://www.gnu.org/software/groff/" gnu_mirror_path = "groff/groff-1.22.3.tar.gz" + tags = ['build-tools'] + version('1.22.4', sha256='e78e7b4cb7dec310849004fa88847c44701e8d133b5d4c13057d876c1bad0293') version('1.22.3', sha256='3a48a9d6c97750bfbd535feeb5be0111db6406ddb7bb79fc680809cda6d828a5') diff --git a/var/spack/repos/builtin/packages/meson/package.py b/var/spack/repos/builtin/packages/meson/package.py index a26b3e6266..646ae33957 100644 --- a/var/spack/repos/builtin/packages/meson/package.py +++ b/var/spack/repos/builtin/packages/meson/package.py @@ -14,6 +14,8 @@ class Meson(PythonPackage): homepage = "https://mesonbuild.com/" url = "https://github.com/mesonbuild/meson/archive/0.49.0.tar.gz" + tags = ['build-tools'] + maintainers = ['michaelkuhn'] version('0.61.2', sha256='33cd555314a94d52acfbb3f6f44d4e61c4ad0bfec7acf4301be7e40bb969b3a8') diff --git a/var/spack/repos/builtin/packages/ninja/package.py b/var/spack/repos/builtin/packages/ninja/package.py index 878fb3c43d..d6cc0d59d1 100644 --- a/var/spack/repos/builtin/packages/ninja/package.py +++ b/var/spack/repos/builtin/packages/ninja/package.py @@ -14,9 +14,9 @@ class Ninja(Package): url = "https://github.com/ninja-build/ninja/archive/v1.7.2.tar.gz" git = "https://github.com/ninja-build/ninja.git" - executables = ['^ninja$'] + tags = ['build-tools', 'e4s'] - tags = ['e4s'] + executables = ['^ninja$'] version('kitware', branch='features-for-fortran', git='https://github.com/Kitware/ninja.git') version('master', branch='master') diff --git a/var/spack/repos/builtin/packages/openssh/package.py b/var/spack/repos/builtin/packages/openssh/package.py index 5df65e4959..45b91a1bcd 100644 --- a/var/spack/repos/builtin/packages/openssh/package.py +++ b/var/spack/repos/builtin/packages/openssh/package.py @@ -21,6 +21,8 @@ class Openssh(AutotoolsPackage): homepage = "https://www.openssh.com/" url = "https://mirrors.sonic.net/pub/OpenBSD/OpenSSH/portable/openssh-8.7p1.tar.gz" + tags = ['core-packages'] + version('8.8p1', sha256='4590890ea9bb9ace4f71ae331785a3a5823232435161960ed5fc86588f331fe9') version('8.7p1', sha256='7ca34b8bb24ae9e50f33792b7091b3841d7e1b440ff57bc9fabddf01e2ed1e24') version('8.6p1', sha256='c3e6e4da1621762c850d03b47eed1e48dff4cc9608ddeb547202a234df8ed7ae') diff --git a/var/spack/repos/builtin/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py index 1fbcb3abde..2705f71cec 100644 --- a/var/spack/repos/builtin/packages/openssl/package.py +++ b/var/spack/repos/builtin/packages/openssl/package.py @@ -23,6 +23,8 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package list_url = "https://www.openssl.org/source/old/" list_depth = 1 + tags = ['core-packages'] + executables = ['openssl'] version('3.0.1', sha256='c311ad853353bce796edad01a862c50a8a587f62e7e2100ef465ab53ec9b06d1') diff --git a/var/spack/repos/builtin/packages/patch/package.py b/var/spack/repos/builtin/packages/patch/package.py index 7097bbc5df..88acdbf9f5 100644 --- a/var/spack/repos/builtin/packages/patch/package.py +++ b/var/spack/repos/builtin/packages/patch/package.py @@ -15,6 +15,8 @@ class Patch(AutotoolsPackage, GNUMirrorPackage): homepage = "https://savannah.gnu.org/projects/patch/" gnu_mirror_path = "patch/patch-2.7.6.tar.xz" + tags = ['core-packages'] + version('2.7.6', sha256='ac610bda97abe0d9f6b7c963255a11dcb196c25e337c61f94e4778d632f1d8fd') version('2.7.5', sha256='fd95153655d6b95567e623843a0e77b81612d502ecf78a489a4aed7867caa299') diff --git a/var/spack/repos/builtin/packages/scons/package.py b/var/spack/repos/builtin/packages/scons/package.py index cab88e8871..c204a9aa32 100644 --- a/var/spack/repos/builtin/packages/scons/package.py +++ b/var/spack/repos/builtin/packages/scons/package.py @@ -12,6 +12,8 @@ class Scons(PythonPackage): homepage = "https://scons.org" pypi = "scons/scons-3.1.1.tar.gz" + tags = ['build-tools'] + version('3.1.2', sha256='8aaa483c303efeb678e6f7c776c8444a482f8ddc3ad891f8b6cdd35264da9a1f') version('3.1.1', sha256='fd44f8f2a4562e7e5bc8c63c82b01e469e8115805a3e9c2923ee54cdcd6678b3') version('3.1.0', sha256='94e0d0684772d3e6d9368785296716e0ed6ce757270b3ed814e5aa72d3163890') diff --git a/var/spack/repos/builtin/packages/subversion/package.py b/var/spack/repos/builtin/packages/subversion/package.py index a6ef24c553..3ec2874ff1 100644 --- a/var/spack/repos/builtin/packages/subversion/package.py +++ b/var/spack/repos/builtin/packages/subversion/package.py @@ -17,6 +17,8 @@ class Subversion(AutotoolsPackage): 'https://downloads.apache.org/subversion/subversion-1.13.0.tar.gz' ] + tags = ['build-tools'] + version('1.14.1', sha256='dee2796abaa1f5351e6cc2a60b1917beb8238af548b20d3e1ec22760ab2f0cad') version('1.14.0', sha256='ef3d1147535e41874c304fb5b9ea32745fbf5d7faecf2ce21d4115b567e937d0') version('1.13.0', sha256='daad440c03b8a86fcca804ea82217bb1902cfcae1b7d28c624143c58dcb96931') diff --git a/var/spack/repos/builtin/packages/tar/package.py b/var/spack/repos/builtin/packages/tar/package.py index aa559ca9f6..137039819d 100644 --- a/var/spack/repos/builtin/packages/tar/package.py +++ b/var/spack/repos/builtin/packages/tar/package.py @@ -17,6 +17,8 @@ class Tar(AutotoolsPackage, GNUMirrorPackage): executables = [r'^tar$'] + tag = ['core-packages'] + version('1.34', sha256='03d908cf5768cfe6b7ad588c921c6ed21acabfb2b79b788d1330453507647aed') version('1.32', sha256='b59549594d91d84ee00c99cf2541a3330fed3a42c440503326dab767f2fbb96c') version('1.31', sha256='b471be6cb68fd13c4878297d856aebd50551646f4e3074906b1a74549c40d5a2') diff --git a/var/spack/repos/builtin/packages/texinfo/package.py b/var/spack/repos/builtin/packages/texinfo/package.py index 1dea56ce71..32ad2ef1e7 100644 --- a/var/spack/repos/builtin/packages/texinfo/package.py +++ b/var/spack/repos/builtin/packages/texinfo/package.py @@ -21,6 +21,8 @@ class Texinfo(AutotoolsPackage, GNUMirrorPackage): executables = ['^info$'] + tags = ['build-tools'] + version('6.5', sha256='d34272e4042c46186ddcd66bd5d980c0ca14ff734444686ccf8131f6ec8b1427') version('6.3', sha256='300a6ba4958c2dd4a6d5ce60f0a335daf7e379f5374f276f6ba31a221f02f606') version('6.0', sha256='83d3183290f34e7f958d209d0b20022c6fe9e921eb6fe94c27d988827d4878d2')