def _dump_includes(env): includes = [] for item in env.get("CPPPATH", []): includes.append(env.subst(item)) # installed libs for lb in env.GetLibBuilders(): includes.extend(lb.get_include_dirs()) # includes from toolchains p = env.PioPlatform() for name in p.get_installed_packages(): if p.get_package_type(name) != "toolchain": continue toolchain_dir = util.glob_escape(p.get_package_dir(name)) toolchain_incglobs = [ join(toolchain_dir, "*", "include*"), join(toolchain_dir, "*", "include", "c++", "*"), join(toolchain_dir, "*", "include", "c++", "*", "*-*-*"), join(toolchain_dir, "lib", "gcc", "*", "*", "include*") ] for g in toolchain_incglobs: includes.extend(glob(g)) unity_dir = get_core_package_dir("tool-unity") if unity_dir: includes.append(unity_dir) return includes
def MatchSourceFiles(env, src_dir, src_filter=None): SRC_FILTER_PATTERNS_RE = re.compile(r"(\+|\-)<([^>]+)>") def _append_build_item(items, item, src_dir): if env.IsFileWithExt(item, SRC_BUILD_EXT + SRC_HEADER_EXT): items.add(item.replace(src_dir + sep, "")) src_dir = env.subst(src_dir) src_filter = env.subst(src_filter) if src_filter else None src_filter = src_filter or SRC_FILTER_DEFAULT if isinstance(src_filter, (list, tuple)): src_filter = " ".join(src_filter) matches = set() # correct fs directory separator src_filter = src_filter.replace("/", sep).replace("\\", sep) for (action, pattern) in SRC_FILTER_PATTERNS_RE.findall(src_filter): items = set() for item in glob(join(glob_escape(src_dir), pattern)): if isdir(item): for root, _, files in walk(item, followlinks=True): for f in files: _append_build_item(items, join(root, f), src_dir) else: _append_build_item(items, item, src_dir) if action == "+": matches |= items else: matches -= items return sorted(list(matches))
def MatchSourceFiles(env, src_dir, src_filter=None): def _append_build_item(items, item, src_dir): if env.IsFileWithExt(item, SRC_BUILD_EXT + SRC_HEADER_EXT): items.add(item.replace(src_dir + sep, "")) src_dir = env.subst(src_dir) src_filter = env.subst(src_filter) if src_filter else None src_filter = src_filter or SRC_FILTER_DEFAULT if isinstance(src_filter, (list, tuple)): src_filter = " ".join(src_filter) matches = set() # correct fs directory separator src_filter = src_filter.replace("/", sep).replace("\\", sep) for (action, pattern) in SRC_FILTER_PATTERNS_RE.findall(src_filter): items = set() for item in glob(join(glob_escape(src_dir), pattern)): if isdir(item): for root, _, files in walk(item, followlinks=True): for f in files: _append_build_item(items, join(root, f), src_dir) else: _append_build_item(items, item, src_dir) if action == "+": matches |= items else: matches -= items return sorted(list(matches))
def ConvertInoToCpp(env): src_dir = util.glob_escape(env.subst("$PROJECTSRC_DIR")) ino_nodes = (env.Glob(join(src_dir, "*.ino")) + env.Glob(join(src_dir, "*.pde"))) if not ino_nodes: return c = InoToCPPConverter(env) out_file = c.convert(ino_nodes) atexit.register(_delete_file, out_file)
def _exclude_contents(dst_dir, patterns): contents = [] for p in patterns: contents += glob(join(util.glob_escape(dst_dir), p)) for path in contents: path = abspath(path) if isdir(path): util.rmtree_(path) elif isfile(path): remove(path)
def ConvertInoToCpp(env): src_dir = util.glob_escape(env.subst("$PROJECTSRC_DIR")) ino_nodes = ( env.Glob(join(src_dir, "*.ino")) + env.Glob(join(src_dir, "*.pde"))) if not ino_nodes: return c = InoToCPPConverter(env) out_file = c.convert(ino_nodes) atexit.register(_delete_file, out_file)
def get_manifest_path(self, pkg_dir): path = BasePkgManager.get_manifest_path(self, pkg_dir) if path: return path # if library without manifest, returns first source file src_dir = join(util.glob_escape(pkg_dir)) if isdir(join(pkg_dir, "src")): src_dir = join(src_dir, "src") chs_files = glob(join(src_dir, "*.[chS]")) if chs_files: return chs_files[0] cpp_files = glob(join(src_dir, "*.cpp")) if cpp_files: return cpp_files[0] return None
def _dump_includes(env): includes = [] for item in env.get("CPPPATH", []): includes.append(env.subst(item)) # installed libs for lb in env.GetLibBuilders(): includes.extend(lb.get_include_dirs()) # includes from toolchains p = env.PioPlatform() for name in p.get_installed_packages(): if p.get_package_type(name) != "toolchain": continue toolchain_dir = util.glob_escape(p.get_package_dir(name)) toolchain_incglobs = [ join(toolchain_dir, "*", "include*"), join(toolchain_dir, "*", "include", "c++", "*"), join(toolchain_dir, "*", "include", "c++", "*", "*-*-*"), join(toolchain_dir, "lib", "gcc", "*", "*", "include*") ] for g in toolchain_incglobs: includes.extend(glob(g)) unity_dir = get_core_package_dir("tool-unity") if unity_dir: includes.append(unity_dir) includes.extend( [env.subst("$PROJECTINCLUDE_DIR"), env.subst("$PROJECTSRC_DIR")]) # remove duplicates result = [] for item in includes: if item not in result: result.append(abspath(item)) return result