summaryrefslogtreecommitdiff
path: root/gr-utils
diff options
context:
space:
mode:
authorJosh Morman <mormjb@gmail.com>2020-05-29 08:05:28 -0400
committerJosh Morman <mormjb@gmail.com>2020-06-04 10:05:48 -0400
commitfbb1f97a4d3e879fcfd15e9826f3b05cfc8504bd (patch)
tree718cbb1d95263dfb42117ec2be2845d77fcae1dd /gr-utils
parent34d8e7281fd908f26e1c77830e7779bcaac0b5b7 (diff)
pybind: incorporate modtool rm
Diffstat (limited to 'gr-utils')
-rw-r--r--gr-utils/modtool/core/add.py2
-rw-r--r--gr-utils/modtool/core/rm.py38
-rw-r--r--gr-utils/modtool/tools/cppfile_editor.py22
3 files changed, 47 insertions, 15 deletions
diff --git a/gr-utils/modtool/core/add.py b/gr-utils/modtool/core/add.py
index 872d0a08a9..40bfe74d3f 100644
--- a/gr-utils/modtool/core/add.py
+++ b/gr-utils/modtool/core/add.py
@@ -1,5 +1,5 @@
#
-# Copyright 2013-2014,2017-2019 Free Software Foundation, Inc.
+# Copyright 2013-2014,2017-2020 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
diff --git a/gr-utils/modtool/core/rm.py b/gr-utils/modtool/core/rm.py
index 1a2a3535e4..b65465cd16 100644
--- a/gr-utils/modtool/core/rm.py
+++ b/gr-utils/modtool/core/rm.py
@@ -1,5 +1,5 @@
#
-# Copyright 2013, 2018, 2019 Free Software Foundation, Inc.
+# Copyright 2013, 2018-2020 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -18,7 +18,7 @@ import sys
import glob
import logging
-from ..tools import remove_pattern_from_file, CMakeFileEditor
+from ..tools import remove_pattern_from_file, CMakeFileEditor, CPPFileEditor
from .base import ModTool, ModToolException
logger = logging.getLogger(__name__)
@@ -102,6 +102,19 @@ class ModToolRemove(ModTool):
for f in py_files_deleted:
remove_pattern_from_file(self._file['pyinit'], fr'.*import\s+{f[:-3]}.*')
remove_pattern_from_file(self._file['pyinit'], fr'.*from\s+{f[:-3]}\s+import.*\n')
+
+ pb_files_deleted = self._run_subdir('python/bindings', ('*.cc',), ('list',))
+
+ pbdoc_files_deleted = self._run_subdir('python/bindings/docstrings', ('*.h',), ('',))
+
+ # Update python_bindings.cc
+ ed = CPPFileEditor(self._file['ccpybind'])
+ ed.remove_value('// BINDING_FUNCTION_PROTOTYPES(', '// ) END BINDING_FUNCTION_PROTOTYPES',
+ 'void bind_' + self.info['blockname'] + '(py::module& m);')
+ ed.remove_value('// BINDING_FUNCTION_CALLS(', '// ) END BINDING_FUNCTION_CALLS',
+ 'bind_' + self.info['blockname'] + '(m);')
+ ed.write()
+
if not self.skip_subdirs['grc']:
self._run_subdir('grc', ('*.yml',), ('install',))
@@ -120,7 +133,7 @@ class ModToolRemove(ModTool):
for g in globs:
files = files + sorted(glob.glob(f"{path}/{g}"))
files_filt = []
- logger.info("Searching for matching files in {path}/:")
+ logger.info(f"Searching for matching files in {path}/:")
for f in files:
if re.search(self.info['pattern'], os.path.basename(f)) is not None:
files_filt.append(f)
@@ -129,7 +142,6 @@ class ModToolRemove(ModTool):
return []
# 2. Delete files, Makefile entries and other occurrences
files_deleted = []
- ed = CMakeFileEditor(f'{path}/CMakeLists.txt')
yes = self.info['yes']
for f in files_filt:
b = os.path.basename(f)
@@ -145,11 +157,15 @@ class ModToolRemove(ModTool):
logger.info(f"Deleting {f}.")
self.scm.remove_file(f)
os.unlink(f)
- logger.info(f"Deleting occurrences of {b} from {path}/CMakeLists.txt...")
- for var in makefile_vars:
- ed.remove_value(var, b)
- if cmakeedit_func is not None:
- cmakeedit_func(b, ed)
- ed.write()
- self.scm.mark_files_updated((f'{path}/CMakeLists.txt'))
+
+ if (os.path.exists(f'{path}/CMakeLists.txt')):
+ ed = CMakeFileEditor(f'{path}/CMakeLists.txt')
+ logger.info(f"Deleting occurrences of {b} from {path}/CMakeLists.txt...")
+ for var in makefile_vars:
+ ed.remove_value(var, b)
+ if cmakeedit_func is not None:
+ cmakeedit_func(b, ed)
+ ed.write()
+ self.scm.mark_files_updated((f'{path}/CMakeLists.txt'))
+
return files_deleted
diff --git a/gr-utils/modtool/tools/cppfile_editor.py b/gr-utils/modtool/tools/cppfile_editor.py
index 9f2d3f1fda..052a887221 100644
--- a/gr-utils/modtool/tools/cppfile_editor.py
+++ b/gr-utils/modtool/tools/cppfile_editor.py
@@ -45,9 +45,25 @@ class CPPFileEditor(object):
return 1
- def remove_value(self, entry, value, to_ignore_start='', to_ignore_end=''):
- # TODO - gr_modtool rm
- pass
+ def remove_value(self, start_tag, end_tag, value):
+
+ cfile_lines = self.cfile.splitlines()
+ try:
+ start_line_idx = [cfile_lines.index(s) for s in cfile_lines if start_tag in s][0]
+ end_line_idx = [cfile_lines.index(s) for s in cfile_lines if end_tag in s][0]
+ except:
+ logger.warning("Could not find start or end tags in search")
+ return 0
+
+ try:
+ lines_between_tags = cfile_lines[(start_line_idx+1):end_line_idx]
+ remove_index = [lines_between_tags.index(s) for s in cfile_lines if value in s][0]
+ lines_between_tags.pop(remove_index)
+ except:
+ return 0
+
+ self.cfile = '\n'.join((cfile_lines[0:(start_line_idx+1)]+lines_between_tags+cfile_lines[end_line_idx:]))
+ return 1
def delete_entry(self, entry, value_pattern=''):
"""Remove an entry from the current buffer."""