diff --git a/firmware-patch.diff b/firmware-patch.diff index 3cf87d1..323df6a 100644 --- a/firmware-patch.diff +++ b/firmware-patch.diff @@ -17,10 +17,10 @@ index cc742c6c1..545b0923a 100644 \ No newline at end of file diff --git a/bin/mpm_pio.py b/bin/mpm_pio.py new file mode 100644 -index 000000000..b9a359576 +index 000000000..044c87186 --- /dev/null +++ b/bin/mpm_pio.py -@@ -0,0 +1,105 @@ +@@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +""" +Mesh Plugin Manager (MPM) - PlatformIO build integration shim. @@ -41,9 +41,11 @@ index 000000000..b9a359576 +def find_site_packages(venv_dir): + """Find site-packages directory in a venv (handles different Python versions).""" + if not os.path.isdir(venv_dir): ++ print(f"MPM: {venv_dir} does not exist or is not a directory") + return None + lib_dir = os.path.join(venv_dir, "lib") + if not os.path.isdir(lib_dir): ++ print(f"MPM: {lib_dir} does not exist or is not a directory") + return None + pattern = os.path.join(lib_dir, "python*/site-packages") + matches = glob.glob(pattern) @@ -52,7 +54,8 @@ index 000000000..b9a359576 + +def add_to_path(directory, env_var="PATH", label=""): + """Add directory to environment variable if it exists and isn't already present.""" -+ if directory is None or not os.path.isdir(directory): ++ if not directory or not os.path.isdir(directory): ++ print(f"MPM: {directory} does not exist or is not a directory") + return False + current = os.environ.get(env_var, "") + if directory not in current: @@ -64,7 +67,8 @@ index 000000000..b9a359576 + +def add_to_sys_path(directory, label=""): + """Add directory to sys.path if it exists and isn't already present.""" -+ if directory is None or not os.path.isdir(directory): ++ if not directory or not os.path.isdir(directory): ++ print(f"MPM: {directory} does not exist or is not a directory") + return False + if directory not in sys.path: + sys.path.insert(0, directory) @@ -85,16 +89,20 @@ index 000000000..b9a359576 +mpm_source_dir = os.path.join(mpm_dir, "src") +mpm_venv_dir = os.path.join(mpm_dir, ".venv") +firmware_venv_dir = os.path.join(project_dir, ".venv") ++mpm_site_packages = find_site_packages(mpm_venv_dir) ++firmware_site_packages = find_site_packages(firmware_venv_dir) ++mpm_venv_bin = os.path.join(mpm_venv_dir, "bin") ++firmware_venv_bin = os.path.join(firmware_venv_dir, "bin") + +print(f"MPM Directories:") +print(f" mpm_dir: {mpm_dir}") +print(f" mpm_source_dir: {mpm_source_dir}") +print(f" mpm_venv_dir: {mpm_venv_dir}") +print(f" firmware_venv_dir: {firmware_venv_dir}") -+ -+ -+mpm_site_packages = find_site_packages(mpm_venv_dir) -+firmware_site_packages = find_site_packages(firmware_venv_dir) ++print(f" mpm_site_packages: {mpm_site_packages}") ++print(f" firmware_site_packages: {firmware_site_packages}") ++print(f" mpm_venv_bin: {mpm_venv_bin}") ++print(f" firmware_venv_bin: {firmware_venv_bin}") + +# These are in reverse order because they are prepended to sys.path +add_to_sys_path(firmware_site_packages, "firmware .venv") # Look for this last @@ -102,16 +110,11 @@ index 000000000..b9a359576 +add_to_sys_path(mpm_source_dir, "mpm source") # Look for this first + +# Add .venv/bin to PATH (prioritize mpm's .venv) -+mpm_venv_bin = os.path.join(mpm_venv_dir, "bin") -+firmware_venv_bin = os.path.join(firmware_venv_dir, "bin") +add_to_path(firmware_venv_bin, "PATH") +add_to_path(mpm_venv_bin, "PATH") + +for site_packages in [mpm_site_packages, firmware_site_packages]: + add_to_path(site_packages, "PYTHONPATH") -+ if site_packages: -+ nanopb_generator = os.path.join(site_packages, "nanopb", "generator") -+ add_to_path(nanopb_generator, "PATH", "nanopb/generator") + +# Use the installed `mpm` package +from mesh_plugin_manager.build import init_plugins # type: ignore[import]