blob: c9cc037fc6fd84733712de5bcfb3e8c4155dc00b [file] [log] [blame]
Roman Okhrimenko977b3752022-03-31 14:40:48 +03001"""VERBOSE Makefile Generator
2Copyright (c) 2022 Infineon Technologies AG
3"""
4
5import os
6import re
7import sys
8
9
10def main():
11 """VERBOSE Makefile Generator"""
12 if len(sys.argv) != 2:
13 print(f'Usage: {sys.argv[0]} <makefile>\n', file=sys.stderr)
14 sys.exit(1)
15
16 with open(sys.argv[1], 'r', encoding='UTF-8') as mk_file:
17 mk_vars = {}
18
19 for line in mk_file:
20 line = line.strip()
21
22 if re.search(r'\s*#', line): # skip comments
23 continue
24
25 match = re.search(r'^\t*([A-Za-z_]\w+)\s*[+:?]=', line)
26 if match: # set variable
27 var = match.group(1)
28 mk_vars[var] = 1 | mk_vars.get(var, 0)
29
30 match = re.findall(r'\$\(([A-Za-z_]\w+)\)', line)
31 for var in match: # get variable(s)
32 mk_vars[var] = 2 | mk_vars.get(var, 0)
33
34 if mk_vars.get('VERBOSE'):
35 del mk_vars['VERBOSE']
36
37 print('''\
38###############################################################################
39# Print debug information about all settings used and/or set in this file
40ifeq ($(VERBOSE), 1)''')
41 print(f'$(info #### {os.path.basename(sys.argv[1])} ####)')
42 dirs = (None, '-->', '<--', '<->')
43 for var in sorted(mk_vars.keys()):
44 print(f'$(info {var} {dirs[mk_vars[var]]} $({var}))')
45 print('endif')
46
47
48if __name__ == '__main__':
49 main()