diff --git a/platformio/__init__.py b/platformio/__init__.py index b3ff0e42..fa2c7125 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -50,7 +50,7 @@ __core_packages__ = { "contrib-piohome": "~3.3.3", "contrib-pysite": "~2.%d%d.0" % (sys.version_info.major, sys.version_info.minor), "tool-unity": "~1.20500.0", - "tool-scons": "~2.20501.7" if sys.version_info.major == 2 else "~4.40100.1", + "tool-scons": "~2.20501.7" if sys.version_info.major == 2 else "~4.40100.2", "tool-cppcheck": "~1.230.0", "tool-clangtidy": "~1.100000.0", "tool-pvs-studio": "~7.11.0", diff --git a/platformio/builder/tools/piomaxlen.py b/platformio/builder/tools/piomaxlen.py index c05ae821..d386bd14 100644 --- a/platformio/builder/tools/piomaxlen.py +++ b/platformio/builder/tools/piomaxlen.py @@ -16,8 +16,10 @@ from __future__ import absolute_import import hashlib import os +import re from SCons.Platform import TempFileMunge # pylint: disable=import-error +from SCons.Subst import quote_spaces # pylint: disable=import-error from platformio.compat import WINDOWS, hashlib_encode_data @@ -27,6 +29,16 @@ from platformio.compat import WINDOWS, hashlib_encode_data # We need ~256 characters for a temporary file path MAX_LINE_LENGTH = (8192 if WINDOWS else 131072) - 256 +WINPATHSEP_RE = re.compile(r"\\([^\"'\\]|$)") + + +def tempfile_arg_esc_func(arg): + arg = quote_spaces(arg) + if not WINDOWS: + return arg + # GCC requires double Windows slashes, let's use UNIX separator + return WINPATHSEP_RE.sub(r"/\1", arg) + def long_sources_hook(env, sources): _sources = str(sources).replace("\\", "/") @@ -67,6 +79,7 @@ def generate(env): _long_sources_hook=long_sources_hook, TEMPFILE=TempFileMunge, MAXLINELENGTH=MAX_LINE_LENGTH, + TEMPFILEARGESCFUNC=tempfile_arg_esc_func, TEMPFILESUFFIX=".tmp", TEMPFILEDIR="$BUILD_DIR", )