From 75754a47504a112d4cd4da6320796e0861f3fe3a Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Fri, 8 Jun 2018 21:38:41 +0300 Subject: [PATCH] Don't export ``CPPPATH`` of project dependent libraries to frameworks // Resolve #1665 --- HISTORY.rst | 6 +++ docs | 2 +- platformio/builder/tools/piolib.py | 6 +-- platformio/builder/tools/platformio.py | 57 ++++++++++++++++---------- tests/test_builder.py | 5 ++- 5 files changed, 48 insertions(+), 28 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 4bcb68f6..a1bf404b 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -4,6 +4,12 @@ Release Notes PlatformIO 3.0 -------------- +3.5.4 (2018-??-??) +~~~~~~~~~~~~~~~~~~ + +* Don't export ``CPPPATH`` of project dependent libraries to frameworks + (`issue #1665 `_) + 3.5.3 (2018-06-01) ~~~~~~~~~~~~~~~~~~ diff --git a/docs b/docs index 3ad76be8..e80a1091 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 3ad76be8f73ab1b3766bafa7ffca4284051aca4c +Subproject commit e80a1091b0f9b29383bddf10dc02a56967b74eed diff --git a/platformio/builder/tools/piolib.py b/platformio/builder/tools/piolib.py index 3570e232..76798b8e 100644 --- a/platformio/builder/tools/piolib.py +++ b/platformio/builder/tools/piolib.py @@ -821,7 +821,7 @@ def BuildProjectLibraries(env): title = "<%s>" % lb.name vcs_info = lb.vcs_info if lb.version: - title += " v%s" % lb.version + title += " %s" % lb.version if vcs_info and vcs_info.get("version"): title += " #%s" % vcs_info.get("version") sys.stdout.write("%s|-- %s" % (margin, title)) @@ -836,7 +836,6 @@ def BuildProjectLibraries(env): print_deps_tree(lb, level + 1) project = ProjectAsLibBuilder(env, "$PROJECT_DIR") - project.env = env ldf_mode = LibBuilderBase.lib_ldf_mode.fget(project) print "Library Dependency Finder -> http://bit.ly/configure-pio-ldf" @@ -858,7 +857,8 @@ def BuildProjectLibraries(env): else: print "No dependencies" - return project.build() + libs = project.build() + return dict(LIBS=libs, CPPPATH=project.env.get("CPPPATH")) def exists(_): diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index 9c6f6d0d..543d36a9 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -22,7 +22,7 @@ from os.path import basename, dirname, isdir, join, realpath from SCons import Builder, Util from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, - DefaultEnvironment, SConscript) + DefaultEnvironment, Export, SConscript) from platformio.util import glob_escape, pioversion_to_intstr @@ -41,6 +41,36 @@ def scons_patched_match_splitext(path, suffixes=None): return tokens +def _build_project_deps(env): + deps = env.BuildProjectLibraries() + srcnodes = None + if "__test" in COMMAND_LINE_TARGETS: + srcnodes = env.ProcessTest() + else: + srcnodes = env.CollectBuildFiles( + "$BUILDSRC_DIR", + "$PROJECTSRC_DIR", + src_filter=env.get("SRC_FILTER")) + + projenv = env.Clone() + Export("projenv") + + # CPPPATH from dependencies + projenv.PrependUnique(CPPPATH=deps['CPPPATH']) + # extra build flags from `platformio.ini` + projenv.ProcessFlags(env.get("SRC_BUILD_FLAGS")) + + # prepend dependent libs before built-in + env.Prepend( + LIBS=deps['LIBS'], PIOBUILDFILES=[projenv.Object(n) for n in srcnodes]) + + if not env['PIOBUILDFILES'] and not COMMAND_LINE_TARGETS: + sys.stderr.write( + "Error: Nothing to build. Please put your source code files " + "to '%s' folder\n" % env.subst("$PROJECTSRC_DIR")) + env.Exit(1) + + def BuildProgram(env): def _append_pio_macros(): @@ -62,6 +92,7 @@ def BuildProgram(env): # process extra flags from board if "BOARD" in env and "build.extra_flags" in env.BoardConfig(): env.ProcessFlags(env.BoardConfig().get("build.extra_flags")) + # apply user flags env.ProcessFlags(env.get("BUILD_FLAGS")) @@ -74,8 +105,8 @@ def BuildProgram(env): # remove specified flags env.ProcessUnFlags(env.get("BUILD_UNFLAGS")) - # build dependent libs; place them before built-in libs - env.Prepend(LIBS=env.BuildProjectLibraries()) + # build project with dependencies + _build_project_deps(env) # append specified LD_SCRIPT if ("LDSCRIPT_PATH" in env @@ -87,24 +118,6 @@ def BuildProgram(env): env.Prepend(_LIBFLAGS="-Wl,--start-group ") env.Append(_LIBFLAGS=" -Wl,--end-group") - # Handle SRC_BUILD_FLAGS - env.ProcessFlags(env.get("SRC_BUILD_FLAGS")) - - if "__test" in COMMAND_LINE_TARGETS: - env.Append(PIOBUILDFILES=env.ProcessTest()) - else: - env.Append( - PIOBUILDFILES=env.CollectBuildFiles( - "$BUILDSRC_DIR", - "$PROJECTSRC_DIR", - src_filter=env.get("SRC_FILTER"))) - - if not env['PIOBUILDFILES'] and not COMMAND_LINE_TARGETS: - sys.stderr.write( - "Error: Nothing to build. Please put your source code files " - "to '%s' folder\n" % env.subst("$PROJECTSRC_DIR")) - env.Exit(1) - program = env.Program( join("$BUILD_DIR", env.subst("$PROGNAME")), env['PIOBUILDFILES']) @@ -275,7 +288,7 @@ def BuildFrameworks(env, frameworks): env.ConvertInoToCpp() if f in board_frameworks: - SConscript(env.GetFrameworkScript(f)) + SConscript(env.GetFrameworkScript(f), exports="env") else: sys.stderr.write( "Error: This board doesn't support %s framework!\n" % f) diff --git a/tests/test_builder.py b/tests/test_builder.py index cafd1cee..4048c065 100644 --- a/tests/test_builder.py +++ b/tests/test_builder.py @@ -29,8 +29,9 @@ build_flags = %s """ % " ".join([f[0] for f in build_flags])) tmpdir.join("extra.py").write(""" -Import("env") -env.Append(CPPDEFINES="POST_SCRIPT_MACRO") +Import("projenv") + +projenv.Append(CPPDEFINES="POST_SCRIPT_MACRO") """) tmpdir.mkdir("src").join("main.cpp").write("""