Spec Header Dirs: Only first include/ (#13991)

* CUDA HeaderList: Unit Test

* Spec Header Dirs: Only first include/

Avoid matching recurringly nested include paths that usually
refer to internally shipped libraries in packages.
Example in CUDA Toolkit, shipping a libc++ fork internally
with libcu++ since 10.2.89:
`<prefix>/include/cuda/some/more/details/include/` or
`<prefix>/include/cuda/std/detail/libcxx/include`

regex: non-greedy first match of include

Co-Authored-By: Massimiliano Culpo <massimiliano.culpo@gmail.com>

* CUDA: Re-Enable 10.2.89 as Default
This commit is contained in:
Axel Huebl 2019-12-06 23:47:03 -08:00 committed by GitHub
parent 9d9737f765
commit d705e96a63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 4 deletions

View file

@ -1156,7 +1156,9 @@ class HeaderList(FileList):
# Make sure to only match complete words, otherwise path components such # Make sure to only match complete words, otherwise path components such
# as "xinclude" will cause false matches. # as "xinclude" will cause false matches.
include_regex = re.compile(r'(.*)(\binclude\b)(.*)') # Avoid matching paths such as <prefix>/include/something/detail/include,
# e.g. in the CUDA Toolkit which ships internal libc++ headers.
include_regex = re.compile(r'(.*?)(\binclude\b)(.*)')
def __init__(self, files): def __init__(self, files):
super(HeaderList, self).__init__(files) super(HeaderList, self).__init__(files)

View file

@ -17,7 +17,7 @@
from spack.util.spack_yaml import syaml_dict, syaml_str from spack.util.spack_yaml import syaml_dict, syaml_str
from spack.util.environment import EnvironmentModifications from spack.util.environment import EnvironmentModifications
from llnl.util.filesystem import LibraryList from llnl.util.filesystem import LibraryList, HeaderList
@pytest.fixture @pytest.fixture
@ -243,6 +243,18 @@ def test_set_build_environment_variables(
variables. variables.
""" """
# https://github.com/spack/spack/issues/13969
cuda_headers = HeaderList([
'prefix/include/cuda_runtime.h',
'prefix/include/cuda/atomic',
'prefix/include/cuda/std/detail/libcxx/include/ctype.h'])
cuda_include_dirs = cuda_headers.directories
assert(os.path.join('prefix', 'include')
in cuda_include_dirs)
assert(os.path.join('prefix', 'include', 'cuda', 'std', 'detail',
'libcxx', 'include')
not in cuda_include_dirs)
root = spack.spec.Spec('dt-diamond') root = spack.spec.Spec('dt-diamond')
root.concretize() root.concretize()

View file

@ -60,8 +60,7 @@ class Cuda(Package):
key = "{0}-{1}".format(platform.system(), platform.machine()) key = "{0}-{1}".format(platform.system(), platform.machine())
pkg = packages.get(key) pkg = packages.get(key)
if pkg: if pkg:
version(ver, sha256=pkg[0], url=pkg[1], expand=False, version(ver, sha256=pkg[0], url=pkg[1], expand=False)
preferred=(ver == "10.1.243")) # see GH issue 13969
# macOS Mojave drops NVIDIA graphics card support -- official NVIDIA # macOS Mojave drops NVIDIA graphics card support -- official NVIDIA
# drivers do not exist for Mojave. See # drivers do not exist for Mojave. See