--- /dev/null
+# Stubs for distutils.cmd\r
+\r
+from typing import Callable, List, Tuple, Union, Optional, Iterable, Any, Text\r
+from abc import abstractmethod\r
+from distutils.dist import Distribution\r
+\r
+class Command:\r
+ sub_commands = ... # type: List[Tuple[str, Union[Callable[[], bool], str, None]]]\r
+ def __init__(self, dist: Distribution) -> None: ...\r
+ @abstractmethod\r
+ def initialize_options(self) -> None: ...\r
+ @abstractmethod\r
+ def finalize_options(self) -> None: ...\r
+ @abstractmethod\r
+ def run(self) -> None: ...\r
+\r
+ def announce(self, msg: Text, level: int = ...) -> None: ...\r
+ def debug_print(self, msg: Text) -> None: ...\r
+\r
+ def ensure_string(self, option: str, default: Optional[str] = ...) -> None: ...\r
+ def ensure_string_list(self, option: Union[str, List[str]]) -> None: ...\r
+ def ensure_filename(self, option: str) -> None: ...\r
+ def ensure_dirname(self, option: str) -> None: ...\r
+\r
+ def get_command_name(self) -> str: ...\r
+ def set_undefined_options(self, src_cmd: Text, *option_pairs: Tuple[str, str]) -> None: ...\r
+ def get_finalized_command(self, command: Text, create: int = ...) -> Command: ...\r
+ def reinitialize_command(self, command: Union[Command, Text], reinit_subcommands: int = ...) -> Command: ...\r
+ def run_command(self, command: Text) -> None: ...\r
+ def get_sub_commands(self) -> List[str]: ...\r
+\r
+ def warn(self, msg: Text) -> None: ...\r
+ def execute(self, func: Callable[..., Any], args: Iterable[Any], msg: Optional[Text] = ..., level: int = ...) -> None: ...\r
+ def mkpath(self, name: str, mode: int = ...) -> None: ...\r
+ def copy_file(self, infile: str, outfile: str, preserve_mode: int = ..., preserve_times: int = ..., link: Optional[str] = ..., level: Any = ...) -> Tuple[str, bool]: ... # level is not used\r
+ def copy_tree(self, infile: str, outfile: str, preserve_mode: int = ..., preserve_times: int = ..., preserve_symlinks: int = ..., level: Any = ...) -> List[str]: ... # level is not used\r
+ def move_file(self, src: str, dest: str, level: Any = ...) -> str: ... # level is not used\r
+ def spawn(self, cmd: Iterable[str], search_path: int = ..., level: Any = ...) -> None: ... # level is not used\r
+ def make_archive(self, base_name: str, format: str, root_dir: Optional[str] = ..., base_dir: Optional[str] = ..., owner: Optional[str] = ..., group: Optional[str] = ...) -> str: ...\r
+ def make_file(self, infiles: Union[str, List[str], Tuple[str]], outfile: str, func: Callable[..., Any], args: List[Any], exec_msg: Optional[str] = ..., skip_msg: Optional[str] = ..., level: Any = ...) -> None: ... # level is not used\r