bugfix: external detection for compilers with os but not target (#44156)

avoid calling `spec.target` when None.

When an external compiler package has an `os` set but no `target` set, Spack
currently falls into a codepath that calls `spec.target` (which itself calls
`spec.architecture.target.Microarchitecture`) when `spec.architecture.target`
is None, throwing an error.

e.g.

```
packages:
  gcc:
    externals:
    - spec: gcc@12.3.1 os=rhel7
      prefix: /usr
```

---------

Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
This commit is contained in:
Greg Becker 2024-05-23 17:13:36 -07:00 committed by Harmen Stoppels
parent 2605aeb072
commit e7c86259bd

View file

@ -220,10 +220,10 @@ def _compiler_config_from_external(config):
operating_system = host_platform.operating_system("default_os") operating_system = host_platform.operating_system("default_os")
target = host_platform.target("default_target").microarchitecture target = host_platform.target("default_target").microarchitecture
else: else:
target = spec.target target = spec.architecture.target
if not target: if not target:
host_platform = spack.platforms.host() target = spack.platforms.host().target("default_target")
target = host_platform.target("default_target").microarchitecture target = target.microarchitecture
operating_system = spec.os operating_system = spec.os
if not operating_system: if not operating_system: