1#!/usr/bin/python
2##
3## license:BSD-3-Clause
4## copyright-holders:Couriersud
5
6import os
7import os.path
8import re
9import sys
10import xml.sax
11import xml.sax.saxutils
12import zlib
13import datetime
14
15
16# workaround for version incompatibility
17if sys.version_info > (3, ):
18    long = int
19
20# globals
21
22last_src = ""
23
24def process_entry(srcfile, name, params):
25    global last_src
26    if (last_src != srcfile):
27        last_src = srcfile
28        print("// ---------------------------------------------------------------------")
29        print("// Source: {}".format(srcfile))
30        print("// ---------------------------------------------------------------------")
31        print("")
32    p = re.sub("\+","",params)
33    ps = p.split(",")
34    pusage = ""
35    pauto = ""
36    for x in ps:
37        if x[0:1] == "@":
38            pauto = pauto + ", " + x[1:]
39        else:
40            pusage = pusage + ", " + x
41    print("// usage       : {}(name{})".format(name, pusage))
42    if len(pauto) > 0:
43        print("// auto connect: {}".format(pauto[2:]))
44    print("#define {}(...)                                                   \\".format(name))
45    print("\tNET_REGISTER_DEVEXT({}, __VA_ARGS__)".format(name))
46    print("")
47
48
49def process_file(srcfile):
50    src = open(srcfile,'r')
51    lines = src.readlines()
52    for line in lines:
53        ls = re.sub("\s+","",line.strip())
54        ls = re.sub("^\s*//.*","",ls)
55        ls = re.sub("\"","",ls)
56        m = re.match(r"NETLIST_START\((\w+)\)", ls)
57        if m != None:
58            print("\tEXTERNAL_LIB_ENTRY("+ m.group(1) + ")")
59    src.close()
60
61if __name__ == '__main__':
62    if (len(sys.argv) == 0):
63        print('Usage:')
64        print('  create_devinc files ...')
65        sys.exit(0)
66    files_sorted = [];
67    for argno in range(1, len(sys.argv)):
68        files_sorted.append(sys.argv[argno])
69    files_sorted.sort();
70    print("// license:CC0")
71    print("// copyright-holders:Couriersud")
72    print("")
73    now = datetime.datetime.now()
74    print("// File programmatically created " + now.strftime("%c"))
75    print("")
76    print("#include \"devices/net_lib.h\"")
77    print("")
78    print("NETLIST_START(modules_lib)")
79    print("")
80    for entry in files_sorted:
81        process_file(entry)
82    print("")
83    print("NETLIST_END()")
84