Testing framework refactoring and move, new tests.mk
[gfxprim.git] / pylib / gfxprim / generators / utils.py
blob3ddc7ad9583e643e77c75f8a7f4277f88324216a
1 # Module with templates and tools for writing generated code,
2 # especially C source and headers
4 # 2011 - Tomas Gavenciak <gavento@ucw.cz>
7 import sys, os, time
8 import jinja2
9 from gfxprim import die
11 def j2render(tmpl, **kw):
12 "Internal helper to render jinja2 templates (with StrictUndefined)"
13 t2 = tmpl.rstrip('\n') # Jinja strips the last '\n', so add these later
14 return jinja2.Template(t2, undefined=jinja2.StrictUndefined).render(**kw) + tmpl[len(t2):]
16 def load_generators():
17 "Load all modules containig generators to allow them to register"
18 # TODO: write proper discovery
19 import gfxprim.generators.make_collected_tests
20 import gfxprim.generators.core.make_GP_Pixel
21 import gfxprim.generators.core.make_GP_Blit
22 pass
24 def generate_file(fname):
25 from gfxprim.generators.generator import known_generators
26 "Function trying to generate file `fname` using matching known generator."
27 matches = []
28 for k in known_generators:
29 if k.matches_path(fname):
30 matches.append(k)
31 if len(matches) == 0:
32 die("No known generators match '%s'" % (fname,))
33 if len(matches) > 1:
34 die("Multiple generators match '%s': %s" % (fname, str(matches)))
35 s = matches[0].generate()
36 with open(fname, "wt") as f:
37 f.write(s)
39 def hmask(bits):
40 "Helper returning hex mask for that many bits"
41 return hex((1<<bits)-1).rstrip('L')