def makeDebugFlagCC(target, source, env):
assert(len(target) == 1 and len(source) == 1)
- val = eval(source[0].get_contents())
- name, compound, desc = val
- compound = list(sorted(compound))
-
code = code_formatter()
+ # delay definition of CompoundFlags until after all the definition
+ # of all constituent SimpleFlags
+ comp_code = code_formatter()
+
# file header
code('''
/*
- * DO NOT EDIT THIS FILE! Automatically generated
+ * DO NOT EDIT THIS FILE! Automatically generated by SCons.
*/
#include "base/debug.hh"
-''')
- for flag in compound:
- code('#include "debug/$flag.hh"')
- code()
- code('namespace Debug {')
- code()
+namespace Debug {
- if not compound:
- code('SimpleFlag $name("$name", "$desc");')
- else:
- code('CompoundFlag $name("$name", "$desc",')
- code.indent()
- last = len(compound) - 1
- for i,flag in enumerate(compound):
- if i != last:
- code('$flag,')
- else:
- code('$flag);')
- code.dedent()
+''')
+
+ for name, flag in sorted(source[0].read().iteritems()):
+ n, compound, desc = flag
+ assert n == name
+ if not compound:
+ code('SimpleFlag $name("$name", "$desc");')
+ else:
+ comp_code('CompoundFlag $name("$name", "$desc",')
+ comp_code.indent()
+ last = len(compound) - 1
+ for i,flag in enumerate(compound):
+ if i != last:
+ comp_code('$flag,')
+ else:
+ comp_code('$flag);')
+ comp_code.dedent()
+
+ code.append(comp_code)
code()
code('} // namespace Debug')
# file header boilerplate
code('''\
/*
- * DO NOT EDIT THIS FILE!
- *
- * Automatically generated by SCons
+ * DO NOT EDIT THIS FILE! Automatically generated by SCons.
*/
#ifndef __DEBUG_${name}_HH__
assert n == name
hh_file = 'debug/%s.hh' % name
- cc_file = 'debug/%s.cc' % name
env.Command(hh_file, Value(flag),
MakeAction(makeDebugFlagHH, Transform("TRACING", 0)))
- env.Command(cc_file, Value(flag),
- MakeAction(makeDebugFlagCC, Transform("TRACING", 0)))
- env.Depends(SWIG, [hh_file, cc_file])
- Source('debug/%s.cc' % name)
+ env.Depends(SWIG, hh_file)
+
+env.Command('debug/flags.cc', Value(debug_flags),
+ MakeAction(makeDebugFlagCC, Transform("TRACING", 0)))
+env.Depends(SWIG, 'debug/flags.cc')
+Source('debug/flags.cc')
# Embed python files. All .py files that have been indicated by a
# PySource() call in a SConscript need to be embedded into the M5