Dump build flags using SCons.Subst.SUBST_CMD

This commit is contained in:
Ivan Kravets
2021-01-27 20:57:53 +02:00
parent 9d2fd4982f
commit cb9e72a879

View File

@ -17,7 +17,8 @@ from __future__ import absolute_import
import os import os
from glob import glob from glob import glob
from SCons.Defaults import processDefines # pylint: disable=import-error import SCons.Defaults # pylint: disable=import-error
import SCons.Subst # pylint: disable=import-error
from platformio.compat import glob_escape from platformio.compat import glob_escape
from platformio.package.manager.core import get_core_package_dir from platformio.package.manager.core import get_core_package_dir
@ -95,7 +96,7 @@ def _get_gcc_defines(env):
def _dump_defines(env): def _dump_defines(env):
defines = [] defines = []
# global symbols # global symbols
for item in processDefines(env.get("CPPDEFINES", [])): for item in SCons.Defaults.processDefines(env.get("CPPDEFINES", [])):
item = item.strip() item = item.strip()
if item: if item:
defines.append(env.subst(item).replace("\\", "")) defines.append(env.subst(item).replace("\\", ""))
@ -144,8 +145,9 @@ def _get_svd_path(env):
return None return None
def _escape_build_flag(flags): def _subst_cmd(env, cmd):
return [flag if " " not in flag else '"%s"' % flag for flag in flags] args = env.subst_list(cmd, SCons.Subst.SUBST_CMD)[0]
return " ".join([SCons.Subst.quote_spaces(arg) for arg in args])
def DumpIDEData(env, globalenv): def DumpIDEData(env, globalenv):
@ -153,7 +155,7 @@ def DumpIDEData(env, globalenv):
data = { data = {
"env_name": env["PIOENV"], "env_name": env["PIOENV"],
"libsource_dirs": [env.subst(l) for l in env.GetLibSourceDirs()], "libsource_dirs": [env.subst(item) for item in env.GetLibSourceDirs()],
"defines": _dump_defines(env), "defines": _dump_defines(env),
"includes": _dump_includes(env), "includes": _dump_includes(env),
"cc_path": where_is_program(env.subst("$CC"), env.subst("${ENV['PATH']}")), "cc_path": where_is_program(env.subst("$CC"), env.subst("${ENV['PATH']}")),
@ -175,7 +177,7 @@ def DumpIDEData(env, globalenv):
env_ = env.Clone() env_ = env.Clone()
# 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 processDefines(env_.get("CPPDEFINES", [])): for item in SCons.Defaults.processDefines(env_.get("CPPDEFINES", [])):
item = item.replace('\\"', '"') item = item.replace('\\"', '"')
if " " in item: if " " in item:
_new_defines.append(item.replace(" ", "\\\\ ")) _new_defines.append(item.replace(" ", "\\\\ "))
@ -184,15 +186,11 @@ def DumpIDEData(env, globalenv):
env_.Replace(CPPDEFINES=_new_defines) env_.Replace(CPPDEFINES=_new_defines)
# export C/C++ build flags # export C/C++ build flags
env_["__escape_build_flag"] = _escape_build_flag
CFLAGSCOM = (
"${__escape_build_flag(CFLAGS)} ${__escape_build_flag(CCFLAGS)} $CPPFLAGS"
)
CXXFLAGSCOM = (
"${__escape_build_flag(CXXFLAGS)} ${__escape_build_flag(CCFLAGS)} $CPPFLAGS"
)
data.update( data.update(
{"cc_flags": env_.subst(CFLAGSCOM), "cxx_flags": env_.subst(CXXFLAGSCOM)} {
"cc_flags": _subst_cmd(env_, "$CFLAGS $CCFLAGS $CPPFLAGS"),
"cxx_flags": _subst_cmd(env_, "$CXXFLAGS $CCFLAGS $CPPFLAGS"),
}
) )
return data return data