From a7905b373e614f22b94bd350aebc4bec33b9bdf0 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Mon, 11 Oct 2021 16:00:09 +0300 Subject: [PATCH 01/11] Skip CI for macOS & Py 3.6 --- .github/workflows/core.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 6f21021a..7ee26aac 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -9,13 +9,16 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macos-latest] python-version: [3.6, 3.7, 3.8, 3.9] + exclude: + - os: macos-latest + python-version: '3.6' runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 with: submodules: "recursive" - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies From 39c93f6512cdeb7c87d3220f1e0c5b8608e4b0f9 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Tue, 19 Oct 2021 18:20:01 +0300 Subject: [PATCH 02/11] Override debugging firmware loading mode using ``--load-mode`` option for `pio debug` command --- HISTORY.rst | 5 +++++ docs | 2 +- platformio/commands/debug.py | 15 +++++++++++++-- .../ide/tpls/vscode/.vscode/launch.json.tpl | 5 ++++- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index d84c84da..4d78e58d 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -8,6 +8,11 @@ PlatformIO Core 5 **A professional collaborative platform for embedded development** +5.2.2 (2021-??-??) +~~~~~~~~~~~~~~~~~~ + +- Override debugging firmware loading mode using ``--load-mode`` option for `pio debug `__ command + 5.2.1 (2021-10-11) ~~~~~~~~~~~~~~~~~~ diff --git a/docs b/docs index 8a613430..0a751d47 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 8a613430957704dfc2e4fc30337020a0a80cfba8 +Subproject commit 0a751d47b2f41a7888d43e5e390f6201279c34e5 diff --git a/platformio/commands/debug.py b/platformio/commands/debug.py index d0cbf233..290144b8 100644 --- a/platformio/commands/debug.py +++ b/platformio/commands/debug.py @@ -31,6 +31,7 @@ from platformio.debug.process.gdb import GDBClientProcess from platformio.project.config import ProjectConfig from platformio.project.exception import ProjectEnvsNotAvailableError from platformio.project.helpers import is_platformio_project +from platformio.project.options import ProjectOptions @click.command( @@ -54,11 +55,21 @@ from platformio.project.helpers import is_platformio_project ), ) @click.option("--environment", "-e", metavar="") +@click.option("--load-mode", type=ProjectOptions["env.debug_load_mode"].type) @click.option("--verbose", "-v", is_flag=True) @click.option("--interface", type=click.Choice(["gdb"])) @click.argument("__unprocessed", nargs=-1, type=click.UNPROCESSED) @click.pass_context -def cli(ctx, project_dir, project_conf, environment, verbose, interface, __unprocessed): +def cli( + ctx, + project_dir, + project_conf, + environment, + load_mode, + verbose, + interface, + __unprocessed, +): app.set_session_var("custom_project_conf", project_conf) # use env variables from Eclipse or CLion @@ -104,7 +115,7 @@ def cli(ctx, project_dir, project_conf, environment, verbose, interface, __unpro rebuild_prog = False preload = debug_config.load_cmds == ["preload"] - load_mode = debug_config.load_mode + load_mode = load_mode or debug_config.load_mode if load_mode == "always": rebuild_prog = preload or not helpers.has_debug_symbols( debug_config.program_path diff --git a/platformio/ide/tpls/vscode/.vscode/launch.json.tpl b/platformio/ide/tpls/vscode/.vscode/launch.json.tpl index e05c7237..eb654808 100644 --- a/platformio/ide/tpls/vscode/.vscode/launch.json.tpl +++ b/platformio/ide/tpls/vscode/.vscode/launch.json.tpl @@ -30,7 +30,10 @@ % "type": "PlatformIO", % "task": ("Pre-Debug (%s)" % env_name) if len(config.envs()) > 1 else "Pre-Debug", % } -% return [debug, predebug] +% noloading = predebug.copy() +% noloading["name"] = "PIO Debug (without uploading)" +% noloading["loadMode"] = "manual" +% return [debug, predebug, noloading] % end % % def _remove_comments(lines): From 2d9a5031e9d033ab929c941026343bd283193d7f Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Tue, 19 Oct 2021 18:21:21 +0300 Subject: [PATCH 03/11] Test PlatformIO Core on Python 3.10 --- .github/workflows/core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 7ee26aac..b5d9fcab 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -8,7 +8,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9, 3.10] exclude: - os: macos-latest python-version: '3.6' From 883187f9ac3f82c2f6b10c5b1a47bb8987be71c5 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Tue, 19 Oct 2021 18:21:28 +0300 Subject: [PATCH 04/11] Bump version to 5.2.2a1 --- platformio/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio/__init__.py b/platformio/__init__.py index 31da28ca..b56506a0 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -14,7 +14,7 @@ import sys -VERSION = (5, 2, 1) +VERSION = (5, 2, "2a1") __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio" From 4a61806e60b4d584aa72e38025669511071e8381 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Tue, 19 Oct 2021 18:52:30 +0300 Subject: [PATCH 05/11] Quote Python versions --- .github/workflows/core.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index b5d9fcab..5e7c2633 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -8,10 +8,10 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - python-version: [3.6, 3.7, 3.8, 3.9, 3.10] + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] exclude: - os: macos-latest - python-version: '3.6' + python-version: "3.6" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 From 2e4e5c1873ce3f2ea2a1210ac3227e57a291b896 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Tue, 19 Oct 2021 19:26:13 +0300 Subject: [PATCH 06/11] Temporary disable CI for Windows+Python 3.10 --- .github/workflows/core.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 5e7c2633..0a0e9a16 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -12,6 +12,8 @@ jobs: exclude: - os: macos-latest python-version: "3.6" + - os: windows-latest + python-version: "3.10" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 From 768681c4f26d5b776b928458cf106fba6bd38152 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Tue, 19 Oct 2021 19:27:20 +0300 Subject: [PATCH 07/11] Remove debugging code // Resolve #4083 --- platformio/__main__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/platformio/__main__.py b/platformio/__main__.py index f2c38808..f7bdd61b 100644 --- a/platformio/__main__.py +++ b/platformio/__main__.py @@ -76,7 +76,6 @@ try: except (AttributeError, TypeError): # legacy support for CLick > 8.0.1 - print("legacy Click") @cli.resultcallback() @click.pass_context From 5b091b602fbe3204a5fc04bec9b382e62f093f5f Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Wed, 20 Oct 2021 15:35:01 +0300 Subject: [PATCH 08/11] =?UTF-8?q?Fixed=20a=20=E2=80=9CTypeError=E2=80=9D?= =?UTF-8?q?=20issue=20when=20extending=20configuration=20option=20in=20?= =?UTF-8?q?=E2=80=9Cplatformio.ini=E2=80=9D=20with=20the=20multi-line=20de?= =?UTF-8?q?fault=20value=20//=20Resolve=20#4082?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY.rst | 2 ++ platformio/project/config.py | 5 ++++- tests/test_projectconf.py | 30 +++++++++++++++++++++++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 4d78e58d..f2d78cfe 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -12,6 +12,8 @@ PlatformIO Core 5 ~~~~~~~~~~~~~~~~~~ - Override debugging firmware loading mode using ``--load-mode`` option for `pio debug `__ command +- Removed debugging "legacy Click" message from CLI (`issue #4083 `_) +- Fixed a "TypeError: sequence item 1: expected str instance, list found" issue when extending configuration option in `"platformio.ini" `__ with the multi-line default value (`issue #4082 `_) 5.2.1 (2021-10-11) ~~~~~~~~~~~~~~~~~~ diff --git a/platformio/project/config.py b/platformio/project/config.py index 13ff8e2b..187cb993 100644 --- a/platformio/project/config.py +++ b/platformio/project/config.py @@ -295,7 +295,10 @@ class ProjectConfigBase(object): section, option = match.group(1), match.group(2) if section == "sysenv": return os.getenv(option) - return self.getraw(section, option) + value = self.getraw(section, option) + if isinstance(value, list): + return "\n".join(value) + return value def get(self, section, option, default=MISSING): value = None diff --git a/tests/test_projectconf.py b/tests/test_projectconf.py index 832ceb71..99c71ec0 100644 --- a/tests/test_projectconf.py +++ b/tests/test_projectconf.py @@ -63,6 +63,10 @@ targets = [env:test_extends] extends = strict_settings +[env:inject_base_env] +debug_build_flags = + ${env.debug_build_flags} + -D CUSTOM_DEBUG_FLAG """ @@ -150,13 +154,20 @@ def test_sections(config): "custom", "env:base", "env:test_extends", + "env:inject_base_env", "env:extra_1", "env:extra_2", ] def test_envs(config): - assert config.envs() == ["base", "test_extends", "extra_1", "extra_2"] + assert config.envs() == [ + "base", + "test_extends", + "inject_base_env", + "extra_1", + "extra_2", + ] assert config.default_envs() == ["base", "extra_2"] @@ -274,6 +285,14 @@ def test_get_value(config): assert config.get("env:extra_2", "monitor_speed") == 9600 assert config.get("env:base", "build_flags") == ["-D DEBUG=1"] + # get default value from ConfigOption + assert config.get("env:inject_base_env", "debug_build_flags") == [ + "-Og", + "-g2", + "-ggdb2", + "-D CUSTOM_DEBUG_FLAG", + ] + def test_items(config): assert config.items("custom") == [ @@ -445,4 +464,13 @@ def test_dump(tmpdir_factory): ], ), ("env:test_extends", [("extends", ["strict_settings"])]), + ( + "env:inject_base_env", + [ + ( + "debug_build_flags", + ["${env.debug_build_flags}", "-D CUSTOM_DEBUG_FLAG"], + ) + ], + ), ] From e41ecb19cf270bc94c89f372c38eeb2b52db551e Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Wed, 20 Oct 2021 16:21:48 +0300 Subject: [PATCH 09/11] Resolve an issue with interrupting a running program --- platformio/commands/debug.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platformio/commands/debug.py b/platformio/commands/debug.py index 290144b8..48d86891 100644 --- a/platformio/commands/debug.py +++ b/platformio/commands/debug.py @@ -17,6 +17,7 @@ import asyncio import os +import signal import subprocess import click @@ -166,6 +167,7 @@ def cli( client = GDBClientProcess(project_dir, debug_config) coro = client.run(__unprocessed) try: + signal.signal(signal.SIGINT, signal.SIG_IGN) loop.run_until_complete(coro) if IS_WINDOWS: # an issue with `asyncio` executor and STIDIN, From a9c7a27d47aeed6e227e4149580ddf0975a5cb70 Mon Sep 17 00:00:00 2001 From: Ilia Motornyi Date: Wed, 20 Oct 2021 18:08:22 +0300 Subject: [PATCH 10/11] Fix CLion 2021.3 support (#4085) New CMake behavior crashes CLion with apostrophe symbols in `add_definitions` clause see https://youtrack.jetbrains.com/issue/CPP-26719 --- platformio/ide/tpls/clion/CMakeListsPrivate.txt.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platformio/ide/tpls/clion/CMakeListsPrivate.txt.tpl b/platformio/ide/tpls/clion/CMakeListsPrivate.txt.tpl index a5c0010b..9df294ee 100644 --- a/platformio/ide/tpls/clion/CMakeListsPrivate.txt.tpl +++ b/platformio/ide/tpls/clion/CMakeListsPrivate.txt.tpl @@ -75,7 +75,7 @@ set(CMAKE_CXX_STANDARD {{ cxx_stds[-1] }}) if (CMAKE_BUILD_TYPE MATCHES "{{ env_name }}") % for define in defines: - add_definitions(-D'{{!re.sub(r"([\"\(\)#])", r"\\\1", define)}}') + add_definitions(-D{{!re.sub(r"([\"\(\)#])", r"\\\1", define)}}) % end % for include in filter_includes(includes): @@ -99,7 +99,7 @@ endif() % for env, data in ide_data.items(): if (CMAKE_BUILD_TYPE MATCHES "{{ env }}") % for define in data["defines"]: - add_definitions(-D'{{!re.sub(r"([\"\(\)#])", r"\\\1", define)}}') + add_definitions(-D{{!re.sub(r"([\"\(\)#])", r"\\\1", define)}}) % end % for include in filter_includes(data["includes"]): From 2e2773fa6bf24f67966ca2629c9e2908920b7640 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Wed, 20 Oct 2021 18:44:20 +0300 Subject: [PATCH 11/11] Bump version to 5.2.2 --- HISTORY.rst | 3 ++- docs | 2 +- platformio/__init__.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index f2d78cfe..1089d25d 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -8,10 +8,11 @@ PlatformIO Core 5 **A professional collaborative platform for embedded development** -5.2.2 (2021-??-??) +5.2.2 (2021-10-20) ~~~~~~~~~~~~~~~~~~ - Override debugging firmware loading mode using ``--load-mode`` option for `pio debug `__ command +- Added support for CLion IDE 2021.3 (`pull #4085 `_) - Removed debugging "legacy Click" message from CLI (`issue #4083 `_) - Fixed a "TypeError: sequence item 1: expected str instance, list found" issue when extending configuration option in `"platformio.ini" `__ with the multi-line default value (`issue #4082 `_) diff --git a/docs b/docs index 0a751d47..66f67cb3 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 0a751d47b2f41a7888d43e5e390f6201279c34e5 +Subproject commit 66f67cb3357265ab52a0567b67337ca7fda6c3e4 diff --git a/platformio/__init__.py b/platformio/__init__.py index b56506a0..56d45672 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -14,7 +14,7 @@ import sys -VERSION = (5, 2, "2a1") +VERSION = (5, 2, 2) __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio"