mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-31 18:44:27 +02:00
Clean a build environment and installed library dependencies using a new `cleanall
` target // Resolve #4062
This commit is contained in:
@@ -11,7 +11,8 @@ PlatformIO Core 5
|
|||||||
5.2.1 (2021-??-??)
|
5.2.1 (2021-??-??)
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
- Allowed to override a default library builder via a new ``builder`` field in a ``build`` group of `library.json <https://docs.platformio.org/page/librarymanager/config.html#build>`__ manifest (`issue #3957 <https://github.com/platformio/platformio-core/issues/3957>`_)
|
- Clean a build environment and installed library dependencies using a new ``cleanall`` target (`issue #4062 <https://github.com/platformio/platformio-core/issues/4062>`_)
|
||||||
|
- Override a default library builder via a new ``builder`` field in a ``build`` group of `library.json <https://docs.platformio.org/page/librarymanager/config.html#build>`__ manifest (`issue #3957 <https://github.com/platformio/platformio-core/issues/3957>`_)
|
||||||
- Updated `Cppcheck <https://docs.platformio.org/page/plus/check-tools/cppcheck.html>`__ v2.6 with new checks, increased reliability of advanced addons (MISRA/CERT) and various improvements
|
- Updated `Cppcheck <https://docs.platformio.org/page/plus/check-tools/cppcheck.html>`__ v2.6 with new checks, increased reliability of advanced addons (MISRA/CERT) and various improvements
|
||||||
- Handle the "test" folder as a part of CLion project (`issue #4005 <https://github.com/platformio/platformio-core/issues/4005>`_)
|
- Handle the "test" folder as a part of CLion project (`issue #4005 <https://github.com/platformio/platformio-core/issues/4005>`_)
|
||||||
- Improved handling of a library root based on "Conan" or "CMake" build systems (`issue #3887 <https://github.com/platformio/platformio-core/issues/3887>`_)
|
- Improved handling of a library root based on "Conan" or "CMake" build systems (`issue #3887 <https://github.com/platformio/platformio-core/issues/3887>`_)
|
||||||
|
@@ -149,10 +149,12 @@ if int(ARGUMENTS.get("ISATTY", 0)):
|
|||||||
# pylint: disable=protected-access
|
# pylint: disable=protected-access
|
||||||
click._compat.isatty = lambda stream: True
|
click._compat.isatty = lambda stream: True
|
||||||
|
|
||||||
if env.GetOption("clean"):
|
is_clean_all = "cleanall" in COMMAND_LINE_TARGETS
|
||||||
env.PioClean(env.subst("$BUILD_DIR"))
|
if env.GetOption("clean") or is_clean_all:
|
||||||
|
env.PioClean(is_clean_all)
|
||||||
env.Exit(0)
|
env.Exit(0)
|
||||||
elif not int(ARGUMENTS.get("PIOVERBOSE", 0)):
|
|
||||||
|
if not int(ARGUMENTS.get("PIOVERBOSE", 0)):
|
||||||
click.echo("Verbose mode can be enabled via `-v, --verbose` option")
|
click.echo("Verbose mode can be enabled via `-v, --verbose` option")
|
||||||
|
|
||||||
# Dynamically load dependent tools
|
# Dynamically load dependent tools
|
||||||
|
@@ -29,7 +29,7 @@ def VerboseAction(_, act, actstr):
|
|||||||
return Action(act, actstr)
|
return Action(act, actstr)
|
||||||
|
|
||||||
|
|
||||||
def PioClean(env, clean_dir):
|
def PioClean(env, clean_all=False):
|
||||||
def _relpath(path):
|
def _relpath(path):
|
||||||
if compat.IS_WINDOWS:
|
if compat.IS_WINDOWS:
|
||||||
prefix = os.getcwd()[:2].lower()
|
prefix = os.getcwd()[:2].lower()
|
||||||
@@ -41,21 +41,30 @@ def PioClean(env, clean_dir):
|
|||||||
return path
|
return path
|
||||||
return os.path.relpath(path)
|
return os.path.relpath(path)
|
||||||
|
|
||||||
if not os.path.isdir(clean_dir):
|
def _clean_dir(path):
|
||||||
|
clean_rel_path = _relpath(path)
|
||||||
|
for root, _, files in os.walk(path):
|
||||||
|
for f in files:
|
||||||
|
dst = os.path.join(root, f)
|
||||||
|
os.remove(dst)
|
||||||
|
print(
|
||||||
|
"Removed %s"
|
||||||
|
% (dst if not clean_rel_path.startswith(".") else _relpath(dst))
|
||||||
|
)
|
||||||
|
|
||||||
|
build_dir = env.subst("$BUILD_DIR")
|
||||||
|
libdeps_dir = env.subst("$PROJECT_LIBDEPS_DIR")
|
||||||
|
if os.path.isdir(build_dir):
|
||||||
|
_clean_dir(build_dir)
|
||||||
|
fs.rmtree(build_dir)
|
||||||
|
else:
|
||||||
print("Build environment is clean")
|
print("Build environment is clean")
|
||||||
env.Exit(0)
|
|
||||||
clean_rel_path = _relpath(clean_dir)
|
if clean_all and os.path.isdir(libdeps_dir):
|
||||||
for root, _, files in os.walk(clean_dir):
|
_clean_dir(libdeps_dir)
|
||||||
for f in files:
|
fs.rmtree(libdeps_dir)
|
||||||
dst = os.path.join(root, f)
|
|
||||||
os.remove(dst)
|
|
||||||
print(
|
|
||||||
"Removed %s"
|
|
||||||
% (dst if not clean_rel_path.startswith(".") else _relpath(dst))
|
|
||||||
)
|
|
||||||
print("Done cleaning")
|
print("Done cleaning")
|
||||||
fs.rmtree(clean_dir)
|
|
||||||
env.Exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
def AddTarget( # pylint: disable=too-many-arguments
|
def AddTarget( # pylint: disable=too-many-arguments
|
||||||
@@ -65,7 +74,7 @@ def AddTarget( # pylint: disable=too-many-arguments
|
|||||||
actions,
|
actions,
|
||||||
title=None,
|
title=None,
|
||||||
description=None,
|
description=None,
|
||||||
group="Generic",
|
group="General",
|
||||||
always_build=True,
|
always_build=True,
|
||||||
):
|
):
|
||||||
if "__PIO_TARGETS" not in env:
|
if "__PIO_TARGETS" not in env:
|
||||||
@@ -101,7 +110,13 @@ def DumpTargets(env):
|
|||||||
description="Generate compilation database `compile_commands.json`",
|
description="Generate compilation database `compile_commands.json`",
|
||||||
group="Advanced",
|
group="Advanced",
|
||||||
)
|
)
|
||||||
targets["clean"] = dict(name="clean", title="Clean", group="Generic")
|
targets["clean"] = dict(name="clean", title="Clean", group="General")
|
||||||
|
targets["cleanall"] = dict(
|
||||||
|
name="cleanall",
|
||||||
|
title="Clean All",
|
||||||
|
group="General",
|
||||||
|
description="Clean a build environment and installed library dependencies",
|
||||||
|
)
|
||||||
return list(targets.values())
|
return list(targets.values())
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user