Improve defines processing

This commit is contained in:
Ivan Kravets
2016-11-30 18:05:14 +02:00
parent 7ab393cea7
commit e0461fedf6
2 changed files with 14 additions and 12 deletions

View File

@ -23,6 +23,7 @@ from os.path import basename, isdir, isfile, join, relpath
from tempfile import mkstemp from tempfile import mkstemp
from SCons.Action import Action from SCons.Action import Action
from SCons.Defaults import processDefines
from SCons.Script import ARGUMENTS from SCons.Script import ARGUMENTS
from platformio import util from platformio import util
@ -227,10 +228,8 @@ def DumpIDEData(env):
def get_defines(env_): def get_defines(env_):
defines = [] defines = []
# global symbols # global symbols
for item in env_.get("CPPDEFINES", []): for item in processDefines(env_.get("CPPDEFINES", [])):
if isinstance(item, list) or isinstance(item, tuple): defines.append(env_.subst(item).replace('\\', ''))
item = "=".join(item)
defines.append(env_.subst(item).replace('\\"', '"'))
# special symbol for Atmel AVR MCU # special symbol for Atmel AVR MCU
if env['PIOPLATFORM'] == "atmelavr": if env['PIOPLATFORM'] == "atmelavr":
@ -256,9 +255,7 @@ def DumpIDEData(env):
# https://github.com/platformio/platformio-atom-ide/issues/34 # https://github.com/platformio/platformio-atom-ide/issues/34
_new_defines = [] _new_defines = []
for item in env_.get("CPPDEFINES", []): for item in processDefines(env_.get("CPPDEFINES", [])):
if isinstance(item, list) or isinstance(item, tuple):
item = "=".join(item)
item = item.replace('\\"', '"') item = item.replace('\\"', '"')
if " " in item: if " " in item:
_new_defines.append(item.replace(" ", "\\\\ ")) _new_defines.append(item.replace(" ", "\\\\ "))

View File

@ -23,7 +23,7 @@ from os.path import basename, dirname, isdir, join, realpath
from SCons.Action import Action from SCons.Action import Action
from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild,
DefaultEnvironment, SConscript) 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 from platformio.util import pioversion_to_intstr
@ -111,12 +111,17 @@ def ProcessFlags(env, flags):
flags = " ".join(flags) flags = " ".join(flags)
parsed_flags = env.ParseFlags(str(flags)) parsed_flags = env.ParseFlags(str(flags))
for flag in parsed_flags.pop("CPPDEFINES"): for flag in parsed_flags.pop("CPPDEFINES"):
if not isinstance(flag, list): if not is_Sequence(flag):
env.Append(CPPDEFINES=flag) env.Append(CPPDEFINES=flag)
continue continue
if '\"' in flag[1]: _key, _value = flag[:2]
flag[1] = flag[1].replace('\"', '\\\"') if '\"' in _value:
env.Append(CPPDEFINES=[flag]) _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) env.Append(**parsed_flags)
# fix relative CPPPATH & LIBPATH # fix relative CPPPATH & LIBPATH