diff --git a/stdlib/distutils/ccompiler.pyi b/stdlib/distutils/ccompiler.pyi index e0f33f430e5a..56617d8a7b8d 100644 --- a/stdlib/distutils/ccompiler.pyi +++ b/stdlib/distutils/ccompiler.pyi @@ -1,5 +1,5 @@ from _typeshed import BytesPath, StrPath, Unused -from collections.abc import Callable, Iterable +from collections.abc import Callable, Iterable, Sequence from distutils.file_util import _BytesPathT, _StrPathT from typing import Literal, overload from typing_extensions import TypeAlias, TypeVarTuple, Unpack @@ -63,7 +63,7 @@ class CCompiler: def set_executables(self, **args: str) -> None: ... def compile( self, - sources: list[str], + sources: Sequence[StrPath], output_dir: str | None = None, macros: list[_Macro] | None = None, include_dirs: list[str] | None = None, diff --git a/stubs/setuptools/@tests/test_cases/check_distutils.py b/stubs/setuptools/@tests/test_cases/check_distutils.py index 78777f5888a2..cbd3e645c545 100644 --- a/stubs/setuptools/@tests/test_cases/check_distutils.py +++ b/stubs/setuptools/@tests/test_cases/check_distutils.py @@ -1,3 +1,31 @@ +from __future__ import annotations + import distutils.command.sdist +from _typeshed import StrPath +from os import PathLike +from pathlib import Path + +from setuptools._distutils.ccompiler import CCompiler c = distutils.command.sdist.sdist + +# Test CCompiler().compile with varied sources + +compiler = CCompiler() + +str_list: list[str] = ["file1.c", "file2.c"] +compiler.compile(sources=str_list) + +path_list: list[Path] = [Path("file1.c"), Path("file2.c")] +compiler.compile(sources=path_list) + +pathlike_list: list[PathLike[str]] = [Path("file1.c"), Path("file2.c")] +compiler.compile(sources=pathlike_list) + +strpath_list: list[StrPath] = [Path("file1.c"), "file2.c"] +compiler.compile(sources=strpath_list) + +# Direct literals should also work +compiler.compile(sources=["file1.c", "file2.c"]) +compiler.compile(sources=[Path("file1.c"), Path("file2.c")]) +compiler.compile(sources=[Path("file1.c"), "file2.c"]) diff --git a/stubs/setuptools/@tests/test_cases/check_extension.py b/stubs/setuptools/@tests/test_cases/check_extension.py new file mode 100644 index 000000000000..c798d4eb98ad --- /dev/null +++ b/stubs/setuptools/@tests/test_cases/check_extension.py @@ -0,0 +1,15 @@ +from __future__ import annotations + +from os import PathLike +from pathlib import Path + +from setuptools import Extension + +# Dummy extensions +ext1 = Extension(name="test1", sources=["file1.c", "file2.c"]) # plain list[str] works + +path_sources: list[Path] = [Path("file1.c"), Path("file2.c")] +ext2 = Extension(name="test2", sources=path_sources) # list of Path(s) + +mixed_sources: list[str | PathLike[str]] = [Path("file1.c"), "file2.c"] # or list[StrPath] +ext3 = Extension(name="test3", sources=mixed_sources) # mixed types diff --git a/stubs/setuptools/setuptools/_distutils/ccompiler.pyi b/stubs/setuptools/setuptools/_distutils/ccompiler.pyi index 2f6521aafe06..b0de290333e7 100644 --- a/stubs/setuptools/setuptools/_distutils/ccompiler.pyi +++ b/stubs/setuptools/setuptools/_distutils/ccompiler.pyi @@ -1,5 +1,5 @@ from _typeshed import BytesPath, StrPath, Unused -from collections.abc import Callable, Iterable +from collections.abc import Callable, Iterable, Sequence from typing import ClassVar, Literal, TypeVar, overload from typing_extensions import TypeAlias, TypeVarTuple, Unpack @@ -67,7 +67,7 @@ class CCompiler: def set_executables(self, **args: str) -> None: ... def compile( self, - sources: list[str], + sources: Sequence[StrPath], output_dir: str | None = None, macros: list[_Macro] | None = None, include_dirs: list[str] | None = None, diff --git a/stubs/setuptools/setuptools/_distutils/extension.pyi b/stubs/setuptools/setuptools/_distutils/extension.pyi index 789bbf6ec3d1..970c70a64437 100644 --- a/stubs/setuptools/setuptools/_distutils/extension.pyi +++ b/stubs/setuptools/setuptools/_distutils/extension.pyi @@ -1,6 +1,10 @@ +from _typeshed import StrPath +from os import PathLike +from pathlib import Path + class Extension: name: str - sources: list[str] + sources: list[str] | list[StrPath] include_dirs: list[str] define_macros: list[tuple[str, str | None]] undef_macros: list[str] @@ -18,7 +22,7 @@ class Extension: def __init__( self, name: str, - sources: list[str], + sources: list[str] | list[PathLike[str]] | list[Path] | list[StrPath], include_dirs: list[str] | None = None, define_macros: list[tuple[str, str | None]] | None = None, undef_macros: list[str] | None = None, diff --git a/stubs/setuptools/setuptools/extension.pyi b/stubs/setuptools/setuptools/extension.pyi index ff352d3dc6c6..300a51b6a7b0 100644 --- a/stubs/setuptools/setuptools/extension.pyi +++ b/stubs/setuptools/setuptools/extension.pyi @@ -1,4 +1,6 @@ from _typeshed import StrPath +from os import PathLike +from pathlib import Path from ._distutils.extension import Extension as _Extension @@ -9,7 +11,7 @@ class Extension(_Extension): def __init__( self, name: str, - sources: list[StrPath], + sources: list[str] | list[PathLike[str]] | list[Path] | list[StrPath], include_dirs: list[str] | None = None, define_macros: list[tuple[str, str | None]] | None = None, undef_macros: list[str] | None = None,