# # NopSCADlib Copyright Chris Palmer 2018 # nop.head@gmail.com # hydraraptor.blogspot.com # # This file is part of NopSCADlib. # # NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the # GNU General Public License as published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with NopSCADlib. # If not, see . # import os from set_config import source_dir from colorama import Fore def mtime(file): if os.path.isfile(file): return os.path.getmtime(file) return 0 def deps_name(dir, scad_name): return dir + '/' + scad_name[:-5] + '.deps' def read_deps(dname): with open(dname, "rt") as file: lines = file.readlines() deps = [] for line in lines: if line.startswith('\t'): dep = line[1 : -1].rstrip(' \\').replace('\\ ', ' ') if not os.path.basename(dep) in ['stl.scad', 'dxf.scad', 'svf.scad', 'png.scad', 'target.scad']: deps.append(dep) return deps def check_deps(target, dname): target_mtime = mtime(target) if not target_mtime: return Fore.CYAN + target + " missing" + Fore.WHITE if not os.path.isfile(dname): return Fore.CYAN + "no deps" + Fore.WHITE deps = read_deps(dname) for dep in deps: if mtime(dep) > target_mtime: return Fore.CYAN + dep + ' changed' + Fore.WHITE return None def source_dirs(bom_dir): dirs = set() lib_dirs = set() deps = read_deps(bom_dir + '/bom.deps') cwd = os.getcwd().replace('\\', '/') for dep in deps: dir = os.path.dirname(dep) if dir.startswith(cwd): dirs.add(dir[len(cwd) + 1:]) else: if dir.endswith('/printed'): lib_dirs.add(dir) dirs.remove(source_dir) return [source_dir] + sorted(dirs) + sorted(lib_dirs)