forked from platformio/platformio-core
Move "match_src_files" to FS module
This commit is contained in:
2
docs
2
docs
Submodule docs updated: 005c8e7441...482ed6c6e6
@ -78,7 +78,7 @@ class LibBuilderFactory(object):
|
|||||||
if "mbed_lib.json" in files:
|
if "mbed_lib.json" in files:
|
||||||
return ["mbed"]
|
return ["mbed"]
|
||||||
for fname in files:
|
for fname in files:
|
||||||
if not env.IsFileWithExt(
|
if not fs.path_endswith_ext(
|
||||||
fname, piotool.SRC_BUILD_EXT + piotool.SRC_HEADER_EXT):
|
fname, piotool.SRC_BUILD_EXT + piotool.SRC_HEADER_EXT):
|
||||||
continue
|
continue
|
||||||
content = get_file_contents(join(root, fname))
|
content = get_file_contents(join(root, fname))
|
||||||
@ -351,7 +351,7 @@ class LibBuilderBase(object):
|
|||||||
if not self.PARSE_SRC_BY_H_NAME:
|
if not self.PARSE_SRC_BY_H_NAME:
|
||||||
continue
|
continue
|
||||||
_h_path = item.get_abspath()
|
_h_path = item.get_abspath()
|
||||||
if not self.env.IsFileWithExt(_h_path, piotool.SRC_HEADER_EXT):
|
if not fs.path_endswith_ext(_h_path, piotool.SRC_HEADER_EXT):
|
||||||
continue
|
continue
|
||||||
_f_part = _h_path[:_h_path.rindex(".")]
|
_f_part = _h_path[:_h_path.rindex(".")]
|
||||||
for ext in piotool.SRC_C_EXT:
|
for ext in piotool.SRC_C_EXT:
|
||||||
|
@ -14,10 +14,8 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import re
|
import os
|
||||||
import sys
|
import sys
|
||||||
from glob import glob
|
|
||||||
from os import sep, walk
|
|
||||||
from os.path import basename, dirname, isdir, join, realpath
|
from os.path import basename, dirname, isdir, join, realpath
|
||||||
|
|
||||||
from SCons import Builder, Util # pylint: disable=import-error
|
from SCons import Builder, Util # pylint: disable=import-error
|
||||||
@ -27,14 +25,14 @@ from SCons.Script import DefaultEnvironment # pylint: disable=import-error
|
|||||||
from SCons.Script import Export # pylint: disable=import-error
|
from SCons.Script import Export # pylint: disable=import-error
|
||||||
from SCons.Script import SConscript # pylint: disable=import-error
|
from SCons.Script import SConscript # pylint: disable=import-error
|
||||||
|
|
||||||
from platformio.compat import glob_escape, string_types
|
from platformio import fs
|
||||||
|
from platformio.compat import string_types
|
||||||
from platformio.util import pioversion_to_intstr
|
from platformio.util import pioversion_to_intstr
|
||||||
|
|
||||||
SRC_HEADER_EXT = ["h", "hpp"]
|
SRC_HEADER_EXT = ["h", "hpp"]
|
||||||
SRC_C_EXT = ["c", "cc", "cpp"]
|
SRC_C_EXT = ["c", "cc", "cpp"]
|
||||||
SRC_BUILD_EXT = SRC_C_EXT + ["S", "spp", "SPP", "sx", "s", "asm", "ASM"]
|
SRC_BUILD_EXT = SRC_C_EXT + ["S", "spp", "SPP", "sx", "s", "asm", "ASM"]
|
||||||
SRC_FILTER_DEFAULT = ["+<*>", "-<.git%s>" % sep, "-<svn%s>" % sep]
|
SRC_FILTER_DEFAULT = ["+<*>", "-<.git%s>" % os.sep, "-<.svn%s>" % os.sep]
|
||||||
SRC_FILTER_PATTERNS_RE = re.compile(r"(\+|\-)<([^>]+)>")
|
|
||||||
|
|
||||||
|
|
||||||
def scons_patched_match_splitext(path, suffixes=None):
|
def scons_patched_match_splitext(path, suffixes=None):
|
||||||
@ -230,44 +228,11 @@ def ProcessUnFlags(env, flags):
|
|||||||
env[key].remove(current)
|
env[key].remove(current)
|
||||||
|
|
||||||
|
|
||||||
def IsFileWithExt(env, file_, ext): # pylint: disable=W0613
|
|
||||||
if basename(file_).startswith("."):
|
|
||||||
return False
|
|
||||||
for e in ext:
|
|
||||||
if file_.endswith(".%s" % e):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def MatchSourceFiles(env, src_dir, src_filter=None):
|
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 = env.subst(src_filter) if src_filter else None
|
||||||
src_filter = src_filter or SRC_FILTER_DEFAULT
|
src_filter = src_filter or SRC_FILTER_DEFAULT
|
||||||
if isinstance(src_filter, (list, tuple)):
|
return fs.match_src_files(env.subst(src_dir), src_filter,
|
||||||
src_filter = " ".join(src_filter)
|
SRC_BUILD_EXT + SRC_HEADER_EXT)
|
||||||
|
|
||||||
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 CollectBuildFiles(env,
|
def CollectBuildFiles(env,
|
||||||
@ -279,7 +244,7 @@ def CollectBuildFiles(env,
|
|||||||
variants = []
|
variants = []
|
||||||
|
|
||||||
src_dir = env.subst(src_dir)
|
src_dir = env.subst(src_dir)
|
||||||
if src_dir.endswith(sep):
|
if src_dir.endswith(os.sep):
|
||||||
src_dir = src_dir[:-1]
|
src_dir = src_dir[:-1]
|
||||||
|
|
||||||
for item in env.MatchSourceFiles(src_dir, src_filter):
|
for item in env.MatchSourceFiles(src_dir, src_filter):
|
||||||
@ -291,7 +256,7 @@ def CollectBuildFiles(env,
|
|||||||
variants.append(_var_dir)
|
variants.append(_var_dir)
|
||||||
env.VariantDir(_var_dir, _src_dir, duplicate)
|
env.VariantDir(_var_dir, _src_dir, duplicate)
|
||||||
|
|
||||||
if env.IsFileWithExt(item, SRC_BUILD_EXT):
|
if fs.path_endswith_ext(item, SRC_BUILD_EXT):
|
||||||
sources.append(env.File(join(_var_dir, basename(item))))
|
sources.append(env.File(join(_var_dir, basename(item))))
|
||||||
|
|
||||||
return sources
|
return sources
|
||||||
@ -352,7 +317,6 @@ def generate(env):
|
|||||||
env.AddMethod(ParseFlagsExtended)
|
env.AddMethod(ParseFlagsExtended)
|
||||||
env.AddMethod(ProcessFlags)
|
env.AddMethod(ProcessFlags)
|
||||||
env.AddMethod(ProcessUnFlags)
|
env.AddMethod(ProcessUnFlags)
|
||||||
env.AddMethod(IsFileWithExt)
|
|
||||||
env.AddMethod(MatchSourceFiles)
|
env.AddMethod(MatchSourceFiles)
|
||||||
env.AddMethod(CollectBuildFiles)
|
env.AddMethod(CollectBuildFiles)
|
||||||
env.AddMethod(BuildFrameworks)
|
env.AddMethod(BuildFrameworks)
|
||||||
|
@ -14,14 +14,16 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import stat
|
import stat
|
||||||
import sys
|
import sys
|
||||||
|
from glob import glob
|
||||||
|
|
||||||
import click
|
import click
|
||||||
|
|
||||||
from platformio import exception
|
from platformio import exception
|
||||||
from platformio.compat import get_file_contents
|
from platformio.compat import get_file_contents, glob_escape
|
||||||
|
|
||||||
|
|
||||||
class cd(object):
|
class cd(object):
|
||||||
@ -105,6 +107,45 @@ def ensure_udev_rules():
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def path_endswith_ext(path, extensions):
|
||||||
|
if not isinstance(extensions, list):
|
||||||
|
extensions = [extensions]
|
||||||
|
for ext in extensions:
|
||||||
|
if path.endswith("." + ext):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def match_src_files(src_dir, src_filter=None, src_exts=None):
|
||||||
|
|
||||||
|
def _append_build_item(items, item, src_dir):
|
||||||
|
if not src_exts or path_endswith_ext(item, src_exts):
|
||||||
|
items.add(item.replace(src_dir + os.sep, ""))
|
||||||
|
|
||||||
|
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=True):
|
||||||
|
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 rmtree(path):
|
def rmtree(path):
|
||||||
|
|
||||||
def _onerror(_, name, __):
|
def _onerror(_, name, __):
|
||||||
|
Reference in New Issue
Block a user