From b8f75e75f65c26f0b8d606a3ddac96015db79088 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Tue, 7 Mar 2017 15:27:57 +0100 Subject: [PATCH] sync with the incremental and inter-file analysis option available as of cppcheck 1.77 --- win32/build/config.w32 | 157 ++++++++++++++++++++++----------------- win32/build/confutils.js | 5 ++ 2 files changed, 93 insertions(+), 69 deletions(-) diff --git a/win32/build/config.w32 b/win32/build/config.w32 index 4c476e682a..1269c6e30f 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 @@ -123,6 +123,94 @@ add_extra_dirs(); //DEFINE("PHP_BUILD", PHP_PHP_BUILD); +ARG_WITH("analyzer", "Enable static analyzer. Pass vs for Visual Studio, clang for clang, cppcheck for Cppcheck, pvs for PVS-Studio", "no"); +if (PHP_ANALYZER == "vs") { + ADD_FLAG("CFLAGS", " /analyze "); + ADD_FLAG("CFLAGS", " /wd6308 "); +} else if (PHP_ANALYZER == "clang") { + var clang_cl = false; + + if (FSO.FileExists(PROGRAM_FILES + "\\LLVM\\bin\\clang-cl.exe")) { + clang_cl = PROGRAM_FILES + "\\LLVM\\bin\\clang-cl.exe"; + } else if (FSO.FileExists(PROGRAM_FILESx86 + "\\LLVM\\bin\\clang-cl.exe")) { + clang_cl = PROGRAM_FILESx86 + "\\LLVM\\bin\\clang-cl.exe"; + } + + if (!clang_cl) { + if (false == PATH_PROG('clang-cl', null, 'CLANG_CL')) { + WARNING("Couldn't find clang binaries, static analyze was disabled"); + PHP_ANALYZER = "no"; + } + } else { + DEFINE("CLANG_CL", clang_cl); + } +} else if (PHP_ANALYZER == "cppcheck") { + + var cppcheck = false; + + if (FSO.FileExists(PROGRAM_FILES + "\\Cppcheck\\cppcheck.exe")) { + cppcheck = PROGRAM_FILES + "\\Cppcheck\\cppcheck.exe"; + } else if (FSO.FileExists(PROGRAM_FILESx86 + "\\Cppcheck\\cppcheck.exe")) { + cppcheck = PROGRAM_FILESx86 + "\\Cppcheck\\cppcheck.exe"; + } + if (!cppcheck) { + if (false == PATH_PROG('cppcheck', null, 'CPPCHECK')) { + WARNING("Couldn't find Cppcheck binaries, static analyze was disabled"); + PHP_ANALYZER = "no"; + } else { + cppcheck = get_define("CPPCHECK"); + } + } else { + DEFINE("CPPCHECK", cppcheck); + } + + if (cppcheck) { + var _tmp = execute(cppcheck + " --version").split(/ /)[1]; + var cppcheck_ver = [ + parseInt(_tmp.split(".")[0]), + parseInt(_tmp.split(".")[1]), + ]; + if (cppcheck_ver[0] > 1 || cppcheck_ver[0] == 1 && cppcheck_ver[1] >= 77) { + var build_dir = get_define("BUILD_DIR"); + var cppcheck_build_dir = build_dir + "\\cppcheck_build"; + if (!FSO.FolderExists(cppcheck_build_dir)) { + FSO.CreateFolder(cppcheck_build_dir); + } + DEFINE("CPPCHECK_BUILD_DIR", cppcheck_build_dir); + } + } + +} else if (PHP_ANALYZER == "pvs") { + var pvs_studio = false; + + if (FSO.FileExists(PROGRAM_FILES + "\\PVS-Studio\\x64\\PVS-Studio.exe")) { + pvs_studio = PROGRAM_FILES + "\\PVS-Studio\\x86\\PVS-Studio.exe"; + } else if (FSO.FileExists(PROGRAM_FILESx86 + "\\PVS-Studio\\x64\\PVS-Studio.exe")) { + pvs_studio = PROGRAM_FILESx86 + "\\PVS-Studio\\x64\\PVS-Studio.exe"; + } + + if (!pvs_studio) { + WARNING("Couldn't find PVS-Studio binaries, static analyze was disabled"); + PHP_ANALYZER = "no"; + } else { + var pvscfg = FSO.CreateTextFile("PVS-Studio.conf", true); + DEFINE("PVS_STUDIO", pvs_studio); + + pvscfg.WriteLine("exclude-path = " + VCINSTALLDIR); + if (FSO.FolderExists(PROGRAM_FILESx86 + "\\windows kits\\")) { + pvscfg.WriteLine("exclude-path = " + PROGRAM_FILESx86 + "\\windows kits\\"); + } else if (FSO.FolderExists(PROGRAM_FILES + "\\windows kits\\")) { + pvscfg.WriteLine("exclude-path = " + PROGRAM_FILES + "\\windows kits\\"); + } + pvscfg.WriteLine("vcinstalldir = " + VCINSTALLDIR); + pvscfg.WriteLine("platform = " + (X64 ? 'x64' : 'Win32')); + pvscfg.WriteLine("preprocessor = visualcpp"); + pvscfg.WriteLine("language = C"); + } +} else { + PHP_ANALYZER = "no" +} + STDOUT.WriteBlankLines(1); STDOUT.WriteLine("Build dir: " + get_define('BUILD_DIR')); STDOUT.WriteLine("PHP Core: " + get_define('PHPDLL') + " and " + get_define('PHPLIB')); @@ -212,75 +300,6 @@ if (PHP_SECURITY_FLAGS == "yes") { ADD_FLAG("LDFLAGS", "/NXCOMPAT /DYNAMICBASE "); } -ARG_WITH("analyzer", "Enable static analyzer. Pass vs for Visual Studio, clang for clang, cppcheck for Cppcheck, pvs for PVS-Studio", "no"); -if (PHP_ANALYZER == "vs") { - ADD_FLAG("CFLAGS", " /analyze "); - ADD_FLAG("CFLAGS", " /wd6308 "); -} else if (PHP_ANALYZER == "clang") { - var clang_cl = false; - - if (FSO.FileExists(PROGRAM_FILES + "\\LLVM\\bin\\clang-cl.exe")) { - clang_cl = PROGRAM_FILES + "\\LLVM\\bin\\clang-cl.exe"; - } else if (FSO.FileExists(PROGRAM_FILESx86 + "\\LLVM\\bin\\clang-cl.exe")) { - clang_cl = PROGRAM_FILESx86 + "\\LLVM\\bin\\clang-cl.exe"; - } - - if (!clang_cl) { - if (false == PATH_PROG('clang-cl', null, 'CLANG_CL')) { - WARNING("Couldn't find clang binaries, static analyze was disabled"); - PHP_ANALYZER = "no"; - } - } else { - DEFINE("CLANG_CL", clang_cl); - } -} else if (PHP_ANALYZER == "cppcheck") { - - var cppcheck = false; - - if (FSO.FileExists(PROGRAM_FILES + "\\Cppcheck\\cppcheck.exe")) { - cppcheck = PROGRAM_FILES + "\\Cppcheck\\cppcheck.exe"; - } else if (FSO.FileExists(PROGRAM_FILESx86 + "\\Cppcheck\\cppcheck.exe")) { - cppcheck = PROGRAM_FILESx86 + "\\Cppcheck\\cppcheck.exe"; - } - if (!cppcheck) { - if (false == PATH_PROG('cppcheck', null, 'CPPCHECK')) { - WARNING("Couldn't find Cppcheck binaries, static analyze was disabled"); - PHP_ANALYZER = "no"; - } - } else { - DEFINE("CPPCHECK", cppcheck); - } -} else if (PHP_ANALYZER == "pvs") { - var pvs_studio = false; - - if (FSO.FileExists(PROGRAM_FILES + "\\PVS-Studio\\x64\\PVS-Studio.exe")) { - pvs_studio = PROGRAM_FILES + "\\PVS-Studio\\x86\\PVS-Studio.exe"; - } else if (FSO.FileExists(PROGRAM_FILESx86 + "\\PVS-Studio\\x64\\PVS-Studio.exe")) { - pvs_studio = PROGRAM_FILESx86 + "\\PVS-Studio\\x64\\PVS-Studio.exe"; - } - - if (!pvs_studio) { - WARNING("Couldn't find PVS-Studio binaries, static analyze was disabled"); - PHP_ANALYZER = "no"; - } else { - var pvscfg = FSO.CreateTextFile("PVS-Studio.conf", true); - DEFINE("PVS_STUDIO", pvs_studio); - - pvscfg.WriteLine("exclude-path = " + VCINSTALLDIR); - if (FSO.FolderExists(PROGRAM_FILESx86 + "\\windows kits\\")) { - pvscfg.WriteLine("exclude-path = " + PROGRAM_FILESx86 + "\\windows kits\\"); - } else if (FSO.FolderExists(PROGRAM_FILES + "\\windows kits\\")) { - pvscfg.WriteLine("exclude-path = " + PROGRAM_FILES + "\\windows kits\\"); - } - pvscfg.WriteLine("vcinstalldir = " + VCINSTALLDIR); - pvscfg.WriteLine("platform = " + (X64 ? 'x64' : 'Win32')); - pvscfg.WriteLine("preprocessor = visualcpp"); - pvscfg.WriteLine("language = C"); - } -} else { - PHP_ANALYZER = "no" -} - if (CLANG_TOOLSET) { ARG_WITH("uncritical-warn-choke", "Disable some uncritical warnings", "yes"); if (PHP_UNCRITICAL_WARN_CHOKE != "no") { diff --git a/win32/build/confutils.js b/win32/build/confutils.js index 841fa293df..89995171b7 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -1637,6 +1637,11 @@ function ADD_SOURCES(dir, file_list, target, obj_dir) /* "--rule-file=win32\build\cppcheck_rules.xml " + */ " --std=c89 --std=c++11 " + "--quiet --inconclusive --template=vs "; + + var cppcheck_build_dir = get_define("CPPCHECK_BUILD_DIR"); + if (!!cppcheck_build_dir) { + analyzer_base_args += "--cppcheck-build-dir=$(CPPCHECK_BUILD_DIR)"; + } } if (PHP_MP_DISABLED) { -- 2.50.1