mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 18:17:13 +02:00
Automatically detect C++ standard version when invoking cppcheck
This commit is contained in:
@ -12,9 +12,10 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import click
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import click
|
||||||
|
|
||||||
from platformio import fs, proc
|
from platformio import fs, proc
|
||||||
from platformio.commands.check.defect import DefectItem
|
from platformio.commands.check.defect import DefectItem
|
||||||
from platformio.project.helpers import get_project_dir, load_project_ide_data
|
from platformio.project.helpers import get_project_dir, load_project_ide_data
|
||||||
@ -26,6 +27,7 @@ class CheckToolBase(object): # pylint: disable=too-many-instance-attributes
|
|||||||
self.envname = envname
|
self.envname = envname
|
||||||
self.options = options
|
self.options = options
|
||||||
self.cpp_defines = []
|
self.cpp_defines = []
|
||||||
|
self.cpp_flags = []
|
||||||
self.cpp_includes = []
|
self.cpp_includes = []
|
||||||
|
|
||||||
self._defects = []
|
self._defects = []
|
||||||
@ -50,6 +52,7 @@ class CheckToolBase(object): # pylint: disable=too-many-instance-attributes
|
|||||||
data = load_project_ide_data(project_dir, envname)
|
data = load_project_ide_data(project_dir, envname)
|
||||||
if not data:
|
if not data:
|
||||||
return
|
return
|
||||||
|
self.cpp_flags = data.get("cxx_flags", "").split(" ")
|
||||||
self.cpp_includes = data.get("includes", [])
|
self.cpp_includes = data.get("includes", [])
|
||||||
self.cpp_defines = data.get("defines", [])
|
self.cpp_defines = data.get("defines", [])
|
||||||
self.cpp_defines.extend(self._get_toolchain_defines(data.get("cc_path")))
|
self.cpp_defines.extend(self._get_toolchain_defines(data.get("cc_path")))
|
||||||
|
@ -90,9 +90,6 @@ class CppcheckCheckTool(CheckToolBase):
|
|||||||
% "<&PIO&>".join(["{0}={{{0}}}".format(f) for f in self.defect_fields])
|
% "<&PIO&>".join(["{0}={{{0}}}".format(f) for f in self.defect_fields])
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.get_source_language() == "c++":
|
|
||||||
cmd.append("--language=c++")
|
|
||||||
|
|
||||||
flags = self.get_flags("cppcheck")
|
flags = self.get_flags("cppcheck")
|
||||||
if not self.is_flag_set("--platform", flags):
|
if not self.is_flag_set("--platform", flags):
|
||||||
cmd.append("--platform=unspecified")
|
cmd.append("--platform=unspecified")
|
||||||
@ -106,6 +103,16 @@ class CppcheckCheckTool(CheckToolBase):
|
|||||||
]
|
]
|
||||||
cmd.append("--enable=%s" % ",".join(enabled_checks))
|
cmd.append("--enable=%s" % ",".join(enabled_checks))
|
||||||
|
|
||||||
|
if not self.is_flag_set("--language", flags):
|
||||||
|
if self.get_source_language() == "c++":
|
||||||
|
cmd.append("--language=c++")
|
||||||
|
|
||||||
|
if not self.is_flag_set("--std", flags):
|
||||||
|
for f in self.cpp_flags:
|
||||||
|
if "-std" in f:
|
||||||
|
# Standards with GNU extensions are not allowed
|
||||||
|
cmd.append("-" + f.replace("gnu", "c"))
|
||||||
|
|
||||||
cmd.extend(["-D%s" % d for d in self.cpp_defines])
|
cmd.extend(["-D%s" % d for d in self.cpp_defines])
|
||||||
cmd.extend(flags)
|
cmd.extend(flags)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user