コード例 #1
0
def install_features_dependencies():
    load_config()
    for feature in FEATURE_DEPENDENCIES:
        if not env.MarlinFeatureIsEnabled(feature):
            continue

        if 'lib_deps' in FEATURE_DEPENDENCIES[feature]:
            print("Adding lib_deps for %s... " % feature)

            # deps to add
            deps_to_add = {}
            for dep in FEATURE_DEPENDENCIES[feature]['lib_deps']:
                name, _, _ = PackageManager.parse_pkg_uri(dep)
                deps_to_add[name] = dep

            # first check if the env already have the dep
            deps = env.GetProjectOption("lib_deps")
            for dep in deps:
                name, _, _ = PackageManager.parse_pkg_uri(dep)
                if name in deps_to_add:
                    del deps_to_add[name]

            # check if we need ignore any lib
            lib_ignore = env.GetProjectOption("lib_ignore")
            for dep in deps:
                name, _, _ = PackageManager.parse_pkg_uri(dep)
                if name in deps_to_add:
                    del deps_to_add[name]

            # any left?
            if len(deps_to_add) <= 0:
                continue

            # add only the missing deps
            proj = env.GetProjectConfig()
            proj.set("env:" + env["PIOENV"], "lib_deps",
                     deps + list(deps_to_add.values()))

        if 'extra_scripts' in FEATURE_DEPENDENCIES[feature]:
            print("Executing extra_scripts for %s... " % feature)
            env.SConscript(FEATURE_DEPENDENCIES[feature]['extra_scripts'],
                           exports="env")

        if 'src_filter' in FEATURE_DEPENDENCIES[feature]:
            print("Adding src_filter for %s... " % feature)
            proj = env.GetProjectConfig()
            src_filter = env.GetProjectOption("src_filter")

            # first we need to remove the references to the same folder
            my_srcs = re.findall(r'[+-](<.*?>)',
                                 FEATURE_DEPENDENCIES[feature]['src_filter'])
            cur_srcs = re.findall(r'[+-](<.*?>)', src_filter[0])
            for d in my_srcs:
                if d in cur_srcs:
                    src_filter[0] = re.sub(r'[+-]' + d, '', src_filter[0])

            src_filter[0] = FEATURE_DEPENDENCIES[feature][
                'src_filter'] + ' ' + src_filter[0]
            proj.set("env:" + env["PIOENV"], "src_filter", src_filter)
            env.Replace(SRC_FILTER=src_filter)
コード例 #2
0
def apply_features_config():
    load_config()
    for feature in FEATURE_CONFIG:
        if not env.MarlinFeatureIsEnabled(feature):
            continue

        feat = FEATURE_CONFIG[feature]

        if 'lib_deps' in feat and len(feat['lib_deps']):
            print("Adding lib_deps for %s... " % feature)

            # feat to add
            deps_to_add = {}
            for dep in feat['lib_deps']:
                name, _, _ = PackageManager.parse_pkg_uri(dep)
                deps_to_add[name] = dep

            # Does the env already have the dependency?
            deps = env.GetProjectOption('lib_deps')
            for dep in deps:
                name, _, _ = PackageManager.parse_pkg_uri(dep)
                if name in deps_to_add:
                    del deps_to_add[name]

            # Are there any libraries that should be ignored?
            lib_ignore = env.GetProjectOption('lib_ignore')
            for dep in deps:
                name, _, _ = PackageManager.parse_pkg_uri(dep)
                if name in deps_to_add:
                    del deps_to_add[name]

            # Is there anything left?
            if len(deps_to_add) > 0:
                # Only add the missing dependencies
                set_env_field('lib_deps', deps + list(deps_to_add.values()))

        if 'extra_scripts' in feat:
            print("Running extra_scripts for %s... " % feature)
            env.SConscript(feat['extra_scripts'], exports="env")

        if 'src_filter' in feat:
            print("Adding src_filter for %s... " % feature)
            src_filter = ' '.join(env.GetProjectOption('src_filter'))
            # first we need to remove the references to the same folder
            my_srcs = re.findall(r'[+-](<.*?>)', feat['src_filter'])
            cur_srcs = re.findall(r'[+-](<.*?>)', src_filter)
            for d in my_srcs:
                if d in cur_srcs:
                    src_filter = re.sub(r'[+-]' + d, '', src_filter)

            src_filter = feat['src_filter'] + ' ' + src_filter
            set_env_field('src_filter', [src_filter])
            env.Replace(SRC_FILTER=src_filter)

        if 'lib_ignore' in feat:
            print("Adding lib_ignore for %s... " % feature)
            lib_ignore = env.GetProjectOption('lib_ignore') + [
                feat['lib_ignore']
            ]
            set_env_field('lib_ignore', lib_ignore)
def get_all_env_libs():
    env_libs = []
    lib_deps = env.GetProjectOption("lib_deps")
    for dep in lib_deps:
        name, _, _ = PackageManager.parse_pkg_uri(dep)
        env_libs.append(name)
    return env_libs
def get_all_known_libs():
    known_libs = []
    for feature in FEATURE_DEPENDENCIES:
        if not 'lib_deps' in FEATURE_DEPENDENCIES[feature]:
            continue
        for dep in FEATURE_DEPENDENCIES[feature]['lib_deps']:
            name, _, _ = PackageManager.parse_pkg_uri(dep)
            known_libs.append(name)
    return known_libs
コード例 #5
0
def get_all_known_libs():
    known_libs = []
    for feature in FEATURE_CONFIG:
        feat = FEATURE_CONFIG[feature]
        if not 'lib_deps' in feat:
            continue
        for dep in feat['lib_deps']:
            name, _, _ = PackageManager.parse_pkg_uri(dep)
            known_libs.append(name)
    return known_libs
コード例 #6
0
def parse_pkg_uri(spec):
    if PackageManager.__name__ == 'PackageSpec':
        return PackageManager(spec).name
    else:
        name, _, _ = PackageManager.parse_pkg_uri(spec)
        return name
コード例 #7
0
def test_pkg_input_parser():
    items = [
        ["PkgName", ("PkgName", None, None)],
        [("PkgName", "!=1.2.3,<2.0"), ("PkgName", "!=1.2.3,<2.0", None)],
        ["[email protected]", ("PkgName", "1.2.3", None)],
        [("[email protected]", "1.2.5"), ("[email protected]", "1.2.5", None)],
        ["id=13", ("id=13", None, None)],
        ["id=13@~1.2.3", ("id=13", "~1.2.3", None)],
        [
            util.get_home_dir(),
            (".platformio", None, "file://" + util.get_home_dir())
        ],
        [
            "LocalName=" + util.get_home_dir(),
            ("LocalName", None, "file://" + util.get_home_dir())
        ],
        [
            "LocalName=%s@>2.3.0" % util.get_home_dir(),
            ("LocalName", ">2.3.0", "file://" + util.get_home_dir())
        ],
        [
            "https://github.com/user/package.git",
            ("package", None, "git+https://github.com/user/package.git")
        ],
        [
            "MyPackage=https://gitlab.com/user/package.git",
            ("MyPackage", None, "git+https://gitlab.com/user/package.git")
        ],
        [
            "MyPackage=https://gitlab.com/user/[email protected],!=2",
            ("MyPackage", "3.2.1,!=2",
             "git+https://gitlab.com/user/package.git")
        ],
        [
            "https://somedomain.com/path/LibraryName-1.2.3.zip",
            ("LibraryName-1.2.3", None,
             "https://somedomain.com/path/LibraryName-1.2.3.zip")
        ],
        [
            "https://github.com/user/package/archive/branch.zip",
            ("branch", None,
             "https://github.com/user/package/archive/branch.zip")
        ],
        [
            "https://github.com/user/package/archive/branch.zip@~1.2.3",
            ("branch", "~1.2.3",
             "https://github.com/user/package/archive/branch.zip")
        ],
        [
            "https://github.com/user/package/archive/branch.tar.gz",
            ("branch.tar", None,
             "https://github.com/user/package/archive/branch.tar.gz")
        ],
        [
            "https://github.com/user/package/archive/branch.tar.gz@!=5",
            ("branch.tar", "!=5",
             "https://github.com/user/package/archive/branch.tar.gz")
        ],
        [
            "https://developer.mbed.org/users/user/code/package/",
            ("package", None,
             "hg+https://developer.mbed.org/users/user/code/package/")
        ],
        [
            "https://os.mbed.com/users/user/code/package/",
            ("package", None,
             "hg+https://os.mbed.com/users/user/code/package/")
        ],
        [
            "https://github.com/user/package#v1.2.3",
            ("package", None, "git+https://github.com/user/package#v1.2.3")
        ],
        [
            "https://github.com/user/package.git#branch",
            ("package", None, "git+https://github.com/user/package.git#branch")
        ],
        [
            "PkgName=https://github.com/user/package.git#a13d344fg56",
            ("PkgName", None,
             "git+https://github.com/user/package.git#a13d344fg56")
        ],
        [
            "user/package",
            ("package", None, "git+https://github.com/user/package")
        ],
        [
            "PkgName=user/package",
            ("PkgName", None, "git+https://github.com/user/package")
        ],
        [
            "PkgName=user/package#master",
            ("PkgName", None, "git+https://github.com/user/package#master")
        ],
        [
            "git+https://github.com/user/package",
            ("package", None, "git+https://github.com/user/package")
        ],
        [
            "hg+https://example.com/user/package",
            ("package", None, "hg+https://example.com/user/package")
        ],
        [
            "[email protected]:user/package.git",
            ("package", None, "[email protected]:user/package.git")
        ],
        [
            "[email protected]:user/package.git#v1.2.0",
            ("package", None, "[email protected]:user/package.git#v1.2.0")
        ],
        [
            "[email protected]:user/package.git#v1.2.0@~1.2.0",
            ("LocalName", "~1.2.0", "[email protected]:user/package.git#v1.2.0")
        ],
        [
            "git+ssh://[email protected]/user/package#1.2.0",
            ("package", None,
             "git+ssh://[email protected]/user/package#1.2.0")
        ],
        [
            "git+ssh://[email protected]:1234/package#1.2.0",
            ("package", None,
             "git+ssh://[email protected]:1234/package#1.2.0")
        ],
        [
            "LocalName=git+ssh://[email protected]:1234"
            "/package#1.2.0@!=13",
            ("LocalName", "!=13",
             "git+ssh://[email protected]:1234/package#1.2.0")
        ]
    ]
    for params, result in items:
        if isinstance(params, tuple):
            assert PackageManager.parse_pkg_uri(*params) == result
        else:
            assert PackageManager.parse_pkg_uri(params) == result
コード例 #8
0
def test_pkg_input_parser():
    items = [
        ["PkgName", ("PkgName", None, None)],
        [("PkgName", "!=1.2.3,<2.0"), ("PkgName", "!=1.2.3,<2.0", None)],
        ["[email protected]", ("PkgName", "1.2.3", None)],
        [("[email protected]", "1.2.5"), ("[email protected]", "1.2.5", None)],
        ["id=13", ("id=13", None, None)],
        ["id=13@~1.2.3", ("id=13", "~1.2.3", None)],
        [
            get_project_core_dir(),
            (".platformio", None, "file://" + get_project_core_dir()),
        ],
        [
            "LocalName=" + get_project_core_dir(),
            ("LocalName", None, "file://" + get_project_core_dir()),
        ],
        [
            "LocalName=%s@>2.3.0" % get_project_core_dir(),
            ("LocalName", ">2.3.0", "file://" + get_project_core_dir()),
        ],
        [
            "https://github.com/user/package.git",
            ("package", None, "git+https://github.com/user/package.git"),
        ],
        [
            "MyPackage=https://gitlab.com/user/package.git",
            ("MyPackage", None, "git+https://gitlab.com/user/package.git"),
        ],
        [
            "MyPackage=https://gitlab.com/user/[email protected],!=2",
            ("MyPackage", "3.2.1,!=2",
             "git+https://gitlab.com/user/package.git"),
        ],
        [
            "https://somedomain.com/path/LibraryName-1.2.3.zip",
            (
                "LibraryName-1.2.3",
                None,
                "https://somedomain.com/path/LibraryName-1.2.3.zip",
            ),
        ],
        [
            "https://github.com/user/package/archive/branch.zip",
            ("branch", None,
             "https://github.com/user/package/archive/branch.zip"),
        ],
        [
            "https://github.com/user/package/archive/branch.zip@~1.2.3",
            ("branch", "~1.2.3",
             "https://github.com/user/package/archive/branch.zip"),
        ],
        [
            "https://github.com/user/package/archive/branch.tar.gz",
            (
                "branch.tar",
                None,
                "https://github.com/user/package/archive/branch.tar.gz",
            ),
        ],
        [
            "https://github.com/user/package/archive/branch.tar.gz@!=5",
            (
                "branch.tar",
                "!=5",
                "https://github.com/user/package/archive/branch.tar.gz",
            ),
        ],
        [
            "https://developer.mbed.org/users/user/code/package/",
            ("package", None,
             "hg+https://developer.mbed.org/users/user/code/package/"),
        ],
        [
            "https://os.mbed.com/users/user/code/package/",
            ("package", None,
             "hg+https://os.mbed.com/users/user/code/package/"),
        ],
        [
            "https://github.com/user/package#v1.2.3",
            ("package", None, "git+https://github.com/user/package#v1.2.3"),
        ],
        [
            "https://github.com/user/package.git#branch",
            ("package", None,
             "git+https://github.com/user/package.git#branch"),
        ],
        [
            "PkgName=https://github.com/user/package.git#a13d344fg56",
            ("PkgName", None,
             "git+https://github.com/user/package.git#a13d344fg56"),
        ],
        [
            "user/package",
            ("package", None, "git+https://github.com/user/package")
        ],
        [
            "PkgName=user/package",
            ("PkgName", None, "git+https://github.com/user/package"),
        ],
        [
            "PkgName=user/package#master",
            ("PkgName", None, "git+https://github.com/user/package#master"),
        ],
        [
            "git+https://github.com/user/package",
            ("package", None, "git+https://github.com/user/package"),
        ],
        [
            "hg+https://example.com/user/package",
            ("package", None, "hg+https://example.com/user/package"),
        ],
        [
            "[email protected]:user/package.git",
            ("package", None, "[email protected]:user/package.git"),
        ],
        [
            "[email protected]:user/package.git#v1.2.0",
            ("package", None, "[email protected]:user/package.git#v1.2.0"),
        ],
        [
            "[email protected]:user/package.git#v1.2.0@~1.2.0",
            ("LocalName", "~1.2.0",
             "[email protected]:user/package.git#v1.2.0"),
        ],
        [
            "git+ssh://[email protected]/user/package#1.2.0",
            (
                "package",
                None,
                "git+ssh://[email protected]/user/package#1.2.0",
            ),
        ],
        [
            "git+ssh://[email protected]:1234/package#1.2.0",
            (
                "package",
                None,
                "git+ssh://[email protected]:1234/package#1.2.0",
            ),
        ],
        [
            "LocalName=git+ssh://[email protected]:1234"
            "/package#1.2.0@!=13",
            (
                "LocalName",
                "!=13",
                "git+ssh://[email protected]:1234/package#1.2.0",
            ),
        ],
    ]
    for params, result in items:
        if isinstance(params, tuple):
            assert PackageManager.parse_pkg_uri(*params) == result
        else:
            assert PackageManager.parse_pkg_uri(params) == result
コード例 #9
0
env = DefaultEnvironment()
platform = env.PioPlatform()
board = env.BoardConfig()
variant = board.get("build.variant")

platform_packages = env.GetProjectOption('platform_packages')
# if there's no framework defined, take it from the class name of platform
framewords = {
    "Ststm32Platform": "framework-arduinoststm32",
    "AtmelavrPlatform": "framework-arduino-avr"
}
if len(platform_packages) == 0:
    platform_name = framewords[platform.__class__.__name__]
else:
    platform_name, _, _ = PackageManager.parse_pkg_uri(platform_packages[0])

FRAMEWORK_DIR = platform.get_package_dir(platform_name)
assert os.path.isdir(FRAMEWORK_DIR)
assert os.path.isdir("buildroot/share/PlatformIO/variants")

variant_dir = os.path.join(FRAMEWORK_DIR, "variants", variant)

source_dir = os.path.join("buildroot/share/PlatformIO/variants", variant)
assert os.path.isdir(source_dir)

if os.path.isdir(variant_dir):
    shutil.rmtree(variant_dir)

if not os.path.isdir(variant_dir):
    os.mkdir(variant_dir)