def match_src_files(src_dir, src_filter=None, src_exts=None, followlinks=True): def _append_build_item(items, item, src_dir): if not src_exts or path_endswith_ext(item, src_exts): items.add(os.path.relpath(item, src_dir)) src_filter = src_filter or "" if isinstance(src_filter, (list, tuple)): src_filter = " ".join(src_filter) matches = set() # correct fs directory separator src_filter = src_filter.replace("/", os.sep).replace("\\", os.sep) for (action, pattern) in re.findall(r"(\+|\-)<([^>]+)>", src_filter): items = set() for item in glob(os.path.join(glob_escape(src_dir), pattern)): if os.path.isdir(item): for root, _, files in os.walk(item, followlinks=followlinks): for f in files: _append_build_item(items, os.path.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 = glob_escape(env.subst("$PROJECT_SRC_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(glob_escape(dst_dir), p)) for path in contents: path = abspath(path) if isdir(path): fs.rmtree(path) elif isfile(path): remove(path)
def _exclude_contents(dst_dir, patterns): contents = [] for p in patterns: contents += compat.glob_recursive(join(compat.glob_escape(dst_dir), p)) for path in contents: path = realpath(path) if isdir(path): fs.rmtree(path) elif isfile(path): remove(path)
def _dump_includes(env): includes = {} includes["build"] = [ env.subst("$PROJECT_INCLUDE_DIR"), env.subst("$PROJECT_SRC_DIR"), ] includes["build"].extend( [os.path.realpath(env.subst(item)) for item in env.get("CPPPATH", [])]) # installed libs includes["compatlib"] = [] for lb in env.GetLibBuilders(): includes["compatlib"].extend( [os.path.realpath(inc) for inc in lb.get_include_dirs()]) # includes from toolchains p = env.PioPlatform() includes["toolchain"] = [] for pkg in p.get_installed_packages(): if p.get_package_type(pkg.metadata.name) != "toolchain": continue toolchain_dir = glob_escape(pkg.path) toolchain_incglobs = [ os.path.join(toolchain_dir, "*", "include", "c++", "*"), os.path.join(toolchain_dir, "*", "include", "c++", "*", "*-*-*"), os.path.join(toolchain_dir, "lib", "gcc", "*", "*", "include*"), os.path.join(toolchain_dir, "*", "include*"), ] for g in toolchain_incglobs: includes["toolchain"].extend( [os.path.realpath(inc) for inc in glob(g)]) # include Unity framework if there are tests in project includes["unity"] = [] auto_install_unity = False test_dir = env.GetProjectConfig().get_optional_dir("test") if os.path.isdir(test_dir) and os.listdir(test_dir) != ["README"]: auto_install_unity = True unity_dir = get_core_package_dir( "tool-unity", auto_install=auto_install_unity, ) if unity_dir: includes["unity"].append(unity_dir) return includes
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(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 = glob_escape(p.get_package_dir(name)) toolchain_incglobs = [ os.path.join(toolchain_dir, "*", "include*"), os.path.join(toolchain_dir, "*", "include", "c++", "*"), os.path.join(toolchain_dir, "*", "include", "c++", "*", "*-*-*"), os.path.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("$PROJECT_INCLUDE_DIR"), env.subst("$PROJECT_SRC_DIR")]) # remove duplicates result = [] for item in includes: item = os.path.realpath(item) if item not in result: result.append(item) return result
def _dump_includes(env): includes = {} includes["build"] = [ env.subst("$PROJECT_INCLUDE_DIR"), env.subst("$PROJECT_SRC_DIR"), ] includes["build"].extend( [os.path.realpath(env.subst(item)) for item in env.get("CPPPATH", [])]) # installed libs includes["compatlib"] = [] for lb in env.GetLibBuilders(): includes["compatlib"].extend( [os.path.realpath(inc) for inc in lb.get_include_dirs()]) # includes from toolchains p = env.PioPlatform() includes["toolchain"] = [] for name in p.get_installed_packages(): if p.get_package_type(name) != "toolchain": continue toolchain_dir = glob_escape(p.get_package_dir(name)) toolchain_incglobs = [ os.path.join(toolchain_dir, "*", "include", "c++", "*"), os.path.join(toolchain_dir, "*", "include", "c++", "*", "*-*-*"), os.path.join(toolchain_dir, "lib", "gcc", "*", "*", "include*"), os.path.join(toolchain_dir, "*", "include*"), ] for g in toolchain_incglobs: includes["toolchain"].extend( [os.path.realpath(inc) for inc in glob(g)]) includes["unity"] = [] unity_dir = get_core_package_dir("tool-unity") if unity_dir: includes["unity"].append(unity_dir) return includes