From c50332daa293920d975ddcafba7f3dda6e00dcfc Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Tue, 1 Sep 2015 16:15:04 +0300 Subject: [PATCH] Allow to run `platformio` directly from the bin folder --- platformio/builder/main.py | 16 ++++++++++++---- platformio/platforms/base.py | 19 +++++++++++++++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/platformio/builder/main.py b/platformio/builder/main.py index 629c1ef9..0dd206f3 100644 --- a/platformio/builder/main.py +++ b/platformio/builder/main.py @@ -5,11 +5,19 @@ try: from platformio import util except ImportError: import sys - for _path in sys.path: - if "platformio" in _path: - sys.path.insert(0, _path[:_path.rfind("platformio") - 1]) + for p in sys.path: + _new_path = None + if not p.endswith("site-packages") and "site-packages" in p: + _new_path = p[:p.rfind("site-packages") + 13] + elif "platformio" in p: + _new_path = p[:p.rfind("platformio") - 1] + if _new_path and _new_path not in sys.path: + sys.path.insert(0, _new_path) + try: + from platformio import util break - from platformio import util + except ImportError: + pass import json from os import environ diff --git a/platformio/platforms/base.py b/platformio/platforms/base.py index 2cc3e246..b019d5c9 100644 --- a/platformio/platforms/base.py +++ b/platformio/platforms/base.py @@ -1,9 +1,10 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. +import os import re +import sys from imp import load_source -from os import listdir from os.path import isdir, isfile, join import click @@ -152,7 +153,7 @@ class PlatformFactory(object): pdir = join(d, "platforms") if not isdir(pdir): continue - for p in sorted(listdir(pdir)): + for p in sorted(os.listdir(pdir)): if (p in ("__init__.py", "base.py") or not p.endswith(".py")): continue @@ -371,6 +372,20 @@ class BasePlatform(object): self._found_error = False try: + # test that SCons is installed correctly + try: + r = util.exec_command(["scons", "--version"]) + assert r['returncode'] == 0 + except (OSError, AssertionError): + for p in sys.path: + try: + r = util.exec_command([join(p, "scons"), "--version"]) + assert r['returncode'] == 0 + os.environ['PATH'] += os.pathsep + p + break + except (OSError, AssertionError): + pass + result = util.exec_command( [ "scons",