forked from platformio/platformio-core
Significantly improved support for Pre & Post Actions
This commit is contained in:
@@ -13,7 +13,7 @@ PlatformIO Core 6
|
|||||||
|
|
||||||
**A professional collaborative platform for declarative, safety-critical, and test-driven embedded development.**
|
**A professional collaborative platform for declarative, safety-critical, and test-driven embedded development.**
|
||||||
|
|
||||||
6.0.3 (2022-??-??)
|
6.1.0 (2022-??-??)
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
* **Device Manager**
|
* **Device Manager**
|
||||||
@@ -36,9 +36,14 @@ PlatformIO Core 6
|
|||||||
|
|
||||||
* **Build System**
|
* **Build System**
|
||||||
|
|
||||||
|
- Significantly improved support for `Pre & Post Actions <https://docs.platformio.org/en/latest/scripting/actions.html>`__
|
||||||
|
|
||||||
|
* Allowed to declare actions in the `PRE-type scripts <https://docs.platformio.org/en/latest/scripting/launch_types.html>`__ even if the target is not ready yet
|
||||||
|
* Allowed library maintainers to use Pre & Post Actions in the library `extraScript <https://docs.platformio.org/en/latest/manifests/library-json/fields/build/extrascript.html>`__
|
||||||
|
|
||||||
|
- Allowed to ``Import("projenv")`` in a library extra script (`issue #4305 <https://github.com/platformio/platformio-core/issues/4305>`_)
|
||||||
- Documented `Stringification <https://docs.platformio.org/en/latest/projectconf/section_env_build.html#stringification>`__ – converting a macro argument into a string constant (`issue #4310 <https://github.com/platformio/platformio-core/issues/4310>`_)
|
- Documented `Stringification <https://docs.platformio.org/en/latest/projectconf/section_env_build.html#stringification>`__ – converting a macro argument into a string constant (`issue #4310 <https://github.com/platformio/platformio-core/issues/4310>`_)
|
||||||
- Added ``env.StringifyMacro(value)`` helper function for the `Advanced Scripting <https://docs.platformio.org/en/latest/scripting/index.html>`__
|
- Added ``env.StringifyMacro(value)`` helper function for the `Advanced Scripting <https://docs.platformio.org/en/latest/scripting/index.html>`__
|
||||||
- Allowed to ``Import("projenv")`` in a library extra script (`issue #4305 <https://github.com/platformio/platformio-core/issues/4305>`_)
|
|
||||||
- Fixed an issue when the `build_unflags <https://docs.platformio.org/en/latest/projectconf/section_env_build.html#build-unflags>`__ operation ignores a flag value (`issue #4309 <https://github.com/platformio/platformio-core/issues/4309>`_)
|
- Fixed an issue when the `build_unflags <https://docs.platformio.org/en/latest/projectconf/section_env_build.html#build-unflags>`__ operation ignores a flag value (`issue #4309 <https://github.com/platformio/platformio-core/issues/4309>`_)
|
||||||
- Fixed an issue when the `build_unflags <https://docs.platformio.org/en/latest/projectconf/section_env_build.html#build-unflags>`__ option was not applied to the ``ASPPFLAGS`` scope
|
- Fixed an issue when the `build_unflags <https://docs.platformio.org/en/latest/projectconf/section_env_build.html#build-unflags>`__ option was not applied to the ``ASPPFLAGS`` scope
|
||||||
- Fixed an issue on Windows OS when flags were wrapped to the temporary file while generating the `Compilation database "compile_commands.json" <https://docs.platformio.org/en/latest/integration/compile_commands.html>`__
|
- Fixed an issue on Windows OS when flags were wrapped to the temporary file while generating the `Compilation database "compile_commands.json" <https://docs.platformio.org/en/latest/integration/compile_commands.html>`__
|
||||||
|
2
docs
2
docs
Submodule docs updated: d24f9a649c...54d25a92c9
@@ -53,6 +53,7 @@ DEFAULT_ENV_OPTIONS = dict(
|
|||||||
"cc",
|
"cc",
|
||||||
"c++",
|
"c++",
|
||||||
"link",
|
"link",
|
||||||
|
"piohooks",
|
||||||
"pioasm",
|
"pioasm",
|
||||||
"platformio",
|
"platformio",
|
||||||
"pioproject",
|
"pioproject",
|
||||||
@@ -221,6 +222,8 @@ env.AddPreAction(
|
|||||||
AlwaysBuild(env.Alias("__debug", DEFAULT_TARGETS))
|
AlwaysBuild(env.Alias("__debug", DEFAULT_TARGETS))
|
||||||
AlwaysBuild(env.Alias("__test", DEFAULT_TARGETS))
|
AlwaysBuild(env.Alias("__test", DEFAULT_TARGETS))
|
||||||
|
|
||||||
|
env.ProcessDelayedActions()
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
if "envdump" in COMMAND_LINE_TARGETS:
|
if "envdump" in COMMAND_LINE_TARGETS:
|
||||||
|
42
platformio/builder/tools/piohooks.py
Normal file
42
platformio/builder/tools/piohooks.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# Copyright (c) 2014-present PlatformIO <contact@platformio.org>
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
|
||||||
|
def AddActionWrapper(handler):
|
||||||
|
def wraps(env, files, action):
|
||||||
|
nodes = env.arg2nodes(files, env.fs.Entry)
|
||||||
|
unknown_nodes = [node for node in nodes if not node.exists()]
|
||||||
|
if unknown_nodes:
|
||||||
|
env.Append(**{"_PIO_DELAYED_ACTIONS": [(handler, unknown_nodes, action)]})
|
||||||
|
return handler([node for node in nodes if node.exists()], action)
|
||||||
|
|
||||||
|
return wraps
|
||||||
|
|
||||||
|
|
||||||
|
def ProcessDelayedActions(env):
|
||||||
|
for func, nodes, action in env.get("_PIO_DELAYED_ACTIONS", []):
|
||||||
|
func(nodes, action)
|
||||||
|
|
||||||
|
|
||||||
|
def generate(env):
|
||||||
|
env.Replace(**{"_PIO_DELAYED_ACTIONS": []})
|
||||||
|
env.AddMethod(AddActionWrapper(env.AddPreAction), "AddPreAction")
|
||||||
|
env.AddMethod(AddActionWrapper(env.AddPostAction), "AddPostAction")
|
||||||
|
env.AddMethod(ProcessDelayedActions)
|
||||||
|
|
||||||
|
|
||||||
|
def exists(_):
|
||||||
|
return True
|
@@ -17,7 +17,7 @@ from pathlib import Path
|
|||||||
from platformio.run.cli import cli as cmd_run
|
from platformio.run.cli import cli as cmd_run
|
||||||
|
|
||||||
|
|
||||||
def test_build_flags(clirunner, validate_cliresult, tmpdir):
|
def test_generic_build(clirunner, validate_cliresult, tmpdir):
|
||||||
build_flags = [
|
build_flags = [
|
||||||
("-D TEST_INT=13", "-DTEST_INT=13"),
|
("-D TEST_INT=13", "-DTEST_INT=13"),
|
||||||
("-DTEST_SINGLE_MACRO", "-DTEST_SINGLE_MACRO"),
|
("-DTEST_SINGLE_MACRO", "-DTEST_SINGLE_MACRO"),
|
||||||
@@ -28,7 +28,9 @@ def test_build_flags(clirunner, validate_cliresult, tmpdir):
|
|||||||
"""
|
"""
|
||||||
[env:native]
|
[env:native]
|
||||||
platform = native
|
platform = native
|
||||||
extra_scripts = extra.py
|
extra_scripts =
|
||||||
|
pre:pre_script.py
|
||||||
|
post_script.py
|
||||||
lib_ldf_mode = deep+
|
lib_ldf_mode = deep+
|
||||||
build_src_flags = -DI_AM_ONLY_SRC_FLAG
|
build_src_flags = -DI_AM_ONLY_SRC_FLAG
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -38,7 +40,17 @@ build_flags =
|
|||||||
% " ".join([f[0] for f in build_flags])
|
% " ".join([f[0] for f in build_flags])
|
||||||
)
|
)
|
||||||
|
|
||||||
tmpdir.join("extra.py").write(
|
tmpdir.join("pre_script.py").write(
|
||||||
|
"""
|
||||||
|
Import("env")
|
||||||
|
|
||||||
|
def post_prog_action(source, target, env):
|
||||||
|
print("post_prog_action is called")
|
||||||
|
|
||||||
|
env.AddPostAction("$PROG_PATH", post_prog_action)
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
tmpdir.join("post_script.py").write(
|
||||||
"""
|
"""
|
||||||
Import("projenv")
|
Import("projenv")
|
||||||
|
|
||||||
@@ -102,6 +114,7 @@ void dummy(void ) {};
|
|||||||
|
|
||||||
result = clirunner.invoke(cmd_run, ["--project-dir", str(tmpdir), "--verbose"])
|
result = clirunner.invoke(cmd_run, ["--project-dir", str(tmpdir), "--verbose"])
|
||||||
validate_cliresult(result)
|
validate_cliresult(result)
|
||||||
|
assert "post_prog_action is called" in result.output
|
||||||
build_output = result.output[result.output.find("Scanning dependencies...") :]
|
build_output = result.output[result.output.find("Scanning dependencies...") :]
|
||||||
for flag in build_flags:
|
for flag in build_flags:
|
||||||
assert flag[1] in build_output, flag
|
assert flag[1] in build_output, flag
|
||||||
|
Reference in New Issue
Block a user