checkpatch: Don't allow common.h and dm.h in headers
authorSimon Glass <sjg@chromium.org>
Sun, 19 Jul 2020 16:16:01 +0000 (10:16 -0600)
committerTom Rini <trini@konsulko.com>
Tue, 4 Aug 2020 02:19:54 +0000 (22:19 -0400)
These headers should not be included in other header files. Add a
checkpatch rule and test for this.

Signed-off-by: Simon Glass <sjg@chromium.org>
scripts/checkpatch.pl
tools/patman/test_checkpatch.py

index 238f12cb469db068b2d3df3c471cde57e1f972d6..3932362dbafd555a6850b74b776ccf83e1189b83 100755 (executable)
@@ -2322,7 +2322,7 @@ sub get_raw_comment {
 
 # Checks specific to U-Boot
 sub u_boot_line {
-       my ($realfile, $line,  $herecurr) = @_;
+       my ($realfile, $line, $rawline, $herecurr) = @_;
 
        # ask for a test if a new uclass ID is added
        if ($realfile =~ /uclass-id.h/ && $line =~ /^\+/) {
@@ -2353,6 +2353,12 @@ sub u_boot_line {
                ERROR("DEFINE_CONFIG_CMD",
                      "All commands are managed by Kconfig\n" . $herecurr);
        }
+
+       # Don't put common.h and dm.h in header files
+       if ($realfile =~ /\.h$/ && $rawline =~ /^\+#include\s*<(common|dm)\.h>*/) {
+               ERROR("BARRED_INCLUDE_IN_HDR",
+                     "Avoid including common.h and dm.h in header files\n" . $herecurr);
+       }
 }
 
 sub process {
@@ -3296,7 +3302,7 @@ sub process {
                }
 
                if ($u_boot) {
-                       u_boot_line($realfile, $line,  $herecurr);
+                       u_boot_line($realfile, $line, $rawline, $herecurr);
                }
 
 # check we are in a valid source file C or perl if not then ignore this hunk
index 9d233f99aeedc597f3f681a3ddbef2c99219b88e..792196e6896e6c2350e3dd86909e06a127a84950 100644 (file)
@@ -398,6 +398,13 @@ index 0000000..2234c87
         pm.add_line('common/main.c', '#undef CONFIG_CMD_WHICH')
         self.checkSingleMessage(pm, 'DEFINE_CONFIG_CMD', 'error')
 
+    def testBarredIncludeInHdr(self):
+        """Test for using a barred include in a header file"""
+        pm = PatchMaker()
+        #pm.add_line('include/myfile.h', '#include <common.h>')
+        pm.add_line('include/myfile.h', '#include <dm.h>')
+        self.checkSingleMessage(pm, 'BARRED_INCLUDE_IN_HDR', 'error')
+
 
 if __name__ == "__main__":
     unittest.main()