From 3165f73d7c6224523957fa69beade6069efea6ef Mon Sep 17 00:00:00 2001
From: mormj <34754695+mormj@users.noreply.github.com>
Date: Fri, 22 May 2020 14:21:09 -0400
Subject: pybind: add hash check to binding file creation (#3472)

---
 gr-utils/bindtool/scripts/header_utils.py | 78 +++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)
 create mode 100644 gr-utils/bindtool/scripts/header_utils.py

(limited to 'gr-utils/bindtool/scripts/header_utils.py')

diff --git a/gr-utils/bindtool/scripts/header_utils.py b/gr-utils/bindtool/scripts/header_utils.py
new file mode 100644
index 0000000000..165124e969
--- /dev/null
+++ b/gr-utils/bindtool/scripts/header_utils.py
@@ -0,0 +1,78 @@
+# Utilities for reading values in header files
+
+from argparse import ArgumentParser
+import re
+
+
+class PybindHeaderParser:
+    def __init__(self, pathname):
+        with open(pathname,'r') as f:
+            self.file_txt = f.read()
+
+    def get_flag_automatic(self):
+        # p = re.compile(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)')
+        # m = p.search(self.file_txt)
+        m = re.search(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)', self.file_txt)
+        if (m and m.group(1) == '1'):
+            return True
+        else:
+            return False
+        
+    def get_flag_pygccxml(self):    
+        # p = re.compile(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)')
+        # m = p.search(self.file_txt)
+        m = re.search(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)', self.file_txt)
+        if (m and m.group(1) == '1'):
+            return True
+        else:
+            return False
+
+    def get_header_filename(self):
+        # p = re.compile(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)')
+        # m = p.search(self.file_txt)
+        m = re.search(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)', self.file_txt)
+        if (m):
+            return m.group(1)
+        else:
+            return None
+
+    def get_header_file_hash(self):
+        # p = re.compile(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)')
+        # m = p.search(self.file_txt)
+        m = re.search(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)', self.file_txt)
+        if (m):
+            return m.group(1)
+        else:
+            return None
+
+    def get_flags(self):
+        return f'{self.get_flag_automatic()};{self.get_flag_pygccxml()};{self.get_header_filename()};{self.get_header_file_hash()};'
+
+
+
+def argParse():
+    """Parses commandline args."""
+    desc='Reads the parameters from the comment block in the pybind files'
+    parser = ArgumentParser(description=desc)
+    
+    parser.add_argument("function", help="Operation to perform on comment block of pybind file", choices=["flag_auto","flag_pygccxml","header_filename","header_file_hash","all"])
+    parser.add_argument("pathname", help="Pathname of pybind c++ file to read, e.g. blockname_python.cc")
+
+    return parser.parse_args()
+
+if __name__ == "__main__":
+    # Parse command line options and set up doxyxml.
+    args = argParse()
+
+    pbhp = PybindHeaderParser(args.pathname)
+
+    if args.function == "flag_auto":
+        print(pbhp.get_flag_automatic())
+    elif args.function == "flag_pygccxml":
+        print(pbhp.get_flag_pygccxml())
+    elif args.function == "header_filename":
+        print(pbhp.get_header_filename())
+    elif args.function == "header_file_hash":
+        print(pbhp.get_header_file_hash()) 
+    elif args.function == "all":
+        print(pbhp.get_flags())
\ No newline at end of file
-- 
cgit v1.2.3


From a7436c3062aa6e81e476b283f571626b8dd73a07 Mon Sep 17 00:00:00 2001
From: Josh Morman <mormjb@gmail.com>
Date: Thu, 11 Jun 2020 11:32:11 -0400
Subject: pybind: add exception handling to pybind header parsing

---
 gr-utils/bindtool/scripts/header_utils.py | 64 +++++++++++++++++--------------
 1 file changed, 36 insertions(+), 28 deletions(-)

(limited to 'gr-utils/bindtool/scripts/header_utils.py')

diff --git a/gr-utils/bindtool/scripts/header_utils.py b/gr-utils/bindtool/scripts/header_utils.py
index 165124e969..4071f6fa86 100644
--- a/gr-utils/bindtool/scripts/header_utils.py
+++ b/gr-utils/bindtool/scripts/header_utils.py
@@ -6,43 +6,51 @@ import re
 
 class PybindHeaderParser:
     def __init__(self, pathname):
-        with open(pathname,'r') as f:
-            self.file_txt = f.read()
+        try:
+            with open(pathname,'r') as f:
+                self.file_txt = f.read()
+        except:
+            self.file_txt = ""
 
     def get_flag_automatic(self):
-        # p = re.compile(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)')
-        # m = p.search(self.file_txt)
-        m = re.search(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)', self.file_txt)
-        if (m and m.group(1) == '1'):
-            return True
-        else:
+        try:
+            m = re.search(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)', self.file_txt)
+            if (m and m.group(1) == '1'):
+                return True
+            else:
+                return False
+        except:
             return False
-        
-    def get_flag_pygccxml(self):    
-        # p = re.compile(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)')
-        # m = p.search(self.file_txt)
-        m = re.search(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)', self.file_txt)
-        if (m and m.group(1) == '1'):
-            return True
-        else:
+
+    def get_flag_pygccxml(self):
+        try:
+            m = re.search(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)', self.file_txt)
+            if (m and m.group(1) == '1'):
+                return True
+            else:
+                return False
+        except:
             return False
 
     def get_header_filename(self):
-        # p = re.compile(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)')
-        # m = p.search(self.file_txt)
-        m = re.search(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)', self.file_txt)
-        if (m):
-            return m.group(1)
-        else:
+        try:
+            m = re.search(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)', self.file_txt)
+            if (m):
+                return m.group(1)
+            else:
+                return None
+        except:
             return None
 
+
     def get_header_file_hash(self):
-        # p = re.compile(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)')
-        # m = p.search(self.file_txt)
-        m = re.search(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)', self.file_txt)
-        if (m):
-            return m.group(1)
-        else:
+        try:
+            m = re.search(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)', self.file_txt)
+            if (m):
+                return m.group(1)
+            else:
+                return None
+        except:
             return None
 
     def get_flags(self):
-- 
cgit v1.2.3