mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-04 09:01:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			61 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], close_fds=False
 | 
						|
)
 |