a51846426476ed727cfe695a4111fd91db2d22b1
[senf.git] / senfscons / Dia2Png.py
1 """Dia2Png SCons Builder: Build a PNG file given a DIA file.
2
3 Support the specification of a scalefactor in the DIA2PNGDPI Environment variable.
4
5 """
6
7 import os
8 import SCons.Builder
9
10 def dia_getSize(env,source):
11     size = None
12     for line in os.popen(env['DIACOM']+" -e /proc/self/fd/1 -t eps "+str(source[0]),"r"):
13         if line.startswith("%%BoundingBox:"):
14             size=map(int,line.split()[3:])
15             break
16     return size
17
18 def dia2png_generator(source, target, env, for_signature):
19     if for_signature:
20         return "$DIACOM -t png -s $DIA2PNGDPI,$DIA2PNGMAXWIDTH $TARGET $SOURCE"
21     size = dia_getSize(env,source)
22     if not size: return None;
23     size[0] = size[0]*int(env['DIA2PNGDPI'])/72
24     size[1] = size[1]*int(env['DIA2PNGDPI'])/72
25     if size[0] > env['DIA2PNGMAXWIDTH']:
26         size[1] = size[1]*env['DIA2PNGMAXWIDTH']/size[0]
27         size[0] = env['DIA2PNGMAXWIDTH']
28     return env.Action("$DIACOM -t png -s %dx%d -e $TARGET $SOURCE" % tuple(size))
29
30 Dia2Png = SCons.Builder.Builder(suffix = ".png",
31                                 src_suffix = ".dia",
32                                 generator = dia2png_generator,
33                                 single_source = 1)
34
35 def generate(env):
36     env['BUILDERS']['Dia2Png'] = Dia2Png
37     env['DIACOM'] = "dia"
38     env['DIA2PNGDPI'] = 115
39     env['DIA2PNGMAXWIDTH'] = 800
40
41 def exists(env):
42     return env.Detect("dia")