2323from ..interpreterbase .decorators import ContainerTypeInfo , typed_kwargs , KwargInfo , typed_pos_args
2424from ..options import OptionKey
2525from .interpreterobjects import (extract_required_kwarg , extract_search_dirs )
26- from .type_checking import REQUIRED_KW , in_set_validator , NoneType
26+ from .type_checking import INCLUDE_DIRECTORIES , REQUIRED_KW , in_set_validator , NoneType
2727
2828if T .TYPE_CHECKING :
2929 from ..interpreter import Interpreter
@@ -86,15 +86,15 @@ class FindLibraryKW(ExtractRequired, ExtractSearchDirs):
8686 # prepended to the key
8787 header_args : T .List [str ]
8888 header_dependencies : T .List [dependencies .Dependency ]
89- header_include_directories : T .List [build .IncludeDirs ]
89+ header_include_directories : T .List [T . Union [ build .IncludeDirs , str ] ]
9090 header_no_builtin_args : bool
9191 header_prefix : str
9292 header_required : T .Union [bool , options .UserFeatureOption ]
9393
9494 class PreprocessKW (TypedDict ):
9595 output : str
9696 compile_args : T .List [str ]
97- include_directories : T .List [build .IncludeDirs ]
97+ include_directories : T .List [T . Union [ build .IncludeDirs , str ] ]
9898 dependencies : T .List [dependencies .Dependency ]
9999 depends : T .List [build .BuildTargetTypes ]
100100
@@ -154,12 +154,6 @@ def stderr_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
154154 listify = True ,
155155 default = [],
156156)
157- _INCLUDE_DIRS_KW : KwargInfo [T .List [build .IncludeDirs ]] = KwargInfo (
158- 'include_directories' ,
159- ContainerTypeInfo (list , build .IncludeDirs ),
160- default = [],
161- listify = True ,
162- )
163157_PREFIX_KW : KwargInfo [str ] = KwargInfo (
164158 'prefix' ,
165159 (str , ContainerTypeInfo (list , str )),
@@ -173,10 +167,10 @@ def stderr_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
173167
174168# Many of the compiler methods take this kwarg signature exactly, this allows
175169# simplifying the `typed_kwargs` calls
176- _COMMON_KWS : T .List [KwargInfo ] = [_ARGS_KW , _DEPENDENCIES_KW , _INCLUDE_DIRS_KW , _PREFIX_KW , _NO_BUILTIN_ARGS_KW ]
170+ _COMMON_KWS : T .List [KwargInfo ] = [_ARGS_KW , _DEPENDENCIES_KW , INCLUDE_DIRECTORIES , _PREFIX_KW , _NO_BUILTIN_ARGS_KW ]
177171
178172# Common methods of compiles, links, runs, and similar
179- _COMPILES_KWS : T .List [KwargInfo ] = [_NAME_KW , _ARGS_KW , _DEPENDENCIES_KW , _INCLUDE_DIRS_KW , _NO_BUILTIN_ARGS_KW ,
173+ _COMPILES_KWS : T .List [KwargInfo ] = [_NAME_KW , _ARGS_KW , _DEPENDENCIES_KW , INCLUDE_DIRECTORIES , _NO_BUILTIN_ARGS_KW ,
180174 _WERROR_KW ,
181175 REQUIRED_KW .evolve (since = '1.5.0' , default = False )]
182176
@@ -232,7 +226,7 @@ def cmd_array_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> T
232226 def _determine_args (self , kwargs : BaseCompileKW ,
233227 mode : CompileCheckMode = CompileCheckMode .LINK ) -> T .List [str ]:
234228 args : T .List [str ] = []
235- for i in kwargs [ 'include_directories' ] :
229+ for i in self . interpreter . extract_incdirs ( kwargs , strings_since = '1.10.0' ) :
236230 for idir in i .to_string_list (self .environment .get_source_dir (), self .environment .get_build_dir ()):
237231 args .extend (self .compiler .get_include_args (idir , False ))
238232 if not kwargs ['no_builtin_args' ]:
@@ -687,13 +681,15 @@ def find_library_method(self, args: T.Tuple[str], kwargs: 'FindLibraryKW') -> 'd
687681 mlog .log ('Library' , mlog .bold (libname ), 'skipped: feature' , mlog .bold (feature ), 'disabled' )
688682 return self .notfound_library (libname )
689683
684+ include_directories = self .interpreter .extract_incdirs (kwargs , key = 'header_include_directories' , strings_since = '1.10.0' )
685+
690686 # This could be done with a comprehension, but that confuses the type
691687 # checker, and having it check this seems valuable
692688 has_header_kwargs : 'HeaderKW' = {
693689 'required' : required ,
694690 'args' : kwargs ['header_args' ],
695691 'dependencies' : kwargs ['header_dependencies' ],
696- 'include_directories' : kwargs [ 'header_include_directories' ] ,
692+ 'include_directories' : include_directories ,
697693 'prefix' : kwargs ['header_prefix' ],
698694 'no_builtin_args' : kwargs ['header_no_builtin_args' ],
699695 }
@@ -890,7 +886,7 @@ def get_argument_syntax_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwa
890886 'compiler.preprocess' ,
891887 KwargInfo ('output' , str , default = '@PLAINNAME@.i' ),
892888 KwargInfo ('compile_args' , ContainerTypeInfo (list , str ), listify = True , default = []),
893- _INCLUDE_DIRS_KW ,
889+ INCLUDE_DIRECTORIES ,
894890 _DEPENDENCIES_KW .evolve (since = '1.1.0' ),
895891 _DEPENDS_KW .evolve (since = '1.4.0' ),
896892 )
@@ -918,7 +914,7 @@ def preprocess_method(self, args: T.Tuple[T.List['mesonlib.FileOrString']], kwar
918914 compiler ,
919915 self .interpreter .backend ,
920916 kwargs ['compile_args' ],
921- kwargs [ 'include_directories' ] ,
917+ self . interpreter . extract_incdirs ( kwargs , strings_since = '1.10.0' ) ,
922918 kwargs ['dependencies' ],
923919 kwargs ['depends' ])
924920 self .interpreter .add_target (tg .name , tg )
0 commit comments