diff --git a/platformio/builder/tools/piomisc.py b/platformio/builder/tools/piomisc.py index 765cc3b9..f12a0ddd 100644 --- a/platformio/builder/tools/piomisc.py +++ b/platformio/builder/tools/piomisc.py @@ -23,6 +23,7 @@ from os.path import basename, isdir, isfile, join, relpath from tempfile import mkstemp from SCons.Action import Action +from SCons.Defaults import processDefines from SCons.Script import ARGUMENTS from platformio import util @@ -227,10 +228,8 @@ def DumpIDEData(env): def get_defines(env_): defines = [] # global symbols - for item in env_.get("CPPDEFINES", []): - if isinstance(item, list) or isinstance(item, tuple): - item = "=".join(item) - defines.append(env_.subst(item).replace('\\"', '"')) + for item in processDefines(env_.get("CPPDEFINES", [])): + defines.append(env_.subst(item).replace('\\', '')) # special symbol for Atmel AVR MCU if env['PIOPLATFORM'] == "atmelavr": @@ -256,9 +255,7 @@ def DumpIDEData(env): # https://github.com/platformio/platformio-atom-ide/issues/34 _new_defines = [] - for item in env_.get("CPPDEFINES", []): - if isinstance(item, list) or isinstance(item, tuple): - item = "=".join(item) + for item in processDefines(env_.get("CPPDEFINES", [])): item = item.replace('\\"', '"') if " " in item: _new_defines.append(item.replace(" ", "\\\\ ")) diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index 803b7f11..0a1d7e49 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -23,7 +23,7 @@ from os.path import basename, dirname, isdir, join, realpath from SCons.Action import Action from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, DefaultEnvironment, SConscript) -from SCons.Util import case_sensitive_suffixes +from SCons.Util import case_sensitive_suffixes, is_Sequence from platformio.util import pioversion_to_intstr @@ -111,12 +111,17 @@ def ProcessFlags(env, flags): flags = " ".join(flags) parsed_flags = env.ParseFlags(str(flags)) for flag in parsed_flags.pop("CPPDEFINES"): - if not isinstance(flag, list): + if not is_Sequence(flag): env.Append(CPPDEFINES=flag) continue - if '\"' in flag[1]: - flag[1] = flag[1].replace('\"', '\\\"') - env.Append(CPPDEFINES=[flag]) + _key, _value = flag[:2] + if '\"' in _value: + _value = _value.replace('\"', '\\\"') + elif _value.isdigit(): + _value = int(_value) + elif _value.replace(".", "", 1).isdigit(): + _value = float(_value) + env.Append(CPPDEFINES=(_key, _value)) env.Append(**parsed_flags) # fix relative CPPPATH & LIBPATH