Belle II Software  release-05-01-25
reg_map.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 import os
5 import re
6 from SCons.Builder import Builder
7 
8 # regular expression to find module names in source files
9 # corresponding code to get module name in ModuleManager::fillModuleNameLibMap()
10 reg_re = re.compile(r'^\s*(REG_[A-Z0-9_]+\s*\([\S ]+\))', re.M)
11 
12 
13 def build_map(target, source, env):
14  # extract the module names from all source files
15 
16  # create target output file
17  map_file = open(str(target[0]), 'w')
18 
19  # loop over source files and extract registered modules
20  nModules = 0
21  for source_file in source:
22  # ignore libs
23  if str(source_file).endswith(env.subst('$SHLIBSUFFIX')):
24  continue
25 
26  contents = source_file.get_text_contents()
27  for entry in reg_re.findall(contents):
28  map_file.write(entry + '\n')
29  nModules += 1
30 
31  map_file.close()
32 
33  if nModules == 0:
34  return "Module map file empty. Did you forget REG_MODULE(...) in your module source file?"
35 
36  return None
37 
38 
39 # define builder for module map files
40 map_builder = Builder(action=build_map)
41 map_builder.action.cmdstr = '${MAPCOMSTR}'
42 
43 
44 def generate(env):
45  env['BUILDERS']['RegMap'] = map_builder
46 
47 
48 def exists(env):
49  return True