summaryrefslogtreecommitdiff
path: root/gr-utils/modtool/cli/bind.py
diff options
context:
space:
mode:
authorJosh Morman <mormjb@gmail.com>2020-04-23 15:03:55 -0400
committerJosh Morman <mormjb@gmail.com>2020-06-04 10:05:48 -0400
commit999c0e723240ee783bca17942f77a9d05bbfc168 (patch)
tree3661aeb0ef10bad228df014a20e5b0a63627c833 /gr-utils/modtool/cli/bind.py
parenta4e6d4d55b35ac36dd5915dec5145073d8ec3b9a (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.py54
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'] = '.'