59 lines
2.0 KiB
Python
Executable File
59 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# This script is used to preinstall
|
|
# all platformio libraries in the global storage
|
|
|
|
import argparse
|
|
import configparser
|
|
import subprocess
|
|
|
|
config = configparser.ConfigParser(inline_comment_prefixes=(";",))
|
|
|
|
parser = argparse.ArgumentParser(description="")
|
|
parser.add_argument("file", help="Path to platformio.ini", nargs=1)
|
|
parser.add_argument("-l", "--libraries", help="Install libraries", action="store_true")
|
|
parser.add_argument("-p", "--platforms", help="Install platforms", action="store_true")
|
|
parser.add_argument("-t", "--tools", help="Install tools", action="store_true")
|
|
|
|
args = parser.parse_args()
|
|
|
|
config.read(args.file)
|
|
|
|
|
|
libs = []
|
|
tools = []
|
|
platforms = []
|
|
# Extract from every lib_deps key in all sections
|
|
for section in config.sections():
|
|
conf = config[section]
|
|
if "lib_deps" in conf and args.libraries:
|
|
for lib_dep in conf["lib_deps"].splitlines():
|
|
if not lib_dep:
|
|
# Empty line or comment
|
|
continue
|
|
if lib_dep.startswith("${"):
|
|
# Extending from another section
|
|
continue
|
|
if "@" not in lib_dep:
|
|
# No version pinned, this is an internal lib
|
|
continue
|
|
libs.append("-l")
|
|
libs.append(lib_dep)
|
|
if "platform" in conf and args.platforms:
|
|
platforms.append("-p")
|
|
platforms.append(conf["platform"])
|
|
if "platform_packages" in conf and args.tools:
|
|
for tool in conf["platform_packages"].splitlines():
|
|
if not tool:
|
|
# Empty line or comment
|
|
continue
|
|
if tool.startswith("${"):
|
|
# Extending from another section
|
|
continue
|
|
if tool.find("https://github.com") != -1:
|
|
split = tool.find("@")
|
|
tool = tool[split + 1 :]
|
|
tools.append("-t")
|
|
tools.append(tool)
|
|
|
|
subprocess.check_call(["platformio", "pkg", "install", "-g", *libs, *platforms, *tools])
|