- from __future__ import print_function
-
- Import("env")
-
- import os
- import sys
-
-
- TRAVIS = os.environ.get("TRAVIS")
- PIO_PLATFORM = env.PioPlatform()
-
-
- class ExtraScriptError(Exception):
- pass
-
-
- # Most portable way, without depending on platformio internals
- def subprocess_libdeps(lib_deps, storage=None, silent=True):
- import subprocess
-
- args = [env.subst("$PYTHONEXE"), "-mplatformio", "lib"]
- if not storage:
- args.append("-g")
- else:
- args.extend(["-d", storage])
- args.append("install")
- if silent:
- args.append("-s")
-
- args.extend(lib_deps)
-
- subprocess.check_call(args)
-
-
- # Avoid spawning pio lib every time, hook into the LibraryManager API (sort-of internal)
- def library_manager_libdeps(lib_deps, storage=None):
- from platformio.managers.lib import LibraryManager
- from platformio.project.helpers import get_project_global_lib_dir
-
- if not storage:
- manager = LibraryManager(get_project_global_lib_dir())
- else:
- manager = LibraryManager(storage)
-
- for lib in lib_deps:
- if manager.get_package_dir(*manager.parse_pkg_uri(lib)):
- continue
- print("installing: {}".format(lib), file=sys.stderr)
- manager.install(lib)
-
-
- def get_shared_libdeps_dir(section, name):
- cfg = env.GetProjectConfig()
-
- if not cfg.has_option(section, name):
- raise ExtraScriptError("{}.{} is required to be set".format(section, name))
-
- opt = cfg.get(section, name)
-
- if not opt in env.GetProjectOption("lib_extra_dirs"):
- raise ExtraScriptError(
- "lib_extra_dirs must contain {}.{}".format(section, name)
- )
-
- return os.path.join(env["PROJECT_DIR"], opt)
-
-
- def ensure_platform_updated():
- try:
- if PIO_PLATFORM.are_outdated_packages():
- print("updating platform packages", file=sys.stderr)
- PIO_PLATFORM.update_packages()
- except Exception:
- print("Warning: no connection, cannot check for outdated packages", file=sys.stderr)
-
-
- # latest toolchain is still optional with PIO (TODO: recheck after 2.6.0!)
- ensure_platform_updated()
-
-
- # to speed-up build process, install libraries in either global or local shared storage
- if os.environ.get("ESPURNA_PIO_SHARED_LIBRARIES"):
- if TRAVIS:
- storage = None
- print("using global library storage", file=sys.stderr)
- else:
- storage = get_shared_libdeps_dir("common", "shared_libdeps_dir")
- print("using shared library storage: ", storage, file=sys.stderr)
-
- subprocess_libdeps(env.GetProjectOption("lib_deps"), storage)
|