diff --git a/HISTORY.rst b/HISTORY.rst index 644d7066..63c5ab84 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -21,6 +21,8 @@ PlatformIO 3.0 systems (Windows) * Fixed issue with ``build_unflags`` option when a macro contains value (e.g., ``-DNAME=VALUE``) +* Fixed issue which did not allow to override runtime build environment using + extra POST script 3.5.2 (2018-03-13) ~~~~~~~~~~~~~~~~~~ diff --git a/platformio/builder/main.py b/platformio/builder/main.py index 04a19eba..8da01270 100644 --- a/platformio/builder/main.py +++ b/platformio/builder/main.py @@ -156,7 +156,7 @@ env.LoadPioPlatform(commonvars) env.SConscriptChdir(0) env.SConsignFile(join("$PROJECTBUILD_DIR", ".sconsign.dblite")) -for item in env.GetPreExtraScripts(): +for item in env.GetExtraScripts("pre"): env.SConscript(item, exports="env") env.SConscript("$BUILD_SCRIPT") @@ -167,7 +167,7 @@ AlwaysBuild(env.Alias("__test", DEFAULT_TARGETS + ["size"])) if "UPLOAD_FLAGS" in env: env.Append(UPLOADERFLAGS=["$UPLOAD_FLAGS"]) -for item in env.GetPostExtraScripts(): +for item in env.GetExtraScripts("post"): env.SConscript(item, exports="env") if "envdump" in COMMAND_LINE_TARGETS: diff --git a/platformio/builder/tools/piomisc.py b/platformio/builder/tools/piomisc.py index 7c08237f..69e859f3 100644 --- a/platformio/builder/tools/piomisc.py +++ b/platformio/builder/tools/piomisc.py @@ -18,7 +18,7 @@ import atexit import re import sys from os import environ, remove, walk -from os.path import basename, isdir, isfile, join, relpath, sep +from os.path import basename, isdir, isfile, join, realpath, relpath, sep from tempfile import mkstemp from SCons.Action import Action @@ -302,18 +302,17 @@ def ProcessTest(env): duplicate=False) -def GetPreExtraScripts(env): - return [ - item[4:] for item in env.get("EXTRA_SCRIPTS", []) - if item.startswith("pre:") - ] - - -def GetPostExtraScripts(env): - return [ - item[5:] if item.startswith("post:") else item - for item in env.get("EXTRA_SCRIPTS", []) if not item.startswith("pre:") - ] +def GetExtraScripts(env, scope): + items = [] + for item in env.get("EXTRA_SCRIPTS", []): + if scope == "post" and ":" not in item: + items.append(item) + elif item.startswith("%s:" % scope): + items.append(item[len(scope) + 1:]) + if not items: + return items + with util.cd(env.subst("$PROJECT_DIR")): + return [realpath(item) for item in items] def exists(_): @@ -328,6 +327,5 @@ def generate(env): env.AddMethod(PioClean) env.AddMethod(ProcessDebug) env.AddMethod(ProcessTest) - env.AddMethod(GetPreExtraScripts) - env.AddMethod(GetPostExtraScripts) + env.AddMethod(GetExtraScripts) return env diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index 00649dd9..80a6cbb9 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -289,15 +289,14 @@ def BuildFrameworks(env, frameworks): def BuildLibrary(env, variant_dir, src_dir, src_filter=None): - lib = env.Clone() - return lib.StaticLibrary( - lib.subst(variant_dir), - lib.CollectBuildFiles(variant_dir, src_dir, src_filter)) + return env.StaticLibrary( + env.subst(variant_dir), + env.CollectBuildFiles(variant_dir, src_dir, src_filter)) def BuildSources(env, variant_dir, src_dir, src_filter=None): - DefaultEnvironment().Append(PIOBUILDFILES=env.Clone().CollectBuildFiles( - variant_dir, src_dir, src_filter)) + DefaultEnvironment().Append( + PIOBUILDFILES=env.CollectBuildFiles(variant_dir, src_dir, src_filter)) def exists(_): diff --git a/tests/test_builder.py b/tests/test_builder.py index a307faa9..6dd90eb7 100644 --- a/tests/test_builder.py +++ b/tests/test_builder.py @@ -24,9 +24,15 @@ def test_build_flags(clirunner, validate_cliresult, tmpdir): tmpdir.join("platformio.ini").write(""" [env:native] platform = native +extra_scripts = extra.py build_flags = %s """ % " ".join([f[0] for f in build_flags])) + tmpdir.join("extra.py").write(""" +Import("env") +env.Append(CPPDEFINES="POST_SCRIPT_MACRO") + """) + tmpdir.mkdir("src").join("main.cpp").write(""" #if !defined(TEST_INT) || TEST_INT != 13 #error "TEST_INT" @@ -36,6 +42,10 @@ build_flags = %s #error "TEST_STR_SPACE" #endif +#ifndef POST_SCRIPT_MACRO +#error "POST_SCRIPT_MACRO" +#endif + int main() { } """)