diff options
author | Josh Morman <mormjb@gmail.com> | 2020-04-23 15:03:55 -0400 |
---|---|---|
committer | Josh Morman <mormjb@gmail.com> | 2020-06-04 10:05:48 -0400 |
commit | 999c0e723240ee783bca17942f77a9d05bbfc168 (patch) | |
tree | 3661aeb0ef10bad228df014a20e5b0a63627c833 /gr-utils/modtool/cli/bind.py | |
parent | a4e6d4d55b35ac36dd5915dec5145073d8ec3b9a (diff) |
utils: add functionality to generate bindings
This currently exists in two places
1) Bindtool (longevity TBD) which calls blocktool to parse the public
header file in the include directory
2) Modtool - binding of headers added to add and bind. rm, update,
info, etc still TODO
Diffstat (limited to 'gr-utils/modtool/cli/bind.py')
-rw-r--r-- | gr-utils/modtool/cli/bind.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/gr-utils/modtool/cli/bind.py b/gr-utils/modtool/cli/bind.py new file mode 100644 index 0000000000..48d01d0491 --- /dev/null +++ b/gr-utils/modtool/cli/bind.py @@ -0,0 +1,54 @@ +# +# Copyright 2018 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# +""" Create Python bindings for GR block """ + +from __future__ import print_function +from __future__ import absolute_import +from __future__ import unicode_literals + +import os +import click + +try: + from gnuradio.blocktool import BlockHeaderParser + from gnuradio.blocktool.core.base import BlockToolException +except ImportError: + have_blocktool = False +else: + have_blocktool = True + +from ..core import ModToolGenBindings, get_block_candidates +from ..tools import SequenceCompleter +from .base import common_params, block_name, run, cli_input + + +@click.command('bind', short_help=ModToolGenBindings.description) +@click.option('-o', '--output', is_flag=True, + help='If given, a file with desired output format will be generated') +@common_params +@block_name +def cli(**kwargs): + """ + \b + Create Python bindings for GR C++ block + """ + kwargs['cli'] = True + self = ModToolGenBindings(**kwargs) + click.secho("GNU Radio module name identified: " + self.info['modname'], fg='green') + get_pattern(self) + run(self) + +def get_pattern(self): + """ Get the regex pattern for block(s) to be parsed """ + if self.info['pattern'] is None: + block_candidates = get_block_candidates() + with SequenceCompleter(block_candidates): + self.info['pattern'] = cli_input('Which blocks do you want to parse? (Regex): ') + if not self.info['pattern'] or self.info['pattern'].isspace(): + self.info['pattern'] = '.' |