Esempio n. 1
0
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))
Esempio n. 2
0
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))
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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
Esempio n. 7
0
    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
Esempio n. 8
0
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
Esempio n. 9
0
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