[PATCH 2/3] kbuild: detect missing header include guard

From: Masahiro Yamada
Date: Wed Sep 25 2019 - 03:10:42 EST


Our convention is to surround the whole of the header content with an
include guard. This avoids the same header being parsed over again
when it is included multiple times.

The header-test-y syntax allows the comprehensive sanity checks of
headers. This commit adds another check; if include guard is missing,
the header will fail to build due to redefinition of something.

More headers must be excluded from the test-coverage for now.

Signed-off-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>
Reviewed-by: Sam Ravnborg <sam@xxxxxxxxxxxx>
---

include/Kbuild | 26 ++++++++++++++++++++++++++
scripts/Makefile.build | 3 ++-
usr/include/Makefile | 3 +++
3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/include/Kbuild b/include/Kbuild
index ffba79483cc5..4c49b9ae4b4d 100644
--- a/include/Kbuild
+++ b/include/Kbuild
@@ -133,6 +133,7 @@ header-test- += linux/cyclades.h
header-test- += linux/dcookies.h
header-test- += linux/delayacct.h
header-test- += linux/delayed_call.h
+header-test- += linux/device_cgroup.h
header-test- += linux/device-mapper.h
header-test- += linux/devpts_fs.h
header-test- += linux/dio.h
@@ -146,12 +147,15 @@ header-test- += linux/dma/sprd-dma.h
header-test- += linux/dns_resolver.h
header-test- += linux/drbd_genl.h
header-test- += linux/drbd_genl_api.h
+header-test- += linux/dsa/lan9303.h
+header-test- += linux/dtlk.h
header-test- += linux/dw_apb_timer.h
header-test- += linux/dynamic_debug.h
header-test- += linux/dynamic_queue_limits.h
header-test- += linux/ecryptfs.h
header-test- += linux/edma.h
header-test- += linux/eeprom_93cx6.h
+header-test- += linux/eeprom_93xx46.h
header-test- += linux/efs_vh.h
header-test- += linux/elevator.h
header-test- += linux/elfcore-compat.h
@@ -169,6 +173,7 @@ header-test- += linux/firmware/trusted_foundations.h
header-test- += linux/firmware/xlnx-zynqmp.h
header-test- += linux/fixp-arith.h
header-test- += linux/flat.h
+header-test- += linux/fs_pin.h
header-test- += linux/fs_types.h
header-test- += linux/fs_uart_pd.h
header-test- += linux/fsi-occ.h
@@ -189,6 +194,7 @@ header-test- += linux/gpio/aspeed.h
header-test- += linux/gpio/gpio-reg.h
header-test- += linux/hid-debug.h
header-test- += linux/hiddev.h
+header-test- += linux/hil_mlc.h
header-test- += linux/hippidevice.h
header-test- += linux/hmm.h
header-test- += linux/hp_sdc.h
@@ -237,6 +243,7 @@ header-test- += linux/input/bu21013.h
header-test- += linux/input/cma3000.h
header-test- += linux/input/kxtj9.h
header-test- += linux/input/lm8333.h
+header-test- += linux/input/navpoint.h
header-test- += linux/input/sparse-keymap.h
header-test- += linux/input/touchscreen.h
header-test- += linux/input/tps6507x-ts.h
@@ -327,6 +334,7 @@ header-test- += linux/mfd/lpc_ich.h
header-test- += linux/mfd/max77693.h
header-test- += linux/mfd/max8998-private.h
header-test- += linux/mfd/menelaus.h
+header-test- += linux/mfd/motorola-cpcap.h
header-test- += linux/mfd/mt6397/core.h
header-test- += linux/mfd/palmas.h
header-test- += linux/mfd/pcf50633/backlight.h
@@ -448,6 +456,7 @@ header-test- += linux/platform_data/ads7828.h
header-test- += linux/platform_data/apds990x.h
header-test- += linux/platform_data/arm-ux500-pm.h
header-test- += linux/platform_data/asoc-s3c.h
+header-test- += linux/platform_data/asoc-s3c24xx_simtec.h
header-test- += linux/platform_data/at91_adc.h
header-test- += linux/platform_data/ata-pxa.h
header-test- += linux/platform_data/atmel.h
@@ -479,14 +488,17 @@ header-test- += linux/platform_data/i2c-imx.h
header-test- += linux/platform_data/i2c-mux-reg.h
header-test- += linux/platform_data/i2c-ocores.h
header-test- += linux/platform_data/i2c-xiic.h
+header-test- += linux/platform_data/ina2xx.h
header-test- += linux/platform_data/intel-spi.h
header-test- += linux/platform_data/invensense_mpu6050.h
+header-test- += linux/platform_data/iommu-omap.h
header-test- += linux/platform_data/irda-pxaficp.h
header-test- += linux/platform_data/irda-sa11x0.h
header-test- += linux/platform_data/itco_wdt.h
header-test- += linux/platform_data/jz4740/jz4740_nand.h
header-test- += linux/platform_data/keyboard-pxa930_rotary.h
header-test- += linux/platform_data/keypad-omap.h
+header-test- += linux/platform_data/leds-lm355x.h
header-test- += linux/platform_data/leds-lp55xx.h
header-test- += linux/platform_data/leds-omap.h
header-test- += linux/platform_data/lp855x.h
@@ -497,6 +509,7 @@ header-test- += linux/platform_data/max732x.h
header-test- += linux/platform_data/mcs.h
header-test- += linux/platform_data/mdio-bcm-unimac.h
header-test- += linux/platform_data/mdio-gpio.h
+header-test- += linux/platform_data/media/mmp-camera.h
header-test- += linux/platform_data/media/si4713.h
header-test- += linux/platform_data/mlxreg.h
header-test- += linux/platform_data/mmc-omap.h
@@ -584,6 +597,7 @@ header-test- += linux/qed/storage_common.h
header-test- += linux/qed/tcp_common.h
header-test- += linux/qnx6_fs.h
header-test- += linux/quicklist.h
+header-test- += linux/raid_class.h
header-test- += linux/ramfs.h
header-test- += linux/range.h
header-test- += linux/rcu_node_tree.h
@@ -613,6 +627,7 @@ header-test- += linux/sched/deadline.h
header-test- += linux/sched/smt.h
header-test- += linux/sched/sysctl.h
header-test- += linux/sched_clock.h
+header-test- += linux/scmi_protocol.h
header-test- += linux/scpi_protocol.h
header-test- += linux/scx200_gpio.h
header-test- += linux/seccomp.h
@@ -621,6 +636,7 @@ header-test- += linux/seg6_iptunnel.h
header-test- += linux/selection.h
header-test- += linux/set_memory.h
header-test- += linux/shrinker.h
+header-test- += linux/siox.h
header-test- += linux/sirfsoc_dma.h
header-test- += linux/skb_array.h
header-test- += linux/slab_def.h
@@ -660,6 +676,7 @@ header-test- += linux/spi/sh_msiof.h
header-test- += linux/spi/spi-fsl-dspi.h
header-test- += linux/spi/spi_bitbang.h
header-test- += linux/spi/spi_gpio.h
+header-test- += linux/spi/tle62x0.h
header-test- += linux/spi/xilinx_spi.h
header-test- += linux/spinlock_api_smp.h
header-test- += linux/spinlock_api_up.h
@@ -677,6 +694,7 @@ header-test- += linux/stackdepot.h
header-test- += linux/stmp3xxx_rtc_wdt.h
header-test- += linux/string_helpers.h
header-test- += linux/sungem_phy.h
+header-test- += linux/sunrpc/gss_krb5.h
header-test- += linux/sunrpc/msg_prot.h
header-test- += linux/sunrpc/rpc_pipe_fs.h
header-test- += linux/sunrpc/xprtmultipath.h
@@ -741,6 +759,7 @@ header-test- += linux/vmw_vmci_api.h
header-test- += linux/vmw_vmci_defs.h
header-test- += linux/vringh.h
header-test- += linux/vt_buffer.h
+header-test- += linux/yam.h
header-test- += linux/zorro.h
header-test- += linux/zpool.h
header-test- += math-emu/double.h
@@ -930,6 +949,7 @@ header-test- += soc/tegra/bpmp-abi.h
header-test- += soc/tegra/common.h
header-test- += soc/tegra/flowctrl.h
header-test- += soc/tegra/fuse.h
+header-test- += soc/tegra/ivc.h
header-test- += soc/tegra/mc.h
header-test- += sound/ac97/compat.h
header-test- += sound/aci.h
@@ -1008,6 +1028,7 @@ header-test- += sound/wm8996.h
header-test- += sound/wm9081.h
header-test- += sound/wm9090.h
header-test- += target/iscsi/iscsi_target_stat.h
+header-test- += target/iscsi/iscsi_transport.h
header-test- += trace/bpf_probe.h
header-test- += trace/events/9p.h
header-test- += trace/events/afs.h
@@ -1058,8 +1079,10 @@ header-test- += trace/perf.h
header-test- += trace/trace_events.h
header-test- += uapi/drm/vmwgfx_drm.h
header-test- += uapi/linux/a.out.h
+header-test- += uapi/linux/chio.h
header-test- += uapi/linux/coda.h
header-test- += uapi/linux/coda_psdev.h
+header-test- += uapi/linux/coff.h
header-test- += uapi/linux/errqueue.h
header-test- += uapi/linux/eventpoll.h
header-test- += uapi/linux/hdlc/ioctl.h
@@ -1071,6 +1094,7 @@ header-test- += uapi/linux/mic_common.h
header-test- += uapi/linux/mman.h
header-test- += uapi/linux/nilfs2_ondisk.h
header-test- += uapi/linux/patchkey.h
+header-test- += uapi/linux/pg.h
header-test- += uapi/linux/ptrace.h
header-test- += uapi/linux/scc.h
header-test- += uapi/linux/seg6_iptunnel.h
@@ -1091,12 +1115,14 @@ header-test- += vdso/vsyscall.h
header-test- += video/broadsheetfb.h
header-test- += video/cvisionppc.h
header-test- += video/gbe.h
+header-test- += video/ili9320.h
header-test- += video/kyro.h
header-test- += video/maxinefb.h
header-test- += video/metronomefb.h
header-test- += video/neomagic.h
header-test- += video/of_display_timing.h
header-test- += video/omapvrfb.h
+header-test- += video/platform_lcd.h
header-test- += video/s1d13xxxfb.h
header-test- += video/sstfb.h
header-test- += video/tgafb.h
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index f72aba64d611..052cb418eb5f 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -286,8 +286,9 @@ $(obj)/%.lst: $(src)/%.c FORCE
# header test (header-test-y, header-test-m target)
# ---------------------------------------------------------------------------

+# include the header twice to catch missing header include guard.
quiet_cmd_cc_s_h = CC $@
- cmd_cc_s_h = $(CC) $(c_flags) -S -o $@ -x c /dev/null -include $<
+ cmd_cc_s_h = $(CC) $(c_flags) -S -o $@ -x c /dev/null -include $< -include $<

$(obj)/%.h.s: $(src)/%.h FORCE
$(call if_changed_dep,cc_s_h)
diff --git a/usr/include/Makefile b/usr/include/Makefile
index 4ef9946775ee..944eb8097702 100644
--- a/usr/include/Makefile
+++ b/usr/include/Makefile
@@ -28,8 +28,10 @@ header-test- += linux/android/binder.h
header-test- += linux/android/binderfs.h
header-test-$(CONFIG_CPU_BIG_ENDIAN) += linux/byteorder/big_endian.h
header-test-$(CONFIG_CPU_LITTLE_ENDIAN) += linux/byteorder/little_endian.h
+header-test- += linux/chio.h
header-test- += linux/coda.h
header-test- += linux/coda_psdev.h
+header-test- += linux/coff.h
header-test- += linux/elfcore.h
header-test- += linux/errqueue.h
header-test- += linux/fsmap.h
@@ -44,6 +46,7 @@ header-test- += linux/nfc.h
header-test- += linux/omap3isp.h
header-test- += linux/omapfb.h
header-test- += linux/patchkey.h
+header-test- += linux/pg.h
header-test- += linux/phonet.h
header-test- += linux/reiserfs_xattr.h
header-test- += linux/scc.h
--
2.17.1