Coverage for packages/pyswig/src/pyswig/cli_args.py: 100%
21 statements
« prev ^ index » next coverage.py v7.14.3, created at 2026-06-26 21:05 +0000
« prev ^ index » next coverage.py v7.14.3, created at 2026-06-26 21:05 +0000
1# Copyright (c) 2015-2020 Michel Gillet
2# SPDX-License-Identifier: MIT
4"""Shared command-line argument parsing for PySwig."""
6from __future__ import annotations
8import argparse
9from typing import TYPE_CHECKING
11if TYPE_CHECKING:
12 from pyswig.pyswig import PySwig
15def build_parser() -> argparse.ArgumentParser:
16 from pyswig.pyswig import PySwig
18 parser = argparse.ArgumentParser(
19 description="Generate Swig input files from annotated C/C++ headers.",
20 )
21 parser.add_argument(
22 "--version",
23 action="version",
24 version=f"%(prog)s {PySwig.VERSION}",
25 )
26 parser.add_argument(
27 "input_file",
28 nargs="*",
29 help="Optional header path(s); resolved to absolute paths without changing cwd",
30 )
31 parser.add_argument(
32 "-q",
33 "--quiet",
34 action="store_true",
35 help="Suppress informational messages",
36 )
37 parser.add_argument(
38 "--copy-shadow",
39 dest="copy_shadow_dir",
40 help="Copy the generated shadow file to this directory after SWIG runs",
41 )
42 parser.add_argument(
43 "--run-swig",
44 action="store_true",
45 help="Run SWIG after generating interface files",
46 )
47 parser.add_argument(
48 "-l",
49 "--language",
50 help="Swig target language (for example python or csharp)",
51 )
52 return parser
55def apply_to_engine(engine: PySwig, args: argparse.Namespace) -> None:
56 """Apply parsed CLI arguments to a PySwig instance."""
57 engine.set_input_files(list(args.input_file))
58 if args.quiet:
59 engine.set_verbose(False)
60 if args.copy_shadow_dir is not None:
61 engine.set_copy_shadow_dir(args.copy_shadow_dir)
62 if args.language is not None:
63 engine.set_language(args.language)