def get_used_frameworks(env, path): if any( isfile(join(path, fname)) for fname in ("library.properties", "keywords.txt")): return ["arduino"] if isfile(join(path, "module.json")): return ["mbed"] include_re = re.compile(r'^#include\s+(<|")(Arduino|mbed)\.h(<|")', flags=re.MULTILINE) # check source files for root, _, files in os.walk(path, followlinks=True): if "mbed_lib.json" in files: return ["mbed"] for fname in files: if not fs.path_endswith_ext( fname, piotool.SRC_BUILD_EXT + piotool.SRC_HEADER_EXT): continue content = get_file_contents(join(root, fname)) if not content: continue if "Arduino.h" in content and include_re.search(content): return ["arduino"] if "mbed.h" in content and include_re.search(content): return ["mbed"] return []
def CollectBuildFiles(env, variant_dir, src_dir, src_filter=None, duplicate=False): sources = [] variants = [] src_dir = env.subst(src_dir) if src_dir.endswith(os.sep): src_dir = src_dir[:-1] for item in env.MatchSourceFiles(src_dir, src_filter): _reldir = dirname(item) _src_dir = join(src_dir, _reldir) if _reldir else src_dir _var_dir = join(variant_dir, _reldir) if _reldir else variant_dir if _var_dir not in variants: variants.append(_var_dir) env.VariantDir(_var_dir, _src_dir, duplicate) if fs.path_endswith_ext(item, SRC_BUILD_EXT): sources.append(env.File(join(_var_dir, basename(item)))) return sources
def CollectBuildFiles( env, variant_dir, src_dir, src_filter=None, duplicate=False ): # pylint: disable=too-many-locals sources = [] variants = [] src_dir = env.subst(src_dir) if src_dir.endswith(os.sep): src_dir = src_dir[:-1] for item in env.MatchSourceFiles(src_dir, src_filter): _reldir = os.path.dirname(item) _src_dir = os.path.join(src_dir, _reldir) if _reldir else src_dir _var_dir = os.path.join(variant_dir, _reldir) if _reldir else variant_dir if _var_dir not in variants: variants.append(_var_dir) env.VariantDir(_var_dir, _src_dir, duplicate) if fs.path_endswith_ext(item, SRC_BUILD_EXT): sources.append(env.File(os.path.join(_var_dir, os.path.basename(item)))) for callback, pattern in env.get("__PIO_BUILD_MIDDLEWARES", []): tmp = [] for node in sources: if pattern and not fnmatch.fnmatch(node.get_path(), pattern): tmp.append(node) continue n = callback(node) if n: tmp.append(n) sources = tmp return sources
def _get_found_includes( # pylint: disable=too-many-branches self, search_files=None): # all include directories if not LibBuilderBase._INCLUDE_DIRS_CACHE: LibBuilderBase._INCLUDE_DIRS_CACHE = [] for lb in self.env.GetLibBuilders(): LibBuilderBase._INCLUDE_DIRS_CACHE.extend( [self.env.Dir(d) for d in lb.get_include_dirs()]) # append self include directories include_dirs = [self.env.Dir(d) for d in self.get_include_dirs()] include_dirs.extend(LibBuilderBase._INCLUDE_DIRS_CACHE) result = [] for path in (search_files or []): if path in self._processed_files: continue self._processed_files.append(path) try: assert "+" in self.lib_ldf_mode candidates = LibBuilderBase.CCONDITIONAL_SCANNER( self.env.File(path), self.env, tuple(include_dirs), depth=self.CCONDITIONAL_SCANNER_DEPTH) # mark candidates already processed via Conditional Scanner self._processed_files.extend([ c.get_abspath() for c in candidates if c.get_abspath() not in self._processed_files ]) except Exception as e: # pylint: disable=broad-except if self.verbose and "+" in self.lib_ldf_mode: sys.stderr.write( "Warning! Classic Pre Processor is used for `%s`, " "advanced has failed with `%s`\n" % (path, e)) candidates = LibBuilderBase.CLASSIC_SCANNER( self.env.File(path), self.env, tuple(include_dirs)) # print(path, map(lambda n: n.get_abspath(), candidates)) for item in candidates: if item not in result: result.append(item) if not self.PARSE_SRC_BY_H_NAME: continue _h_path = item.get_abspath() if not fs.path_endswith_ext(_h_path, piotool.SRC_HEADER_EXT): continue _f_part = _h_path[:_h_path.rindex(".")] for ext in piotool.SRC_C_EXT: if not isfile("%s.%s" % (_f_part, ext)): continue _c_path = self.env.File("%s.%s" % (_f_part, ext)) if _c_path not in result: result.append(_c_path) return result