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

1# Copyright (c) 2015-2020 Michel Gillet 

2# SPDX-License-Identifier: MIT 

3 

4"""Shared command-line argument parsing for PySwig.""" 

5 

6from __future__ import annotations 

7 

8import argparse 

9from typing import TYPE_CHECKING 

10 

11if TYPE_CHECKING: 

12 from pyswig.pyswig import PySwig 

13 

14 

15def build_parser() -> argparse.ArgumentParser: 

16 from pyswig.pyswig import PySwig 

17 

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 

53 

54 

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)