/ 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}")