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
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
# 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):
super(HeaderList, self).__init__(files)

View File

@@ -17,7 +17,7 @@
from spack.util.spack_yaml import syaml_dict, syaml_str
from spack.util.environment import EnvironmentModifications
from llnl.util.filesystem import LibraryList
from llnl.util.filesystem import LibraryList, HeaderList
@pytest.fixture
@@ -243,6 +243,18 @@ def test_set_build_environment_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.concretize()