/ rules.py
rules.py
 1  #!/usr/bin/python3
 2  
 3  import os
 4  import sys
 5  
 6  MAKE_SCAD_STL = """
 7  -include {target}.d
 8  {target}: {src}
 9  \tmkdir -p $(dir {target})
10  \topenscad -o {target}.tmp.stl -d {target}.d $(SCAD_FLAGS) {flags} {src}
11  \tadmesh -b {target} {target}.tmp.stl
12  \trm -f {target}.tmp.stl
13  default:: {target}
14  """
15  
16  MAKE_SCAD_PNG = """
17  -include {target}.d
18  {target}: {src}
19  \tmkdir -p $(dir {target})
20  \topenscad -o {target} -d {target}.d $(SCAD_FLAGS) {flags} {src}
21  default:: {target}
22  """
23  
24  MAKE_STL_PNG = """
25  -include {target}.d
26  {target}: {src}
27  \tmkdir -p $(dir {target})
28  \topenscad -o {target} -d {target}.d $(SCAD_FLAGS) {flags} -Dinput=\"{src}\" readfile.scad
29  default:: {target}
30  """
31  
32  with open(sys.argv[1]) as f:
33      for row in f:
34          parts = row.split(":", 2)
35          if len(parts) == 1:
36              target = parts
37              src = f"{target}.scad"
38              if not os.exists(src):
39                  src = f"{target}.stl"
40              flags = ""
41          if len(parts) == 2:
42              target, src = parts
43              flags = ""
44          else:
45              target, src, flags = parts
46  
47      target = target.strip()
48      src = src.strip()
49      flags = flags.strip()
50  
51      src = f"resources/{src}"
52      target = f"resources/gen/{target}"
53  
54      if src.lower().endswith(".scad"):
55          if target.lower().endswith(".stl"):
56              print(MAKE_SCAD_STL.format(**{'target': target, 'src': src, 'flags': flags}))
57          elif target.lower().endswith(".png"):
58              print(MAKE_SCAD_PNG.format(**{'target': target, 'src': src, 'flags': flags}))
59          else:
60              print(f"# {target} has no recognized extension")
61              print(MAKE_SCAD_STL.format(**{'target': f"{target}.stl", 'src': src, 'flags': flags}))
62              print(MAKE_SCAD_PNG.format(**{'target': f"{target}.png", 'src': src, 'flags': flags}))
63      elif src.lower().endswith(".stl"):
64          if target.lower().endswith(".png"):
65              print(MAKE_STL_PNG.format(**{'target': target, 'src': src, 'flags': flags}))
66          else:
67              print(MAKE_STL_PNG.format(**{'target': f"{target}.png", 'src': src, 'flags': flags}))
68      else:
69          raise RuntimeError(f"Don't know how to handle {src} -> {target}")