aboutsummaryrefslogtreecommitdiffstats
path: root/python/bindings/header_utils.py
blob: 165124e9695c83ce5ffe9c3275825e70751b881d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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())