@@ -357,6 +357,7 @@ def build_using_shared_lib(
357357 deps : list [str ],
358358 build_dir : str ,
359359 extra_compile_args : list [str ],
360+ extra_include_dirs : list [str ],
360361) -> list [Extension ]:
361362 """Produce the list of extension modules when a shared library is needed.
362363
@@ -373,7 +374,7 @@ def build_using_shared_lib(
373374 get_extension ()(
374375 shared_lib_name (group_name ),
375376 sources = cfiles ,
376- include_dirs = [include_dir (), build_dir ],
377+ include_dirs = [include_dir (), build_dir ] + extra_include_dirs ,
377378 depends = deps ,
378379 extra_compile_args = extra_compile_args ,
379380 )
@@ -399,7 +400,10 @@ def build_using_shared_lib(
399400
400401
401402def build_single_module (
402- sources : list [BuildSource ], cfiles : list [str ], extra_compile_args : list [str ]
403+ sources : list [BuildSource ],
404+ cfiles : list [str ],
405+ extra_compile_args : list [str ],
406+ extra_include_dirs : list [str ],
403407) -> list [Extension ]:
404408 """Produce the list of extension modules for a standalone extension.
405409
@@ -409,7 +413,7 @@ def build_single_module(
409413 get_extension ()(
410414 sources [0 ].module ,
411415 sources = cfiles ,
412- include_dirs = [include_dir ()],
416+ include_dirs = [include_dir ()] + extra_include_dirs ,
413417 extra_compile_args = extra_compile_args ,
414418 )
415419 ]
@@ -513,7 +517,9 @@ def mypyc_build(
513517 * ,
514518 separate : bool | list [tuple [list [str ], str | None ]] = False ,
515519 only_compile_paths : Iterable [str ] | None = None ,
516- skip_cgen_input : tuple [list [list [tuple [str , str ]]], list [str ]] | None = None ,
520+ skip_cgen_input : (
521+ tuple [list [list [tuple [str , str ]]], list [tuple [str , bool , list [str ]]]] | None
522+ ) = None ,
517523 always_use_shared_lib : bool = False ,
518524) -> tuple [emitmodule .Groups , list [tuple [list [str ], list [str ]]], list [SourceDep ]]:
519525 """Do the front and middle end of mypyc building, producing and writing out C source."""
@@ -547,7 +553,10 @@ def mypyc_build(
547553 write_file (os .path .join (compiler_options .target_dir , "ops.txt" ), ops_text )
548554 else :
549555 group_cfiles = skip_cgen_input [0 ]
550- source_deps = [SourceDep (d ) for d in skip_cgen_input [1 ]]
556+ source_deps = [
557+ SourceDep (path , has_header = hdr , include_dirs = dirs )
558+ for (path , hdr , dirs ) in skip_cgen_input [1 ]
559+ ]
551560
552561 # Write out the generated C and collect the files for each group
553562 # Should this be here??
@@ -664,7 +673,9 @@ def mypycify(
664673 strip_asserts : bool = False ,
665674 multi_file : bool = False ,
666675 separate : bool | list [tuple [list [str ], str | None ]] = False ,
667- skip_cgen_input : tuple [list [list [tuple [str , str ]]], list [str ]] | None = None ,
676+ skip_cgen_input : (
677+ tuple [list [list [tuple [str , str ]]], list [tuple [str , bool , list [str ]]]] | None
678+ ) = None ,
668679 target_dir : str | None = None ,
669680 include_runtime_files : bool | None = None ,
670681 strict_dunder_typing : bool = False ,
@@ -781,12 +792,15 @@ def mypycify(
781792 # runtime library in. Otherwise it just gets #included to save on
782793 # compiler invocations.
783794 shared_cfilenames = []
795+ include_dirs = set ()
784796 if not compiler_options .include_runtime_files :
785797 # Collect all files to copy: runtime files + conditional source files
786798 files_to_copy = list (RUNTIME_C_FILES )
787799 for source_dep in source_deps :
788800 files_to_copy .append (source_dep .path )
789- files_to_copy .append (source_dep .get_header ())
801+ if header := source_dep .get_header ():
802+ files_to_copy .append (header )
803+ include_dirs .update (source_dep .include_dirs )
790804
791805 # Copy all files
792806 for name in files_to_copy :
@@ -797,6 +811,7 @@ def mypycify(
797811 shared_cfilenames .append (rt_file )
798812
799813 extensions = []
814+ extra_include_dirs = [os .path .join (include_dir (), dir ) for dir in include_dirs ]
800815 for (group_sources , lib_name ), (cfilenames , deps ) in zip (groups , group_cfilenames ):
801816 if lib_name :
802817 extensions .extend (
@@ -807,11 +822,14 @@ def mypycify(
807822 deps ,
808823 build_dir ,
809824 cflags ,
825+ extra_include_dirs ,
810826 )
811827 )
812828 else :
813829 extensions .extend (
814- build_single_module (group_sources , cfilenames + shared_cfilenames , cflags )
830+ build_single_module (
831+ group_sources , cfilenames + shared_cfilenames , cflags , extra_include_dirs
832+ )
815833 )
816834
817835 if install_librt :
0 commit comments