Ignore duplicate includes in project generator

This commit is contained in:
Ivan Kravets
2016-01-27 20:04:35 +02:00
parent c20b6af1ec
commit c74f122426

View File

@@ -135,25 +135,21 @@ def ConvertInoToCpp(env):
atexit.register(delete_tmpcpp_file, tmpcpp_file) atexit.register(delete_tmpcpp_file, tmpcpp_file)
def DumpIDEData(env): # pylint: disable=too-many-branches def DumpIDEData(env):
data = {
"defines": [],
"includes": [],
"cxx_path": where_is_program(
env.subst("$CXX"), env.subst("${ENV['PATH']}"))
}
def get_includes():
includes = []
# includes from used framework and libs # includes from used framework and libs
for item in env.get("VARIANT_DIRS", []): for item in env.get("VARIANT_DIRS", []):
if "$BUILDSRC_DIR" in item[0]: if "$BUILDSRC_DIR" in item[0]:
continue continue
data['includes'].append(env.subst(item[1])) includes.append(env.subst(item[1]))
# custom includes # custom includes
for item in env.get("CPPPATH", []): for item in env.get("CPPPATH", []):
if item.startswith("$BUILD_DIR"): if item.startswith("$BUILD_DIR"):
continue continue
data['includes'].append(env.subst(item)) includes.append(env.subst(item))
# installed libs # installed libs
for d in env.get("LIBSOURCE_DIRS", []): for d in env.get("LIBSOURCE_DIRS", []):
@@ -164,10 +160,13 @@ def DumpIDEData(env): # pylint: disable=too-many-branches
# ignore user's specified libs # ignore user's specified libs
if name in env.get("LIB_IGNORE", []): if name in env.get("LIB_IGNORE", []):
continue continue
if isdir(join(lsd_dir, name, "src")): include = (
data['includes'].append(join(lsd_dir, name, "src")) join(lsd_dir, name, "src")
else: if isdir(join(lsd_dir, name, "src"))
data['includes'].append(join(lsd_dir, name)) else join(lsd_dir, name)
)
if include not in includes:
includes.append(include)
# includes from toolchain # includes from toolchain
toolchain_dir = env.subst( toolchain_dir = env.subst(
@@ -177,24 +176,34 @@ def DumpIDEData(env): # pylint: disable=too-many-branches
join(toolchain_dir, "lib", "gcc", "*", "*", "include*") join(toolchain_dir, "lib", "gcc", "*", "*", "include*")
] ]
for g in toolchain_incglobs: for g in toolchain_incglobs:
data['includes'].extend(glob(g)) includes.extend(glob(g))
return includes
def get_defines():
defines = []
# global symbols # global symbols
for item in env.get("CPPDEFINES", []): for item in env.get("CPPDEFINES", []):
if isinstance(item, list): if isinstance(item, list):
item = "=".join(item) item = "=".join(item)
data['defines'].append(env.subst(item).replace('\\"', '"')) defines.append(env.subst(item).replace('\\"', '"'))
# special symbol for Atmel AVR MCU # special symbol for Atmel AVR MCU
board = env.get("BOARD_OPTIONS", {}) board = env.get("BOARD_OPTIONS", {})
if board and board['platform'] == "atmelavr": if board and board['platform'] == "atmelavr":
data['defines'].append( defines.append(
"__AVR_%s__" % board['build']['mcu'].upper() "__AVR_%s__" % board['build']['mcu'].upper()
.replace("ATMEGA", "ATmega") .replace("ATMEGA", "ATmega")
.replace("ATTINY", "ATtiny") .replace("ATTINY", "ATtiny")
) )
return defines
return data return {
"defines": get_defines(),
"includes": get_includes(),
"cxx_path": where_is_program(
env.subst("$CXX"), env.subst("${ENV['PATH']}"))
}
def GetCompilerType(env): def GetCompilerType(env):