edk2/BaseTools/Source/Python
Michael Kubacki 35b5565764 BaseTools/Ecc: Add check for traditional include guards
Adds a new ECC check, `IncludeFileCheckPragmaOnce` (error code 6006),
that flags header files using a traditional `#ifndef`/`#define`
include guard and recommends `#pragma once` instead.

A guard is detected when a '#ifndef NAME' is immediately followed by a
valueless '#define NAME' using the same macro name. Feature macros
such as '#define FOO 1' and files already using '#pragma once' are not
flagged.

The check reports against the parsed preprocessor directive rows in
the identifier tables rather than the File table. Those rows carry the
actual source line number, whereas File-level findings resolve to
"line 1" in the report. This gives an accurate line number, to the
EccCheck CI plugin, so it can reconcile findings with the changed line
ranges of a commit.

It uses the binary extension list and the exception list, consistent
with the other include file checks.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
2026-06-26 02:18:38 +00:00
..
AmlToC BaseTools: Resolve regex syntax warnings 2023-12-21 00:33:31 +00:00
AutoGen BaseTools: GNUMakefiles must use CMD.EXE in Windows 2025-12-24 02:03:38 +00:00
BPDG BaseTools: Remove unused import 2025-07-01 09:51:38 +08:00
build BaseTools/build: Add defines for Windows build environments 2026-01-06 04:44:08 +00:00
Capsule BaseTools/Capsule: Prevent to Read the STDOUT Content as Signature 2026-05-26 06:51:14 +00:00
Common BaseTools: Reject Inline Comments in tools_def 2026-04-21 00:18:43 +00:00
CommonDataClass BaseTools: Fix MODEL_IDENTIFIER_MACRO_PROGMA typo 2026-06-26 02:18:38 +00:00
Ecc BaseTools/Ecc: Add check for traditional include guards 2026-06-26 02:18:38 +00:00
Eot BaseTools: Fix MODEL_IDENTIFIER_MACRO_PROGMA typo 2026-06-26 02:18:38 +00:00
FirmwareStorageFormat BaseTools: Enable FMMT Rebase function 2025-11-23 23:30:49 +00:00
FMMT BaseTools: fix mdlint issues 2026-03-04 22:02:33 +00:00
GenFds BaseTools/GenFds: Fix FV attribute parser to allow any keyword order 2026-06-22 15:18:12 +00:00
GenPatchPcdTable BaseTools: Resolve regex syntax warnings 2023-12-21 00:33:31 +00:00
PatchPcdValue BaseTools: Decouple AutoGen Objects 2019-08-09 23:15:52 +08:00
Pkcs7Sign BaseTools: fix mdlint issues 2026-03-04 22:02:33 +00:00
Rsa2048Sha256Sign BaseTools:Updata the output encoding of the Popen function 2019-08-01 15:36:48 +08:00
Split BaseTools: use shutil.copyfile instead shutil.copy2 2021-08-02 03:52:15 +00:00
Table BaseTools: Table: Remove unnecessary code 2025-07-01 09:51:38 +08:00
TargetTool BaseTools: Remove ARM32 Support 2025-09-25 22:04:10 +00:00
tests/Split BaseTools: fix the split output files root dir 2021-02-07 01:46:18 +00:00
Trim BaseTools/Source/Python/Trim: Add -f/--source-code-format option 2026-03-06 19:47:31 +00:00
UPT BaseTools: Fix MODEL_IDENTIFIER_MACRO_PROGMA typo 2026-06-26 02:18:38 +00:00
Workspace BaseTools/Build: Fix arch macro expansion scope in DSC parser 2026-06-23 02:21:25 +00:00
basetool_tiano_python_path_env.yaml BaseTools: Add YAML files with path env and tool extdeps 2019-11-11 13:01:53 -08:00
GNUmakefile BaseTools: Replace BSD License with BSD+Patent License 2019-04-09 09:10:20 -07:00
Makefile BaseTools: strip trailing whitespace 2019-10-04 11:18:22 +01:00
sitecustomize.py BaseTools: Do not call sys.setdefaultencoding with python 3 2019-10-23 14:25:23 +08:00