Files
esphome/esphome/espidf/get_idf_tool_paths.py
T

53 lines
1.5 KiB
Python

"""Print JSON ``{paths_to_export, export_vars}`` for ESP-IDF tools.
Run via ``python <this file> <idf_framework_root>``. PYTHONPATH must include
``<idf_framework_root>/tools`` so ``idf_tools`` is importable. Exits with
status 1 and prints ``Missing ESP-IDF tools: ...`` on stderr if any tool is
not installed.
"""
# pylint: disable=import-error # idf_tools is on PYTHONPATH at runtime only
import json
import os
from pathlib import Path
import sys
from types import SimpleNamespace
from idf_tools import (
TOOLS_FILE,
IDFEnv,
IDFTool,
filter_tools_info,
g,
load_tools_info,
process_tool,
)
g.idf_path = sys.argv[1]
g.idf_tools_path = os.environ.get("IDF_TOOLS_PATH")
g.tools_json = str(Path(g.idf_path) / TOOLS_FILE)
tools_info = filter_tools_info(IDFEnv.get_idf_env(), load_tools_info())
args = SimpleNamespace(prefer_system=False)
paths_to_export: list[str] = []
export_vars: dict[str, str] = {}
missing_tools: list[str] = []
for name, tool in tools_info.items():
if tool.get_install_type() == IDFTool.INSTALL_NEVER:
continue
tool_paths, tool_vars, found = process_tool(
tool, name, args, "install_cmd", "prefer_system_hint"
)
if not found:
missing_tools.append(name)
paths_to_export += tool_paths
export_vars |= tool_vars
if missing_tools:
print("Missing ESP-IDF tools: " + ", ".join(missing_tools), file=sys.stderr)
raise SystemExit(1)
print(json.dumps({"paths_to_export": paths_to_export, "export_vars": export_vars}))