diff mbox series

[RFC,v5,1/3] tests: New make target check-source

Message ID 20190711122827.18970-2-armbru@redhat.com
State New
Headers show
Series Baby steps towards saner headers | expand

Commit Message

Markus Armbruster July 11, 2019, 12:28 p.m. UTC
Make target check-source is for checking the source code itself.  For
now, there's just one such check, make target check-headers.  It
checks basic header sanity: for each header "FOO.h", test whether

	#include "qemu/osdep.h"
	#include "FOO.h"
	#include "FOO.h"

compiles.

The test works only in a git tree, with git installed.  It is skipped
unless $(SRC_PATH)/.git exists.

Third-party headers we don't intend to clean up are excluded from this
test.  So are a few "funny" headers.  See make variable
excluded-headers.

Numerous headers don't pass this test, by design or by accident.  To
keep things more manageable, exclude all headers outside include/ for
now.

Headers known to fail the test are marked with

    /* FIXME Does not pass make check-headers, yet! */

Headers known to work only in certain configurations are marked like

    /* FIXME Does not pass make check-headers without CONFIG_WIN32, yet! */

I tried to find and mark all of them by testing various
configurations.  Still, "make check" might fail for configurations I
didn't test.

Known issue: some of these don't actually need fixing; they're *meant*
to work only in certain configurations.  We'll want to invent a
suitable marker that doesn't claim FIXME.

Some headers may only be included into target-dependent code: they use
identifiers poisoned by exec/poison.h, or include cpu.h.  These
headers are marked with a comment

    /* NOTE: May only be included into target-dependent code */

The test treats them specially.

Known issue: some of these are intended for specific targets.  The
test should skip them for other targets, but doesn't.  They're marked
FIXME instead, which is wrong.

New make target check-bad-headers runs the test for headers expected
to fail it.  This helps with examining the failures.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 Makefile                                  |  4 +-
 Makefile.target                           | 20 +++++
 include/block/raw-aio.h                   |  3 +
 include/block/write-threshold.h           |  3 +
 include/chardev/char-win.h                |  3 +
 include/chardev/spice.h                   |  2 +
 include/disas/disas.h                     |  2 +
 include/exec/cpu-all.h                    |  4 +
 include/exec/cpu-defs.h                   |  3 +
 include/exec/cpu_ldst.h                   |  4 +
 include/exec/cpu_ldst_template.h          |  3 +
 include/exec/cpu_ldst_useronly_template.h |  3 +
 include/exec/cputlb.h                     |  3 +
 include/exec/exec-all.h                   |  3 +
 include/exec/gen-icount.h                 |  2 +
 include/exec/helper-gen.h                 |  2 +
 include/exec/helper-proto.h               |  2 +
 include/exec/helper-tcg.h                 |  2 +
 include/exec/ioport.h                     |  2 +
 include/exec/memory-internal.h            |  2 +
 include/exec/memory_ldst.inc.h            |  2 +
 include/exec/memory_ldst_cached.inc.h     |  2 +
 include/exec/memory_ldst_phys.inc.h       |  2 +
 include/exec/ram_addr.h                   |  3 +
 include/exec/softmmu-semi.h               |  3 +
 include/exec/tb-hash.h                    |  3 +
 include/exec/tb-lookup.h                  |  3 +
 include/exec/translator.h                 |  3 +
 include/exec/user/abitypes.h              |  2 +
 include/exec/user/thunk.h                 |  4 +
 include/fpu/softfloat-macros.h            |  2 +
 include/fpu/softfloat.h                   |  2 +
 include/hw/acpi/pci.h                     |  3 +
 include/hw/acpi/tco.h                     |  3 +
 include/hw/adc/stm32f2xx_adc.h            |  2 +
 include/hw/arm/allwinner-a10.h            |  2 +
 include/hw/arm/armsse.h                   |  3 +
 include/hw/arm/armv7m.h                   |  3 +
 include/hw/arm/aspeed_soc.h               |  2 +
 include/hw/arm/bcm2835_peripherals.h      |  2 +
 include/hw/arm/bcm2836.h                  |  2 +
 include/hw/arm/digic.h                    |  3 +
 include/hw/arm/exynos4210.h               |  3 +-
 include/hw/arm/fsl-imx25.h                |  2 +
 include/hw/arm/fsl-imx31.h                |  2 +
 include/hw/arm/fsl-imx6.h                 |  3 +
 include/hw/arm/fsl-imx6ul.h               |  3 +
 include/hw/arm/fsl-imx7.h                 |  3 +
 include/hw/arm/msf2-soc.h                 |  3 +
 include/hw/arm/nrf51_soc.h                |  3 +
 include/hw/arm/omap.h                     |  2 +
 include/hw/arm/sharpsl.h                  |  3 +
 include/hw/arm/stm32f205_soc.h            |  3 +
 include/hw/arm/xlnx-zynqmp.h              |  2 +
 include/hw/block/fdc.h                    |  2 +
 include/hw/block/flash.h                  |  2 +
 include/hw/char/escc.h                    |  2 +
 include/hw/char/xilinx_uartlite.h         |  2 +
 include/hw/core/generic-loader.h          |  2 +
 include/hw/cris/etraxfs.h                 |  2 +
 include/hw/cris/etraxfs_dma.h             |  2 +
 include/hw/display/bcm2835_fb.h           |  2 +
 include/hw/display/i2c-ddc.h              |  2 +
 include/hw/display/xlnx_dp.h              |  2 +
 include/hw/dma/xlnx_dpdma.h               |  2 +
 include/hw/elf_ops.h                      |  2 +
 include/hw/empty_slot.h                   |  2 +
 include/hw/gpio/bcm2835_gpio.h            |  2 +
 include/hw/hyperv/hyperv.h                |  2 +
 include/hw/i2c/aspeed_i2c.h               |  3 +
 include/hw/i386/apic_internal.h           |  3 +
 include/hw/i386/ioapic_internal.h         |  2 +
 include/hw/input/hid.h                    |  2 +
 include/hw/input/tsc2xxx.h                |  2 +
 include/hw/intc/allwinner-a10-pic.h       |  2 +
 include/hw/intc/armv7m_nvic.h             |  3 +
 include/hw/intc/heathrow_pic.h            |  2 +
 include/hw/intc/mips_gic.h                |  3 +
 include/hw/isa/vt82c686.h                 |  2 +
 include/hw/kvm/clock.h                    |  2 +
 include/hw/mips/bios.h                    |  2 +
 include/hw/mips/cps.h                     |  3 +
 include/hw/mips/cpudevs.h                 |  2 +
 include/hw/misc/bcm2835_property.h        |  2 +
 include/hw/misc/macio/cuda.h              |  2 +
 include/hw/misc/macio/gpio.h              |  2 +
 include/hw/misc/macio/macio.h             |  2 +
 include/hw/misc/macio/pmu.h               |  2 +
 include/hw/misc/mips_cmgcr.h              |  2 +
 include/hw/misc/mips_cpc.h                |  2 +
 include/hw/misc/pvpanic.h                 |  3 +
 include/hw/net/allwinner_emac.h           |  2 +
 include/hw/net/lance.h                    |  2 +
 include/hw/nvram/chrp_nvram.h             |  2 +
 include/hw/pci-host/sabre.h               |  2 +
 include/hw/pci-host/spapr.h               |  3 +
 include/hw/pci-host/uninorth.h            |  2 +
 include/hw/pci/pcie_aer.h                 |  2 +
 include/hw/ppc/fdt.h                      |  2 +
 include/hw/ppc/pnv.h                      |  2 +
 include/hw/ppc/pnv_core.h                 |  2 +
 include/hw/ppc/pnv_xscom.h                |  2 +
 include/hw/ppc/ppc.h                      |  2 +
 include/hw/ppc/ppc4xx.h                   |  2 +
 include/hw/ppc/spapr.h                    |  3 +
 include/hw/ppc/spapr_cpu_core.h           |  4 +
 include/hw/ppc/spapr_irq.h                |  2 +
 include/hw/ppc/spapr_ovec.h               |  2 +
 include/hw/ppc/spapr_vio.h                |  2 +
 include/hw/ppc/spapr_xive.h               |  2 +
 include/hw/ppc/xics_spapr.h               |  3 +
 include/hw/ppc/xive_regs.h                |  2 +
 include/hw/riscv/boot.h                   |  2 +
 include/hw/riscv/riscv_hart.h             |  2 +
 include/hw/riscv/riscv_htif.h             |  3 +
 include/hw/riscv/sifive_clint.h           |  2 +
 include/hw/riscv/sifive_e.h               |  2 +
 include/hw/riscv/sifive_plic.h            |  2 +
 include/hw/riscv/sifive_prci.h            |  2 +
 include/hw/riscv/sifive_test.h            |  2 +
 include/hw/riscv/sifive_u.h               |  2 +
 include/hw/riscv/sifive_uart.h            |  2 +
 include/hw/riscv/spike.h                  |  2 +
 include/hw/riscv/virt.h                   |  2 +
 include/hw/s390x/3270-ccw.h               |  3 +
 include/hw/s390x/ap-device.h              |  3 +
 include/hw/s390x/css-bridge.h             |  2 +
 include/hw/s390x/css.h                    |  3 +
 include/hw/s390x/s390-ccw.h               |  3 +
 include/hw/s390x/storage-attributes.h     |  3 +
 include/hw/s390x/tod.h                    |  2 +
 include/hw/s390x/vfio-ccw.h               |  3 +
 include/hw/semihosting/console.h          |  3 +
 include/hw/sh4/sh.h                       |  2 +
 include/hw/sh4/sh_intc.h                  |  2 +
 include/hw/sparc/sparc64.h                |  2 +
 include/hw/ssi/aspeed_smc.h               |  2 +
 include/hw/ssi/xilinx_spips.h             |  2 +
 include/hw/timer/allwinner-a10-pit.h      |  2 +
 include/hw/timer/i8254_internal.h         |  2 +
 include/hw/timer/m48t59.h                 |  2 +
 include/hw/timer/mc146818rtc.h            |  2 +
 include/hw/timer/mc146818rtc_regs.h       |  2 +
 include/hw/timer/sun4v-rtc.h              |  2 +
 include/hw/timer/xlnx-zynqmp-rtc.h        |  2 +
 include/hw/vfio/vfio-amd-xgbe.h           |  2 +
 include/hw/vfio/vfio-calxeda-xgmac.h      |  2 +
 include/hw/vfio/vfio-common.h             |  2 +
 include/hw/vfio/vfio-platform.h           |  2 +
 include/hw/virtio/virtio-access.h         |  3 +
 include/hw/virtio/virtio-gpu-bswap.h      |  2 +
 include/hw/virtio/virtio-gpu-pci.h        |  2 +
 include/hw/virtio/virtio-gpu-pixman.h     |  2 +
 include/hw/virtio/virtio-gpu.h            |  2 +
 include/hw/virtio/virtio-input.h          |  2 +
 include/hw/virtio/virtio-rng.h            |  2 +
 include/hw/watchdog/wdt_aspeed.h          |  2 +
 include/hw/xen/xen-backend.h              |  3 +
 include/hw/xen/xen-block.h                |  3 +
 include/hw/xen/xen-bus-helper.h           |  3 +
 include/hw/xen/xen-bus.h                  |  3 +
 include/hw/xen/xen-legacy-backend.h       |  3 +
 include/hw/xen/xen_common.h               |  3 +
 include/hw/xen/xen_pvdev.h                |  3 +
 include/libdecnumber/decNumberLocal.h     |  2 +
 include/migration/cpu.h                   |  4 +
 include/monitor/hmp-target.h              |  3 +
 include/qemu/atomic128.h                  |  2 +
 include/qemu/cpuid.h                      |  2 +
 include/qemu/futex.h                      |  2 +
 include/qemu/ratelimit.h                  |  2 +
 include/qemu/thread-win32.h               |  2 +
 include/qemu/xattr.h                      |  3 +
 include/sysemu/balloon.h                  |  2 +
 include/sysemu/cryptodev-vhost-user.h     |  3 +
 include/sysemu/dump.h                     |  2 +
 include/sysemu/hvf.h                      |  3 +
 include/sysemu/iothread.h                 |  2 +
 include/sysemu/kvm_int.h                  |  2 +
 include/sysemu/memory_mapping.h           |  2 +
 include/sysemu/os-posix.h                 |  2 +
 include/sysemu/os-win32.h                 |  2 +
 include/sysemu/xen-mapcache.h             |  2 +
 include/trace-tcg.h                       |  2 +
 include/ui/console.h                      |  2 +
 include/ui/egl-context.h                  |  3 +
 include/ui/egl-helpers.h                  |  2 +
 include/ui/gtk.h                          |  2 +
 include/ui/input.h                        |  2 +
 include/ui/pixel_ops.h                    |  2 +
 include/ui/qemu-pixman.h                  |  2 +
 include/ui/sdl2.h                         |  2 +
 include/ui/shader.h                       |  2 +
 include/ui/spice-display.h                |  2 +
 tests/Makefile.include                    | 33 +++++++-
 tests/check-headers.mak                   | 92 +++++++++++++++++++++++
 tests/header-test-template.c              | 23 ++++++
 197 files changed, 618 insertions(+), 4 deletions(-)
 create mode 100644 tests/check-headers.mak
 create mode 100644 tests/header-test-template.c

Comments

Richard Henderson July 11, 2019, 4:56 p.m. UTC | #1
On 7/11/19 2:28 PM, Markus Armbruster wrote:
>  include/exec/cpu_ldst_template.h          |  3 +
>  include/exec/cpu_ldst_useronly_template.h |  3 +
>  include/exec/cputlb.h                     |  3 +
>  include/exec/exec-all.h                   |  3 +
>  include/exec/gen-icount.h                 |  2 +
>  include/exec/helper-gen.h                 |  2 +
>  include/exec/helper-proto.h               |  2 +
>  include/exec/helper-tcg.h                 |  2 +
>  include/exec/ioport.h                     |  2 +
>  include/exec/memory-internal.h            |  2 +
>  include/exec/memory_ldst.inc.h            |  2 +
>  include/exec/memory_ldst_cached.inc.h     |  2 +
>  include/exec/memory_ldst_phys.inc.h       |  2 +

The pattern used should not match all *.h, but exclude *_template.h (older
naming style) and *.inc.h (newer naming style; we really should finish the
conversion).

These headers are not standalone, and will be included multiple times by one of
the other headers.


r~
Markus Armbruster July 12, 2019, 11:13 a.m. UTC | #2
Richard Henderson <richard.henderson@linaro.org> writes:

> On 7/11/19 2:28 PM, Markus Armbruster wrote:
>>  include/exec/cpu_ldst_template.h          |  3 +
>>  include/exec/cpu_ldst_useronly_template.h |  3 +
>>  include/exec/cputlb.h                     |  3 +
>>  include/exec/exec-all.h                   |  3 +
>>  include/exec/gen-icount.h                 |  2 +
>>  include/exec/helper-gen.h                 |  2 +
>>  include/exec/helper-proto.h               |  2 +
>>  include/exec/helper-tcg.h                 |  2 +
>>  include/exec/ioport.h                     |  2 +
>>  include/exec/memory-internal.h            |  2 +
>>  include/exec/memory_ldst.inc.h            |  2 +
>>  include/exec/memory_ldst_cached.inc.h     |  2 +
>>  include/exec/memory_ldst_phys.inc.h       |  2 +
>
> The pattern used should not match all *.h, but exclude *_template.h (older
> naming style) and *.inc.h (newer naming style; we really should finish the
> conversion).
>
> These headers are not standalone, and will be included multiple times by one of
> the other headers.

Yes.

I excluded them the stupid way in this RFC, in part because I was unsure
about the naming convention for "special .h meant to be included
multiple times".  My cover letter should have mentioned this under
"Known issues".

For my series to shed the RFC tag, I need to eliminate the FIXMEs in
headers that aren't actually broken.  This includes the FIXMEs marking
"special .h meant to be included multiple times".

Perhaps I can finish the conversion to the .inc.h convention in v6.
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index c63de4e36c..f8e919bc1a 100644
--- a/Makefile
+++ b/Makefile
@@ -434,6 +434,8 @@  dummy := $(call unnest-vars,, \
                 audio-obj-m \
                 trace-obj-y)
 
+RECURSIVE_TARGETS := all clean install
+
 include $(SRC_PATH)/tests/Makefile.include
 
 all: $(DOCS) $(if $(BUILD_DOCS),sphinxdocs) $(TOOLS) $(HELPERS-y) recurse-all modules $(vhost-user-json-y)
@@ -454,7 +456,7 @@  config-host.h-timestamp: config-host.mak
 qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
 	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
 
-TARGET_DIRS_RULES := $(foreach t, all clean install, $(addsuffix /$(t), $(TARGET_DIRS)))
+TARGET_DIRS_RULES:=$(foreach t, $(RECURSIVE_TARGETS), $(addsuffix /$(t), $(TARGET_DIRS)))
 
 SOFTMMU_ALL_RULES=$(filter %-softmmu/all, $(TARGET_DIRS_RULES))
 $(SOFTMMU_ALL_RULES): $(authz-obj-y)
diff --git a/Makefile.target b/Makefile.target
index 85216cace8..25620d913d 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -41,6 +41,7 @@  STPFILES=
 
 # Makefile Tests
 include $(SRC_PATH)/tests/tcg/Makefile.include
+include $(SRC_PATH)/tests/check-headers.mak
 
 config-target.h: config-target.h-timestamp
 config-target.h-timestamp: config-target.mak
@@ -220,6 +221,23 @@  hmp-commands.h: $(SRC_PATH)/hmp-commands.hx $(SRC_PATH)/scripts/hxtool
 hmp-commands-info.h: $(SRC_PATH)/hmp-commands-info.hx $(SRC_PATH)/scripts/hxtool
 	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$(TARGET_DIR)$@")
 
+.PHONY: check-headers
+ifeq ($(wildcard $(SRC_PATH)/.git),)
+check-headers check-bad-headers:
+	@echo "  SKIP  $@ (requires a git tree)"
+else
+check-headers: CFLAGS += -g0	# save disk space
+check-headers: $(check-target-header-tests:.c=.o)
+
+# Expected to fail:
+check-bad-headers: $(check-bad-target-header-tests:.c=.o)
+
+.SECONDARY: $(check-target-header-tests) $(check-bad-target-header-tests)
+$(check-target-header-tests) $(check-bad-target-header-tests): tests/header-test-template.c
+	@mkdir -p $(dir $@)
+	@sed 's,@header@,$(subst tests/headers-tgt/,,$(@:.c=.h)),' <$< >$@
+endif
+
 clean: clean-target
 	rm -f *.a *~ $(PROGS)
 	rm -f $(shell find . -name '*.[od]')
@@ -258,3 +276,5 @@  Makefile: $(generated-files-y)
 
 .PHONY: coverage-report
 coverage-report: $(CURDIR)/reports/coverage/coverage-report.html
+
+-include $(check-target-header-tests:.c=.d) $(check-bad-target-header-tests:.c=.d)
diff --git a/include/block/raw-aio.h b/include/block/raw-aio.h
index 0cb7cc74a2..3e7692eb64 100644
--- a/include/block/raw-aio.h
+++ b/include/block/raw-aio.h
@@ -12,6 +12,9 @@ 
  * Contributions after 2012-01-13 are licensed under the terms of the
  * GNU GPL, version 2 or (at your option) any later version.
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_RAW_AIO_H
 #define QEMU_RAW_AIO_H
 
diff --git a/include/block/write-threshold.h b/include/block/write-threshold.h
index 80d8aab5d0..7b5adb2e6e 100644
--- a/include/block/write-threshold.h
+++ b/include/block/write-threshold.h
@@ -9,6 +9,9 @@ 
  * This work is licensed under the terms of the GNU LGPL, version 2 or later.
  * See the COPYING.LIB file in the top-level directory.
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef BLOCK_WRITE_THRESHOLD_H
 #define BLOCK_WRITE_THRESHOLD_H
 
diff --git a/include/chardev/char-win.h b/include/chardev/char-win.h
index fa59e9e423..423fa8dcd2 100644
--- a/include/chardev/char-win.h
+++ b/include/chardev/char-win.h
@@ -21,6 +21,9 @@ 
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
+
+/* FIXME Does not pass make check-headers without CONFIG_WIN32, yet! */
+
 #ifndef CHAR_WIN_H
 #define CHAR_WIN_H
 
diff --git a/include/chardev/spice.h b/include/chardev/spice.h
index 1f7339b649..2bc2a992b5 100644
--- a/include/chardev/spice.h
+++ b/include/chardev/spice.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers without CONFIG_SPICE, yet! */
+
 #ifndef CHARDEV_SPICE_H
 #define CHARDEV_SPICE_H
 
diff --git a/include/disas/disas.h b/include/disas/disas.h
index 15da511f49..f60bbc752c 100644
--- a/include/disas/disas.h
+++ b/include/disas/disas.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_DISAS_H
 #define QEMU_DISAS_H
 
diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h
index 536ea58f81..f0f900b9e1 100644
--- a/include/exec/cpu-all.h
+++ b/include/exec/cpu-all.h
@@ -16,6 +16,10 @@ 
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
+
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef CPU_ALL_H
 #define CPU_ALL_H
 
diff --git a/include/exec/cpu-defs.h b/include/exec/cpu-defs.h
index 9bc713a70b..4710900f6d 100644
--- a/include/exec/cpu-defs.h
+++ b/include/exec/cpu-defs.h
@@ -16,6 +16,9 @@ 
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
+
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef CPU_DEFS_H
 #define CPU_DEFS_H
 
diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h
index a08b11bd2c..83331b4a64 100644
--- a/include/exec/cpu_ldst.h
+++ b/include/exec/cpu_ldst.h
@@ -44,6 +44,10 @@ 
  * (for softmmu configs)  a target-specific MMU mode suffix as defined
  * in target cpu.h.
  */
+
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef CPU_LDST_H
 #define CPU_LDST_H
 
diff --git a/include/exec/cpu_ldst_template.h b/include/exec/cpu_ldst_template.h
index af7e0b49f2..6ab493f833 100644
--- a/include/exec/cpu_ldst_template.h
+++ b/include/exec/cpu_ldst_template.h
@@ -24,6 +24,9 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #if !defined(SOFTMMU_CODE_ACCESS)
 #include "trace-root.h"
 #endif
diff --git a/include/exec/cpu_ldst_useronly_template.h b/include/exec/cpu_ldst_useronly_template.h
index bc45e2b8d4..0de722ab43 100644
--- a/include/exec/cpu_ldst_useronly_template.h
+++ b/include/exec/cpu_ldst_useronly_template.h
@@ -23,6 +23,9 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #if !defined(CODE_ACCESS)
 #include "trace-root.h"
 #endif
diff --git a/include/exec/cputlb.h b/include/exec/cputlb.h
index 5373188be3..361df6dee0 100644
--- a/include/exec/cputlb.h
+++ b/include/exec/cputlb.h
@@ -16,6 +16,9 @@ 
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef CPUTLB_H
 #define CPUTLB_H
 
diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
index 16034ee651..547f539acc 100644
--- a/include/exec/exec-all.h
+++ b/include/exec/exec-all.h
@@ -17,6 +17,9 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef EXEC_ALL_H
 #define EXEC_ALL_H
 
diff --git a/include/exec/gen-icount.h b/include/exec/gen-icount.h
index f7669b6841..39b2a72551 100644
--- a/include/exec/gen-icount.h
+++ b/include/exec/gen-icount.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef GEN_ICOUNT_H
 #define GEN_ICOUNT_H
 
diff --git a/include/exec/helper-gen.h b/include/exec/helper-gen.h
index 22381a1708..63e4856b43 100644
--- a/include/exec/helper-gen.h
+++ b/include/exec/helper-gen.h
@@ -1,6 +1,8 @@ 
 /* Helper file for declaring TCG helper functions.
    This one expands generation functions for tcg opcodes.  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HELPER_GEN_H
 #define HELPER_GEN_H
 
diff --git a/include/exec/helper-proto.h b/include/exec/helper-proto.h
index 74943edb13..e5a1b9403d 100644
--- a/include/exec/helper-proto.h
+++ b/include/exec/helper-proto.h
@@ -1,6 +1,8 @@ 
 /* Helper file for declaring TCG helper functions.
    This one expands prototypes for the helper functions.  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HELPER_PROTO_H
 #define HELPER_PROTO_H
 
diff --git a/include/exec/helper-tcg.h b/include/exec/helper-tcg.h
index 268e0f804b..51e4758082 100644
--- a/include/exec/helper-tcg.h
+++ b/include/exec/helper-tcg.h
@@ -1,6 +1,8 @@ 
 /* Helper file for declaring TCG helper functions.
    This one defines data structures private to tcg.c.  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HELPER_TCG_H
 #define HELPER_TCG_H
 
diff --git a/include/exec/ioport.h b/include/exec/ioport.h
index a298b89ce1..96dc6f5662 100644
--- a/include/exec/ioport.h
+++ b/include/exec/ioport.h
@@ -21,6 +21,8 @@ 
  * IO ports API
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef IOPORT_H
 #define IOPORT_H
 
diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h
index d1a9dd1ec8..d16ec2d36d 100644
--- a/include/exec/memory-internal.h
+++ b/include/exec/memory-internal.h
@@ -17,6 +17,8 @@ 
  * internals and the TCG TLB code. Do not include it from elsewhere.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MEMORY_INTERNAL_H
 #define MEMORY_INTERNAL_H
 
diff --git a/include/exec/memory_ldst.inc.h b/include/exec/memory_ldst.inc.h
index 272c20f02e..7846e99b6d 100644
--- a/include/exec/memory_ldst.inc.h
+++ b/include/exec/memory_ldst.inc.h
@@ -19,6 +19,8 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifdef TARGET_ENDIANNESS
 extern uint32_t glue(address_space_lduw, SUFFIX)(ARG1_DECL,
     hwaddr addr, MemTxAttrs attrs, MemTxResult *result);
diff --git a/include/exec/memory_ldst_cached.inc.h b/include/exec/memory_ldst_cached.inc.h
index fd4bbb40e7..9725005455 100644
--- a/include/exec/memory_ldst_cached.inc.h
+++ b/include/exec/memory_ldst_cached.inc.h
@@ -17,6 +17,8 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #define ADDRESS_SPACE_LD_CACHED(size) \
     glue(glue(address_space_ld, size), glue(ENDIANNESS, _cached))
 #define ADDRESS_SPACE_LD_CACHED_SLOW(size) \
diff --git a/include/exec/memory_ldst_phys.inc.h b/include/exec/memory_ldst_phys.inc.h
index 91f72973cb..8cd1828f8c 100644
--- a/include/exec/memory_ldst_phys.inc.h
+++ b/include/exec/memory_ldst_phys.inc.h
@@ -19,6 +19,8 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifdef TARGET_ENDIANNESS
 static inline uint32_t glue(ldl_phys, SUFFIX)(ARG1_DECL, hwaddr addr)
 {
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
index f96777bb99..507050a2e7 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -16,6 +16,9 @@ 
  * The functions declared here will be removed soon.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef RAM_ADDR_H
 #define RAM_ADDR_H
 
diff --git a/include/exec/softmmu-semi.h b/include/exec/softmmu-semi.h
index 970837992e..551c013652 100644
--- a/include/exec/softmmu-semi.h
+++ b/include/exec/softmmu-semi.h
@@ -7,6 +7,9 @@ 
  * This code is licensed under the GPL
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef SOFTMMU_SEMI_H
 #define SOFTMMU_SEMI_H
 
diff --git a/include/exec/tb-hash.h b/include/exec/tb-hash.h
index 4f3a37d927..79e53fb73d 100644
--- a/include/exec/tb-hash.h
+++ b/include/exec/tb-hash.h
@@ -17,6 +17,9 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef EXEC_TB_HASH_H
 #define EXEC_TB_HASH_H
 
diff --git a/include/exec/tb-lookup.h b/include/exec/tb-lookup.h
index 26921b6daf..93d6ebd148 100644
--- a/include/exec/tb-lookup.h
+++ b/include/exec/tb-lookup.h
@@ -4,6 +4,9 @@ 
  * License: GNU GPL, version 2 or later.
  *   See the COPYING file in the top-level directory.
  */
+
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef EXEC_TB_LOOKUP_H
 #define EXEC_TB_LOOKUP_H
 
diff --git a/include/exec/translator.h b/include/exec/translator.h
index 180c51d509..301c740c4e 100644
--- a/include/exec/translator.h
+++ b/include/exec/translator.h
@@ -7,6 +7,9 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef EXEC__TRANSLATOR_H
 #define EXEC__TRANSLATOR_H
 
diff --git a/include/exec/user/abitypes.h b/include/exec/user/abitypes.h
index 743b8bb9ea..626840d9c2 100644
--- a/include/exec/user/abitypes.h
+++ b/include/exec/user/abitypes.h
@@ -1,3 +1,5 @@ 
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef EXEC_USER_ABITYPES_H
 #define EXEC_USER_ABITYPES_H
 
diff --git a/include/exec/user/thunk.h b/include/exec/user/thunk.h
index 8d3af5a3be..933fd77436 100644
--- a/include/exec/user/thunk.h
+++ b/include/exec/user/thunk.h
@@ -16,6 +16,10 @@ 
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
+
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef THUNK_H
 #define THUNK_H
 
diff --git a/include/fpu/softfloat-macros.h b/include/fpu/softfloat-macros.h
index c55aa6d174..df33e55c70 100644
--- a/include/fpu/softfloat-macros.h
+++ b/include/fpu/softfloat-macros.h
@@ -79,6 +79,8 @@  this code that are retained.
  * version 2 or later. See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef FPU_SOFTFLOAT_MACROS_H
 #define FPU_SOFTFLOAT_MACROS_H
 
diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h
index 3ff3fa5224..303512c8a3 100644
--- a/include/fpu/softfloat.h
+++ b/include/fpu/softfloat.h
@@ -79,6 +79,8 @@  this code that are retained.
  * version 2 or later. See the COPYING file in the top-level directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef SOFTFLOAT_H
 #define SOFTFLOAT_H
 
diff --git a/include/hw/acpi/pci.h b/include/hw/acpi/pci.h
index 8bbd32cf45..45d8a38589 100644
--- a/include/hw/acpi/pci.h
+++ b/include/hw/acpi/pci.h
@@ -22,6 +22,9 @@ 
  * You should have received a copy of the GNU General Public License along
  * with this program; if not, see <http://www.gnu.org/licenses/>.
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ACPI_PCI_H
 #define HW_ACPI_PCI_H
 
diff --git a/include/hw/acpi/tco.h b/include/hw/acpi/tco.h
index d19dd59353..1f3c2d17fb 100644
--- a/include/hw/acpi/tco.h
+++ b/include/hw/acpi/tco.h
@@ -6,6 +6,9 @@ 
  * This work is licensed under the terms of the GNU GPL, version 2 or later.
  * See the COPYING file in the top-level directory.
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ACPI_TCO_H
 #define HW_ACPI_TCO_H
 
diff --git a/include/hw/adc/stm32f2xx_adc.h b/include/hw/adc/stm32f2xx_adc.h
index a72f734eb1..8e67c0f24d 100644
--- a/include/hw/adc/stm32f2xx_adc.h
+++ b/include/hw/adc/stm32f2xx_adc.h
@@ -22,6 +22,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_STM32F2XX_ADC_H
 #define HW_STM32F2XX_ADC_H
 
diff --git a/include/hw/arm/allwinner-a10.h b/include/hw/arm/allwinner-a10.h
index e99fe2ea2e..e8b8cc2ceb 100644
--- a/include/hw/arm/allwinner-a10.h
+++ b/include/hw/arm/allwinner-a10.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ARM_ALLWINNER_A10_H
 #define HW_ARM_ALLWINNER_A10_H
 
diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h
index 84080c2299..201893ccf5 100644
--- a/include/hw/arm/armsse.h
+++ b/include/hw/arm/armsse.h
@@ -86,6 +86,9 @@ 
  *  + named GPIO outputs mscexp_ns[0..15]
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef ARMSSE_H
 #define ARMSSE_H
 
diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h
index d2c74d3872..fdb777d875 100644
--- a/include/hw/arm/armv7m.h
+++ b/include/hw/arm/armv7m.h
@@ -7,6 +7,9 @@ 
  * This code is licensed under the GPL version 2 or later.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ARM_ARMV7M_H
 #define HW_ARM_ARMV7M_H
 
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
index cef605ad6b..c502ef0e65 100644
--- a/include/hw/arm/aspeed_soc.h
+++ b/include/hw/arm/aspeed_soc.h
@@ -9,6 +9,8 @@ 
  * the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef ASPEED_SOC_H
 #define ASPEED_SOC_H
 
diff --git a/include/hw/arm/bcm2835_peripherals.h b/include/hw/arm/bcm2835_peripherals.h
index 6b17f6a382..79bb258467 100644
--- a/include/hw/arm/bcm2835_peripherals.h
+++ b/include/hw/arm/bcm2835_peripherals.h
@@ -8,6 +8,8 @@ 
  * This code is licensed under the GNU GPLv2 and later.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef BCM2835_PERIPHERALS_H
 #define BCM2835_PERIPHERALS_H
 
diff --git a/include/hw/arm/bcm2836.h b/include/hw/arm/bcm2836.h
index a2cb8454de..aaa12f5cdb 100644
--- a/include/hw/arm/bcm2836.h
+++ b/include/hw/arm/bcm2836.h
@@ -8,6 +8,8 @@ 
  * This code is licensed under the GNU GPLv2 and later.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef BCM2836_H
 #define BCM2836_H
 
diff --git a/include/hw/arm/digic.h b/include/hw/arm/digic.h
index 63785baaa8..79f9278c64 100644
--- a/include/hw/arm/digic.h
+++ b/include/hw/arm/digic.h
@@ -15,6 +15,9 @@ 
  *
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ARM_DIGIC_H
 #define HW_ARM_DIGIC_H
 
diff --git a/include/hw/arm/exynos4210.h b/include/hw/arm/exynos4210.h
index aa137271c0..0d0898e613 100644
--- a/include/hw/arm/exynos4210.h
+++ b/include/hw/arm/exynos4210.h
@@ -19,9 +19,10 @@ 
  *
  *  You should have received a copy of the GNU General Public License along
  *  with this program; if not, see <http://www.gnu.org/licenses/>.
- *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef EXYNOS4210_H
 #define EXYNOS4210_H
 
diff --git a/include/hw/arm/fsl-imx25.h b/include/hw/arm/fsl-imx25.h
index 3280ab1fb0..61028eaa99 100644
--- a/include/hw/arm/fsl-imx25.h
+++ b/include/hw/arm/fsl-imx25.h
@@ -14,6 +14,8 @@ 
  * for more details.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef FSL_IMX25_H
 #define FSL_IMX25_H
 
diff --git a/include/hw/arm/fsl-imx31.h b/include/hw/arm/fsl-imx31.h
index e68a81efd7..bff92e79c0 100644
--- a/include/hw/arm/fsl-imx31.h
+++ b/include/hw/arm/fsl-imx31.h
@@ -14,6 +14,8 @@ 
  * for more details.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef FSL_IMX31_H
 #define FSL_IMX31_H
 
diff --git a/include/hw/arm/fsl-imx6.h b/include/hw/arm/fsl-imx6.h
index 1265a55c3b..230d44c793 100644
--- a/include/hw/arm/fsl-imx6.h
+++ b/include/hw/arm/fsl-imx6.h
@@ -14,6 +14,9 @@ 
  * for more details.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef FSL_IMX6_H
 #define FSL_IMX6_H
 
diff --git a/include/hw/arm/fsl-imx6ul.h b/include/hw/arm/fsl-imx6ul.h
index 9e94e98f8e..25e8540908 100644
--- a/include/hw/arm/fsl-imx6ul.h
+++ b/include/hw/arm/fsl-imx6ul.h
@@ -14,6 +14,9 @@ 
  * GNU General Public License for more details.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef FSL_IMX6UL_H
 #define FSL_IMX6UL_H
 
diff --git a/include/hw/arm/fsl-imx7.h b/include/hw/arm/fsl-imx7.h
index 8003d45d1e..e32873ca73 100644
--- a/include/hw/arm/fsl-imx7.h
+++ b/include/hw/arm/fsl-imx7.h
@@ -16,6 +16,9 @@ 
  * GNU General Public License for more details.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef FSL_IMX7_H
 #define FSL_IMX7_H
 
diff --git a/include/hw/arm/msf2-soc.h b/include/hw/arm/msf2-soc.h
index 3cfe5c76ee..3a209e48b8 100644
--- a/include/hw/arm/msf2-soc.h
+++ b/include/hw/arm/msf2-soc.h
@@ -22,6 +22,9 @@ 
  * THE SOFTWARE.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ARM_MSF2_SOC_H
 #define HW_ARM_MSF2_SOC_H
 
diff --git a/include/hw/arm/nrf51_soc.h b/include/hw/arm/nrf51_soc.h
index 0cb78aafea..b5a3da0bdc 100644
--- a/include/hw/arm/nrf51_soc.h
+++ b/include/hw/arm/nrf51_soc.h
@@ -7,6 +7,9 @@ 
  * the COPYING file in the top-level directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef NRF51_SOC_H
 #define NRF51_SOC_H
 
diff --git a/include/hw/arm/omap.h b/include/hw/arm/omap.h
index d21e418242..f28f803860 100644
--- a/include/hw/arm/omap.h
+++ b/include/hw/arm/omap.h
@@ -17,6 +17,8 @@ 
  * with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_ARM_OMAP_H
 #define HW_ARM_OMAP_H
 
diff --git a/include/hw/arm/sharpsl.h b/include/hw/arm/sharpsl.h
index 5bf6db1fa2..dc456653e1 100644
--- a/include/hw/arm/sharpsl.h
+++ b/include/hw/arm/sharpsl.h
@@ -3,6 +3,9 @@ 
  *
  * This file is licensed under the GNU GPL.
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_SHARPSL_H
 #define QEMU_SHARPSL_H
 
diff --git a/include/hw/arm/stm32f205_soc.h b/include/hw/arm/stm32f205_soc.h
index 922a733f88..4558c64823 100644
--- a/include/hw/arm/stm32f205_soc.h
+++ b/include/hw/arm/stm32f205_soc.h
@@ -22,6 +22,9 @@ 
  * THE SOFTWARE.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ARM_STM32F205_SOC_H
 #define HW_ARM_STM32F205_SOC_H
 
diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
index 35804ea80a..8c4a3a2815 100644
--- a/include/hw/arm/xlnx-zynqmp.h
+++ b/include/hw/arm/xlnx-zynqmp.h
@@ -15,6 +15,8 @@ 
  * for more details.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef XLNX_ZYNQMP_H
 #define XLNX_ZYNQMP_H
 
diff --git a/include/hw/block/fdc.h b/include/hw/block/fdc.h
index 8cece84326..d43a2fbd66 100644
--- a/include/hw/block/fdc.h
+++ b/include/hw/block/fdc.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_FDC_H
 #define HW_FDC_H
 
diff --git a/include/hw/block/flash.h b/include/hw/block/flash.h
index 1acaf7de80..15ce2b3f14 100644
--- a/include/hw/block/flash.h
+++ b/include/hw/block/flash.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_FLASH_H
 #define HW_FLASH_H
 
diff --git a/include/hw/char/escc.h b/include/hw/char/escc.h
index 42aca83611..71b95dd152 100644
--- a/include/hw/char/escc.h
+++ b/include/hw/char/escc.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ESCC_H
 #define HW_ESCC_H
 
diff --git a/include/hw/char/xilinx_uartlite.h b/include/hw/char/xilinx_uartlite.h
index 634086b657..a003b5977f 100644
--- a/include/hw/char/xilinx_uartlite.h
+++ b/include/hw/char/xilinx_uartlite.h
@@ -12,6 +12,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef XILINX_UARTLITE_H
 #define XILINX_UARTLITE_H
 
diff --git a/include/hw/core/generic-loader.h b/include/hw/core/generic-loader.h
index dd27c42ab0..3827144a5f 100644
--- a/include/hw/core/generic-loader.h
+++ b/include/hw/core/generic-loader.h
@@ -15,6 +15,8 @@ 
  * for more details.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef GENERIC_LOADER_H
 #define GENERIC_LOADER_H
 
diff --git a/include/hw/cris/etraxfs.h b/include/hw/cris/etraxfs.h
index 8da965addb..108692bac3 100644
--- a/include/hw/cris/etraxfs.h
+++ b/include/hw/cris/etraxfs.h
@@ -22,6 +22,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ETRAXFS_H
 #define HW_ETRAXFS_H
 
diff --git a/include/hw/cris/etraxfs_dma.h b/include/hw/cris/etraxfs_dma.h
index f6f33e0980..a1c6ce44ba 100644
--- a/include/hw/cris/etraxfs_dma.h
+++ b/include/hw/cris/etraxfs_dma.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ETRAXFS_DMA_H
 #define HW_ETRAXFS_DMA_H
 
diff --git a/include/hw/display/bcm2835_fb.h b/include/hw/display/bcm2835_fb.h
index 228988ba05..734d4d92ad 100644
--- a/include/hw/display/bcm2835_fb.h
+++ b/include/hw/display/bcm2835_fb.h
@@ -8,6 +8,8 @@ 
  * This code is licensed under the GNU GPLv2 and later.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef BCM2835_FB_H
 #define BCM2835_FB_H
 
diff --git a/include/hw/display/i2c-ddc.h b/include/hw/display/i2c-ddc.h
index c29443c5af..814be09922 100644
--- a/include/hw/display/i2c-ddc.h
+++ b/include/hw/display/i2c-ddc.h
@@ -16,6 +16,8 @@ 
  *  with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef I2C_DDC_H
 #define I2C_DDC_H
 
diff --git a/include/hw/display/xlnx_dp.h b/include/hw/display/xlnx_dp.h
index ab0dd250cc..9ee13d0160 100644
--- a/include/hw/display/xlnx_dp.h
+++ b/include/hw/display/xlnx_dp.h
@@ -21,6 +21,8 @@ 
  * with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef XLNX_DP_H
 #define XLNX_DP_H
 
diff --git a/include/hw/dma/xlnx_dpdma.h b/include/hw/dma/xlnx_dpdma.h
index 7a304a5bb4..5fe621c650 100644
--- a/include/hw/dma/xlnx_dpdma.h
+++ b/include/hw/dma/xlnx_dpdma.h
@@ -22,6 +22,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef XLNX_DPDMA_H
 #define XLNX_DPDMA_H
 
diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h
index 690f9238c8..f873519cfd 100644
--- a/include/hw/elf_ops.h
+++ b/include/hw/elf_ops.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 static void glue(bswap_ehdr, SZ)(struct elfhdr *ehdr)
 {
     bswap16s(&ehdr->e_type);			/* Object file type */
diff --git a/include/hw/empty_slot.h b/include/hw/empty_slot.h
index 123a9f8989..249092a1cd 100644
--- a/include/hw/empty_slot.h
+++ b/include/hw/empty_slot.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_EMPTY_SLOT_H
 #define HW_EMPTY_SLOT_H
 
diff --git a/include/hw/gpio/bcm2835_gpio.h b/include/hw/gpio/bcm2835_gpio.h
index 9f8e0c720c..c24106aba5 100644
--- a/include/hw/gpio/bcm2835_gpio.h
+++ b/include/hw/gpio/bcm2835_gpio.h
@@ -11,6 +11,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef BCM2835_GPIO_H
 #define BCM2835_GPIO_H
 
diff --git a/include/hw/hyperv/hyperv.h b/include/hw/hyperv/hyperv.h
index 597381cb01..eab9724561 100644
--- a/include/hw/hyperv/hyperv.h
+++ b/include/hw/hyperv/hyperv.h
@@ -7,6 +7,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_HYPERV_HYPERV_H
 #define HW_HYPERV_HYPERV_H
 
diff --git a/include/hw/i2c/aspeed_i2c.h b/include/hw/i2c/aspeed_i2c.h
index f9020acdef..ee215ff26e 100644
--- a/include/hw/i2c/aspeed_i2c.h
+++ b/include/hw/i2c/aspeed_i2c.h
@@ -17,6 +17,9 @@ 
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef ASPEED_I2C_H
 #define ASPEED_I2C_H
 
diff --git a/include/hw/i386/apic_internal.h b/include/hw/i386/apic_internal.h
index 1209eb483a..ec00577253 100644
--- a/include/hw/i386/apic_internal.h
+++ b/include/hw/i386/apic_internal.h
@@ -18,6 +18,9 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_APIC_INTERNAL_H
 #define QEMU_APIC_INTERNAL_H
 
diff --git a/include/hw/i386/ioapic_internal.h b/include/hw/i386/ioapic_internal.h
index 07002f9662..9a9cd96788 100644
--- a/include/hw/i386/ioapic_internal.h
+++ b/include/hw/i386/ioapic_internal.h
@@ -19,6 +19,8 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_IOAPIC_INTERNAL_H
 #define QEMU_IOAPIC_INTERNAL_H
 
diff --git a/include/hw/input/hid.h b/include/hw/input/hid.h
index 2127c7ce45..aec04352e0 100644
--- a/include/hw/input/hid.h
+++ b/include/hw/input/hid.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_HID_H
 #define QEMU_HID_H
 
diff --git a/include/hw/input/tsc2xxx.h b/include/hw/input/tsc2xxx.h
index dbfe5c55c1..5d83270e00 100644
--- a/include/hw/input/tsc2xxx.h
+++ b/include/hw/input/tsc2xxx.h
@@ -8,6 +8,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_INPUT_TSC2XXX_H
 #define HW_INPUT_TSC2XXX_H
 
diff --git a/include/hw/intc/allwinner-a10-pic.h b/include/hw/intc/allwinner-a10-pic.h
index 1d314a70d9..897d5ad6cc 100644
--- a/include/hw/intc/allwinner-a10-pic.h
+++ b/include/hw/intc/allwinner-a10-pic.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef ALLWINNER_A10_PIC_H
 #define ALLWINNER_A10_PIC_H
 
diff --git a/include/hw/intc/armv7m_nvic.h b/include/hw/intc/armv7m_nvic.h
index a472c9b8f0..5bcb946035 100644
--- a/include/hw/intc/armv7m_nvic.h
+++ b/include/hw/intc/armv7m_nvic.h
@@ -7,6 +7,9 @@ 
  * This code is licensed under the GPL version 2 or later.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_ARM_ARMV7M_NVIC_H
 #define HW_ARM_ARMV7M_NVIC_H
 
diff --git a/include/hw/intc/heathrow_pic.h b/include/hw/intc/heathrow_pic.h
index 6c91ec91bb..9724912d59 100644
--- a/include/hw/intc/heathrow_pic.h
+++ b/include/hw/intc/heathrow_pic.h
@@ -23,6 +23,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_INTC_HEATHROW_PIC_H
 #define HW_INTC_HEATHROW_PIC_H
 
diff --git a/include/hw/intc/mips_gic.h b/include/hw/intc/mips_gic.h
index 902a12b178..870daa94c1 100644
--- a/include/hw/intc/mips_gic.h
+++ b/include/hw/intc/mips_gic.h
@@ -8,6 +8,9 @@ 
  *
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MIPS_GIC_H
 #define MIPS_GIC_H
 
diff --git a/include/hw/isa/vt82c686.h b/include/hw/isa/vt82c686.h
index c3c2b6e786..49b3a96e4a 100644
--- a/include/hw/isa/vt82c686.h
+++ b/include/hw/isa/vt82c686.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_VT82C686_H
 #define HW_VT82C686_H
 
diff --git a/include/hw/kvm/clock.h b/include/hw/kvm/clock.h
index 81c66b2302..f942b5fa9b 100644
--- a/include/hw/kvm/clock.h
+++ b/include/hw/kvm/clock.h
@@ -10,6 +10,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef HW_KVM_CLOCK_H
 #define HW_KVM_CLOCK_H
 
diff --git a/include/hw/mips/bios.h b/include/hw/mips/bios.h
index c03007999a..6a43a397dc 100644
--- a/include/hw/mips/bios.h
+++ b/include/hw/mips/bios.h
@@ -1,3 +1,5 @@ 
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef HW_MIPS_BIOS_H
 #define HW_MIPS_BIOS_H
 
diff --git a/include/hw/mips/cps.h b/include/hw/mips/cps.h
index aab1af926d..af8d25e142 100644
--- a/include/hw/mips/cps.h
+++ b/include/hw/mips/cps.h
@@ -17,6 +17,9 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MIPS_CPS_H
 #define MIPS_CPS_H
 
diff --git a/include/hw/mips/cpudevs.h b/include/hw/mips/cpudevs.h
index 291f59281a..fc80c53980 100644
--- a/include/hw/mips/cpudevs.h
+++ b/include/hw/mips/cpudevs.h
@@ -1,3 +1,5 @@ 
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef HW_MIPS_CPUDEVS_H
 #define HW_MIPS_CPUDEVS_H
 
diff --git a/include/hw/misc/bcm2835_property.h b/include/hw/misc/bcm2835_property.h
index 11be0dbeac..41a668d54a 100644
--- a/include/hw/misc/bcm2835_property.h
+++ b/include/hw/misc/bcm2835_property.h
@@ -3,6 +3,8 @@ 
  * This code is licensed under the GNU GPLv2 and later.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef BCM2835_PROPERTY_H
 #define BCM2835_PROPERTY_H
 
diff --git a/include/hw/misc/macio/cuda.h b/include/hw/misc/macio/cuda.h
index 7dad469142..562927e1da 100644
--- a/include/hw/misc/macio/cuda.h
+++ b/include/hw/misc/macio/cuda.h
@@ -23,6 +23,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef CUDA_H
 #define CUDA_H
 
diff --git a/include/hw/misc/macio/gpio.h b/include/hw/misc/macio/gpio.h
index 2838ae5fde..c5231896ce 100644
--- a/include/hw/misc/macio/gpio.h
+++ b/include/hw/misc/macio/gpio.h
@@ -23,6 +23,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MACIO_GPIO_H
 #define MACIO_GPIO_H
 
diff --git a/include/hw/misc/macio/macio.h b/include/hw/misc/macio/macio.h
index 970058b6ed..f19f756f38 100644
--- a/include/hw/misc/macio/macio.h
+++ b/include/hw/misc/macio/macio.h
@@ -23,6 +23,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MACIO_H
 #define MACIO_H
 
diff --git a/include/hw/misc/macio/pmu.h b/include/hw/misc/macio/pmu.h
index d10895ba5f..0ab3c06a7e 100644
--- a/include/hw/misc/macio/pmu.h
+++ b/include/hw/misc/macio/pmu.h
@@ -7,6 +7,8 @@ 
  * Copyright (C) 2016 Ben Herrenschmidt
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef PMU_H
 #define PMU_H
 
diff --git a/include/hw/misc/mips_cmgcr.h b/include/hw/misc/mips_cmgcr.h
index c9dfcb4b84..70b95ab163 100644
--- a/include/hw/misc/mips_cmgcr.h
+++ b/include/hw/misc/mips_cmgcr.h
@@ -7,6 +7,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MIPS_CMGCR_H
 #define MIPS_CMGCR_H
 
diff --git a/include/hw/misc/mips_cpc.h b/include/hw/misc/mips_cpc.h
index 72c834e039..86d2705526 100644
--- a/include/hw/misc/mips_cpc.h
+++ b/include/hw/misc/mips_cpc.h
@@ -17,6 +17,8 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MIPS_CPC_H
 #define MIPS_CPC_H
 
diff --git a/include/hw/misc/pvpanic.h b/include/hw/misc/pvpanic.h
index 1ee071a703..65c67e31f4 100644
--- a/include/hw/misc/pvpanic.h
+++ b/include/hw/misc/pvpanic.h
@@ -11,6 +11,9 @@ 
  * See the COPYING file in the top-level directory.
  *
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_MISC_PVPANIC_H
 #define HW_MISC_PVPANIC_H
 
diff --git a/include/hw/net/allwinner_emac.h b/include/hw/net/allwinner_emac.h
index 905a43deb4..9389cb82c6 100644
--- a/include/hw/net/allwinner_emac.h
+++ b/include/hw/net/allwinner_emac.h
@@ -20,6 +20,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef ALLWINNER_EMAC_H
 #define ALLWINNER_EMAC_H
 
diff --git a/include/hw/net/lance.h b/include/hw/net/lance.h
index ffdd35c4d7..2b99153bbc 100644
--- a/include/hw/net/lance.h
+++ b/include/hw/net/lance.h
@@ -26,6 +26,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef LANCE_H
 #define LANCE_H
 
diff --git a/include/hw/nvram/chrp_nvram.h b/include/hw/nvram/chrp_nvram.h
index b4f5b2b104..ae99396eab 100644
--- a/include/hw/nvram/chrp_nvram.h
+++ b/include/hw/nvram/chrp_nvram.h
@@ -15,6 +15,8 @@ 
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef CHRP_NVRAM_H
 #define CHRP_NVRAM_H
 
diff --git a/include/hw/pci-host/sabre.h b/include/hw/pci-host/sabre.h
index 9afa4938fd..003bd17842 100644
--- a/include/hw/pci-host/sabre.h
+++ b/include/hw/pci-host/sabre.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_PCI_HOST_SABRE_H
 #define HW_PCI_HOST_SABRE_H
 
diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h
index 1b61162f91..9d2e3e313c 100644
--- a/include/hw/pci-host/spapr.h
+++ b/include/hw/pci-host/spapr.h
@@ -17,6 +17,9 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef PCI_HOST_SPAPR_H
 #define PCI_HOST_SPAPR_H
 
diff --git a/include/hw/pci-host/uninorth.h b/include/hw/pci-host/uninorth.h
index 060324536a..b541fbc12d 100644
--- a/include/hw/pci-host/uninorth.h
+++ b/include/hw/pci-host/uninorth.h
@@ -22,6 +22,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef UNINORTH_H
 #define UNINORTH_H
 
diff --git a/include/hw/pci/pcie_aer.h b/include/hw/pci/pcie_aer.h
index 729a9439c8..a2e8bc77a7 100644
--- a/include/hw/pci/pcie_aer.h
+++ b/include/hw/pci/pcie_aer.h
@@ -18,6 +18,8 @@ 
  * with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_PCIE_AER_H
 #define QEMU_PCIE_AER_H
 
diff --git a/include/hw/ppc/fdt.h b/include/hw/ppc/fdt.h
index a8cd85069f..39670f61a8 100644
--- a/include/hw/ppc/fdt.h
+++ b/include/hw/ppc/fdt.h
@@ -7,6 +7,8 @@ 
  * COPYING file in the top-level directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef PPC_FDT_H
 #define PPC_FDT_H
 
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index fb123edc4e..3435ac4d13 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -17,6 +17,8 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef PPC_PNV_H
 #define PPC_PNV_H
 
diff --git a/include/hw/ppc/pnv_core.h b/include/hw/ppc/pnv_core.h
index d0926454a9..403b9f1e49 100644
--- a/include/hw/ppc/pnv_core.h
+++ b/include/hw/ppc/pnv_core.h
@@ -17,6 +17,8 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef PPC_PNV_CORE_H
 #define PPC_PNV_CORE_H
 
diff --git a/include/hw/ppc/pnv_xscom.h b/include/hw/ppc/pnv_xscom.h
index 67641ed278..1ac2e1d948 100644
--- a/include/hw/ppc/pnv_xscom.h
+++ b/include/hw/ppc/pnv_xscom.h
@@ -17,6 +17,8 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef PPC_PNV_XSCOM_H
 #define PPC_PNV_XSCOM_H
 
diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h
index 4bdcb8bacd..d45cb675bf 100644
--- a/include/hw/ppc/ppc.h
+++ b/include/hw/ppc/ppc.h
@@ -1,3 +1,5 @@ 
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef HW_PPC_H
 #define HW_PPC_H
 
diff --git a/include/hw/ppc/ppc4xx.h b/include/hw/ppc/ppc4xx.h
index 39a7ba1ce6..2732200997 100644
--- a/include/hw/ppc/ppc4xx.h
+++ b/include/hw/ppc/ppc4xx.h
@@ -22,6 +22,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef PPC4XX_H
 #define PPC4XX_H
 
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 60553d32c4..c7a31e43ea 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -1,3 +1,6 @@ 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SPAPR_H
 #define HW_SPAPR_H
 
diff --git a/include/hw/ppc/spapr_cpu_core.h b/include/hw/ppc/spapr_cpu_core.h
index f9645a7290..980d9ded69 100644
--- a/include/hw/ppc/spapr_cpu_core.h
+++ b/include/hw/ppc/spapr_cpu_core.h
@@ -6,6 +6,10 @@ 
  * This work is licensed under the terms of the GNU GPL, version 2 or later.
  * See the COPYING file in the top-level directory.
  */
+
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SPAPR_CPU_CORE_H
 #define HW_SPAPR_CPU_CORE_H
 
diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h
index f965a58f89..9d9ef40388 100644
--- a/include/hw/ppc/spapr_irq.h
+++ b/include/hw/ppc/spapr_irq.h
@@ -7,6 +7,8 @@ 
  * COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SPAPR_IRQ_H
 #define HW_SPAPR_IRQ_H
 
diff --git a/include/hw/ppc/spapr_ovec.h b/include/hw/ppc/spapr_ovec.h
index 5de5ecf5de..5d522b7526 100644
--- a/include/hw/ppc/spapr_ovec.h
+++ b/include/hw/ppc/spapr_ovec.h
@@ -34,6 +34,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+
 #ifndef SPAPR_OVEC_H
 #define SPAPR_OVEC_H
 
diff --git a/include/hw/ppc/spapr_vio.h b/include/hw/ppc/spapr_vio.h
index 04609f214e..50cf292803 100644
--- a/include/hw/ppc/spapr_vio.h
+++ b/include/hw/ppc/spapr_vio.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SPAPR_VIO_H
 #define HW_SPAPR_VIO_H
 
diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
index 7197144265..45a06cf4aa 100644
--- a/include/hw/ppc/spapr_xive.h
+++ b/include/hw/ppc/spapr_xive.h
@@ -7,6 +7,8 @@ 
  * COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef PPC_SPAPR_XIVE_H
 #define PPC_SPAPR_XIVE_H
 
diff --git a/include/hw/ppc/xics_spapr.h b/include/hw/ppc/xics_spapr.h
index 5dabc9a138..5372a160ab 100644
--- a/include/hw/ppc/xics_spapr.h
+++ b/include/hw/ppc/xics_spapr.h
@@ -24,6 +24,9 @@ 
  * THE SOFTWARE.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef XICS_SPAPR_H
 #define XICS_SPAPR_H
 
diff --git a/include/hw/ppc/xive_regs.h b/include/hw/ppc/xive_regs.h
index 1a8c5b5e64..4a6ed49215 100644
--- a/include/hw/ppc/xive_regs.h
+++ b/include/hw/ppc/xive_regs.h
@@ -13,6 +13,8 @@ 
  * COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef PPC_XIVE_REGS_H
 #define PPC_XIVE_REGS_H
 
diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h
index daa179b600..01c67335b1 100644
--- a/include/hw/riscv/boot.h
+++ b/include/hw/riscv/boot.h
@@ -17,6 +17,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef RISCV_BOOT_H
 #define RISCV_BOOT_H
 
diff --git a/include/hw/riscv/riscv_hart.h b/include/hw/riscv/riscv_hart.h
index 0671d88a44..846a22c17d 100644
--- a/include/hw/riscv/riscv_hart.h
+++ b/include/hw/riscv/riscv_hart.h
@@ -18,6 +18,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_RISCV_HART_H
 #define HW_RISCV_HART_H
 
diff --git a/include/hw/riscv/riscv_htif.h b/include/hw/riscv/riscv_htif.h
index fb5f88129e..df385dacf4 100644
--- a/include/hw/riscv/riscv_htif.h
+++ b/include/hw/riscv/riscv_htif.h
@@ -17,6 +17,9 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_RISCV_HTIF_H
 #define HW_RISCV_HTIF_H
 
diff --git a/include/hw/riscv/sifive_clint.h b/include/hw/riscv/sifive_clint.h
index e2865be1d1..dd9999333f 100644
--- a/include/hw/riscv/sifive_clint.h
+++ b/include/hw/riscv/sifive_clint.h
@@ -17,6 +17,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SIFIVE_CLINT_H
 #define HW_SIFIVE_CLINT_H
 
diff --git a/include/hw/riscv/sifive_e.h b/include/hw/riscv/sifive_e.h
index d175b24cb2..a799718f2a 100644
--- a/include/hw/riscv/sifive_e.h
+++ b/include/hw/riscv/sifive_e.h
@@ -16,6 +16,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SIFIVE_E_H
 #define HW_SIFIVE_E_H
 
diff --git a/include/hw/riscv/sifive_plic.h b/include/hw/riscv/sifive_plic.h
index ce8907f6aa..c292e578c6 100644
--- a/include/hw/riscv/sifive_plic.h
+++ b/include/hw/riscv/sifive_plic.h
@@ -18,6 +18,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SIFIVE_PLIC_H
 #define HW_SIFIVE_PLIC_H
 
diff --git a/include/hw/riscv/sifive_prci.h b/include/hw/riscv/sifive_prci.h
index bd51c4af3c..1fc80724c2 100644
--- a/include/hw/riscv/sifive_prci.h
+++ b/include/hw/riscv/sifive_prci.h
@@ -16,6 +16,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SIFIVE_PRCI_H
 #define HW_SIFIVE_PRCI_H
 
diff --git a/include/hw/riscv/sifive_test.h b/include/hw/riscv/sifive_test.h
index 71d4c9fad7..ca775d8e68 100644
--- a/include/hw/riscv/sifive_test.h
+++ b/include/hw/riscv/sifive_test.h
@@ -16,6 +16,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SIFIVE_TEST_H
 #define HW_SIFIVE_TEST_H
 
diff --git a/include/hw/riscv/sifive_u.h b/include/hw/riscv/sifive_u.h
index 892f0eee21..74d8fbbf57 100644
--- a/include/hw/riscv/sifive_u.h
+++ b/include/hw/riscv/sifive_u.h
@@ -16,6 +16,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SIFIVE_U_H
 #define HW_SIFIVE_U_H
 
diff --git a/include/hw/riscv/sifive_uart.h b/include/hw/riscv/sifive_uart.h
index c8dc1c57fd..62f36ec2d1 100644
--- a/include/hw/riscv/sifive_uart.h
+++ b/include/hw/riscv/sifive_uart.h
@@ -17,6 +17,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SIFIVE_UART_H
 #define HW_SIFIVE_UART_H
 
diff --git a/include/hw/riscv/spike.h b/include/hw/riscv/spike.h
index 641b70da67..f259d2558b 100644
--- a/include/hw/riscv/spike.h
+++ b/include/hw/riscv/spike.h
@@ -16,6 +16,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_RISCV_SPIKE_H
 #define HW_RISCV_SPIKE_H
 
diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h
index d01a1a85c4..d6f34cd19f 100644
--- a/include/hw/riscv/virt.h
+++ b/include/hw/riscv/virt.h
@@ -16,6 +16,8 @@ 
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_RISCV_VIRT_H
 #define HW_RISCV_VIRT_H
 
diff --git a/include/hw/s390x/3270-ccw.h b/include/hw/s390x/3270-ccw.h
index 9d1d18e2bd..bc24e78ec6 100644
--- a/include/hw/s390x/3270-ccw.h
+++ b/include/hw/s390x/3270-ccw.h
@@ -10,6 +10,9 @@ 
  * directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_S390X_3270_CCW_H
 #define HW_S390X_3270_CCW_H
 
diff --git a/include/hw/s390x/ap-device.h b/include/hw/s390x/ap-device.h
index 765e9082a3..2f3488115e 100644
--- a/include/hw/s390x/ap-device.h
+++ b/include/hw/s390x/ap-device.h
@@ -7,6 +7,9 @@ 
  * your option) any later version. See the COPYING file in the top-level
  * directory.
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_S390X_AP_DEVICE_H
 #define HW_S390X_AP_DEVICE_H
 
diff --git a/include/hw/s390x/css-bridge.h b/include/hw/s390x/css-bridge.h
index 5a0203be5f..1f5efeb203 100644
--- a/include/hw/s390x/css-bridge.h
+++ b/include/hw/s390x/css-bridge.h
@@ -10,6 +10,8 @@ 
  * directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_S390X_CSS_BRIDGE_H
 #define HW_S390X_CSS_BRIDGE_H
 #include "qom/object.h"
diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h
index d033387fba..3d55971ef5 100644
--- a/include/hw/s390x/css.h
+++ b/include/hw/s390x/css.h
@@ -9,6 +9,9 @@ 
  * directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef CSS_H
 #define CSS_H
 
diff --git a/include/hw/s390x/s390-ccw.h b/include/hw/s390x/s390-ccw.h
index fffb54562f..91c1a8d21f 100644
--- a/include/hw/s390x/s390-ccw.h
+++ b/include/hw/s390x/s390-ccw.h
@@ -10,6 +10,9 @@ 
  * directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_S390_CCW_H
 #define HW_S390_CCW_H
 
diff --git a/include/hw/s390x/storage-attributes.h b/include/hw/s390x/storage-attributes.h
index d6403a0a7e..5bc4715c6b 100644
--- a/include/hw/s390x/storage-attributes.h
+++ b/include/hw/s390x/storage-attributes.h
@@ -9,6 +9,9 @@ 
  * directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef S390_STORAGE_ATTRIBUTES_H
 #define S390_STORAGE_ATTRIBUTES_H
 
diff --git a/include/hw/s390x/tod.h b/include/hw/s390x/tod.h
index 9c4a6000c3..0ad708998b 100644
--- a/include/hw/s390x/tod.h
+++ b/include/hw/s390x/tod.h
@@ -8,6 +8,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_S390_TOD_H
 #define HW_S390_TOD_H
 
diff --git a/include/hw/s390x/vfio-ccw.h b/include/hw/s390x/vfio-ccw.h
index ee5250d0d7..c35e86f9e8 100644
--- a/include/hw/s390x/vfio-ccw.h
+++ b/include/hw/s390x/vfio-ccw.h
@@ -11,6 +11,9 @@ 
  * directory.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_VFIO_CCW_H
 #define HW_VFIO_CCW_H
 
diff --git a/include/hw/semihosting/console.h b/include/hw/semihosting/console.h
index cfab572c0c..03e6bdb985 100644
--- a/include/hw/semihosting/console.h
+++ b/include/hw/semihosting/console.h
@@ -6,6 +6,9 @@ 
  * SPDX-License-Identifier: GPL-2.0-or-later
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef SEMIHOST_CONSOLE_H
 #define SEMIHOST_CONSOLE_H
 
diff --git a/include/hw/sh4/sh.h b/include/hw/sh4/sh.h
index 767a2df7e2..1884271351 100644
--- a/include/hw/sh4/sh.h
+++ b/include/hw/sh4/sh.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_SH_H
 #define QEMU_SH_H
 /* Definitions for SH board emulation.  */
diff --git a/include/hw/sh4/sh_intc.h b/include/hw/sh4/sh_intc.h
index b7c2404334..ed56215736 100644
--- a/include/hw/sh4/sh_intc.h
+++ b/include/hw/sh4/sh_intc.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef SH_INTC_H
 #define SH_INTC_H
 
diff --git a/include/hw/sparc/sparc64.h b/include/hw/sparc/sparc64.h
index 21ab79e343..81b9c8a675 100644
--- a/include/hw/sparc/sparc64.h
+++ b/include/hw/sparc/sparc64.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_SPARC_SPARC64_H
 #define HW_SPARC_SPARC64_H
 
diff --git a/include/hw/ssi/aspeed_smc.h b/include/hw/ssi/aspeed_smc.h
index 591279ba1f..06b50143c3 100644
--- a/include/hw/ssi/aspeed_smc.h
+++ b/include/hw/ssi/aspeed_smc.h
@@ -22,6 +22,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef ASPEED_SMC_H
 #define ASPEED_SMC_H
 
diff --git a/include/hw/ssi/xilinx_spips.h b/include/hw/ssi/xilinx_spips.h
index a0a0ae7584..7929546ad7 100644
--- a/include/hw/ssi/xilinx_spips.h
+++ b/include/hw/ssi/xilinx_spips.h
@@ -22,6 +22,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef XILINX_SPIPS_H
 #define XILINX_SPIPS_H
 
diff --git a/include/hw/timer/allwinner-a10-pit.h b/include/hw/timer/allwinner-a10-pit.h
index c0cc3e2169..16cfc0d62d 100644
--- a/include/hw/timer/allwinner-a10-pit.h
+++ b/include/hw/timer/allwinner-a10-pit.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef ALLWINNER_A10_PIT_H
 #define ALLWINNER_A10_PIT_H
 
diff --git a/include/hw/timer/i8254_internal.h b/include/hw/timer/i8254_internal.h
index c37a438f82..8d0e0ed17f 100644
--- a/include/hw/timer/i8254_internal.h
+++ b/include/hw/timer/i8254_internal.h
@@ -22,6 +22,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_I8254_INTERNAL_H
 #define QEMU_I8254_INTERNAL_H
 
diff --git a/include/hw/timer/m48t59.h b/include/hw/timer/m48t59.h
index 43efc91f56..97c2471f2c 100644
--- a/include/hw/timer/m48t59.h
+++ b/include/hw/timer/m48t59.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_M48T59_H
 #define HW_M48T59_H
 
diff --git a/include/hw/timer/mc146818rtc.h b/include/hw/timer/mc146818rtc.h
index fe6ed63f71..a781ff1fb3 100644
--- a/include/hw/timer/mc146818rtc.h
+++ b/include/hw/timer/mc146818rtc.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MC146818RTC_H
 #define MC146818RTC_H
 
diff --git a/include/hw/timer/mc146818rtc_regs.h b/include/hw/timer/mc146818rtc_regs.h
index c62f17bf2d..0b38971417 100644
--- a/include/hw/timer/mc146818rtc_regs.h
+++ b/include/hw/timer/mc146818rtc_regs.h
@@ -22,6 +22,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MC146818RTC_REGS_H
 #define MC146818RTC_REGS_H
 
diff --git a/include/hw/timer/sun4v-rtc.h b/include/hw/timer/sun4v-rtc.h
index 407278f918..11ced390a3 100644
--- a/include/hw/timer/sun4v-rtc.h
+++ b/include/hw/timer/sun4v-rtc.h
@@ -1 +1,3 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 void sun4v_rtc_init(hwaddr addr);
diff --git a/include/hw/timer/xlnx-zynqmp-rtc.h b/include/hw/timer/xlnx-zynqmp-rtc.h
index 6e9134edf6..23f37fe21a 100644
--- a/include/hw/timer/xlnx-zynqmp-rtc.h
+++ b/include/hw/timer/xlnx-zynqmp-rtc.h
@@ -24,6 +24,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_TIMER_XLNX_ZYNQMP_RTC_H
 #define HW_TIMER_XLNX_ZYNQMP_RTC_H
 
diff --git a/include/hw/vfio/vfio-amd-xgbe.h b/include/hw/vfio/vfio-amd-xgbe.h
index 9fff65e99d..936514fe64 100644
--- a/include/hw/vfio/vfio-amd-xgbe.h
+++ b/include/hw/vfio/vfio-amd-xgbe.h
@@ -11,6 +11,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_VFIO_VFIO_AMD_XGBE_H
 #define HW_VFIO_VFIO_AMD_XGBE_H
 
diff --git a/include/hw/vfio/vfio-calxeda-xgmac.h b/include/hw/vfio/vfio-calxeda-xgmac.h
index f994775c09..498b399c48 100644
--- a/include/hw/vfio/vfio-calxeda-xgmac.h
+++ b/include/hw/vfio/vfio-calxeda-xgmac.h
@@ -11,6 +11,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_VFIO_VFIO_CALXEDA_XGMAC_H
 #define HW_VFIO_VFIO_CALXEDA_XGMAC_H
 
diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
index 9107bd41c0..4815e1c74b 100644
--- a/include/hw/vfio/vfio-common.h
+++ b/include/hw/vfio/vfio-common.h
@@ -18,6 +18,8 @@ 
  *  Copyright (C) 2008, IBM, Muli Ben-Yehuda (muli@il.ibm.com)
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_VFIO_VFIO_COMMON_H
 #define HW_VFIO_VFIO_COMMON_H
 
diff --git a/include/hw/vfio/vfio-platform.h b/include/hw/vfio/vfio-platform.h
index 30d3c28d3b..064f4a421d 100644
--- a/include/hw/vfio/vfio-platform.h
+++ b/include/hw/vfio/vfio-platform.h
@@ -13,6 +13,8 @@ 
  *  Copyright Red Hat, Inc. 2012
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_VFIO_VFIO_PLATFORM_H
 #define HW_VFIO_VFIO_PLATFORM_H
 
diff --git a/include/hw/virtio/virtio-access.h b/include/hw/virtio/virtio-access.h
index bdf58f3119..9a155f4c69 100644
--- a/include/hw/virtio/virtio-access.h
+++ b/include/hw/virtio/virtio-access.h
@@ -13,6 +13,9 @@ 
  *
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_VIRTIO_ACCESS_H
 #define QEMU_VIRTIO_ACCESS_H
 
diff --git a/include/hw/virtio/virtio-gpu-bswap.h b/include/hw/virtio/virtio-gpu-bswap.h
index 38d12160f6..b3c749ebf2 100644
--- a/include/hw/virtio/virtio-gpu-bswap.h
+++ b/include/hw/virtio/virtio-gpu-bswap.h
@@ -11,6 +11,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HW_VIRTIO_GPU_BSWAP_H
 #define HW_VIRTIO_GPU_BSWAP_H
 
diff --git a/include/hw/virtio/virtio-gpu-pci.h b/include/hw/virtio/virtio-gpu-pci.h
index 2f69b5a9cc..204e2b3a52 100644
--- a/include/hw/virtio/virtio-gpu-pci.h
+++ b/include/hw/virtio/virtio-gpu-pci.h
@@ -11,6 +11,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_VIRTIO_GPU_PCI_H
 #define HW_VIRTIO_GPU_PCI_H
 
diff --git a/include/hw/virtio/virtio-gpu-pixman.h b/include/hw/virtio/virtio-gpu-pixman.h
index 4dba782758..6e83be5f65 100644
--- a/include/hw/virtio/virtio-gpu-pixman.h
+++ b/include/hw/virtio/virtio-gpu-pixman.h
@@ -11,6 +11,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_VIRTIO_GPU_PIXMAN_H
 #define HW_VIRTIO_GPU_PIXMAN_H
 
diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h
index 6dd57f2025..27be0c6636 100644
--- a/include/hw/virtio/virtio-gpu.h
+++ b/include/hw/virtio/virtio-gpu.h
@@ -11,6 +11,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef HW_VIRTIO_GPU_H
 #define HW_VIRTIO_GPU_H
 
diff --git a/include/hw/virtio/virtio-input.h b/include/hw/virtio/virtio-input.h
index 4fca03e796..0727d5449b 100644
--- a/include/hw/virtio/virtio-input.h
+++ b/include/hw/virtio/virtio-input.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_VIRTIO_INPUT_H
 #define QEMU_VIRTIO_INPUT_H
 
diff --git a/include/hw/virtio/virtio-rng.h b/include/hw/virtio/virtio-rng.h
index 922dce7cac..ee650297c2 100644
--- a/include/hw/virtio/virtio-rng.h
+++ b/include/hw/virtio/virtio-rng.h
@@ -9,6 +9,8 @@ 
  * top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_VIRTIO_RNG_H
 #define QEMU_VIRTIO_RNG_H
 
diff --git a/include/hw/watchdog/wdt_aspeed.h b/include/hw/watchdog/wdt_aspeed.h
index daef0c0e23..39e5689165 100644
--- a/include/hw/watchdog/wdt_aspeed.h
+++ b/include/hw/watchdog/wdt_aspeed.h
@@ -7,6 +7,8 @@ 
  * COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef WDT_ASPEED_H
 #define WDT_ASPEED_H
 
diff --git a/include/hw/xen/xen-backend.h b/include/hw/xen/xen-backend.h
index 010d712638..d4cb4475be 100644
--- a/include/hw/xen/xen-backend.h
+++ b/include/hw/xen/xen-backend.h
@@ -5,6 +5,9 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without CONFIG_XEN, yet! */
+/* FIXME Does not pass make check-headers without system emulation, yet! */
+
 #ifndef HW_XEN_BACKEND_H
 #define HW_XEN_BACKEND_H
 
diff --git a/include/hw/xen/xen-block.h b/include/hw/xen/xen-block.h
index 11d351b4b3..9f8ddccd12 100644
--- a/include/hw/xen/xen-block.h
+++ b/include/hw/xen/xen-block.h
@@ -5,6 +5,9 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without CONFIG_XEN, yet! */
+/* FIXME Does not pass make check-headers without system emulation, yet! */
+
 #ifndef HW_XEN_BLOCK_H
 #define HW_XEN_BLOCK_H
 
diff --git a/include/hw/xen/xen-bus-helper.h b/include/hw/xen/xen-bus-helper.h
index 4c0f747445..00ec76b4a6 100644
--- a/include/hw/xen/xen-bus-helper.h
+++ b/include/hw/xen/xen-bus-helper.h
@@ -5,6 +5,9 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without CONFIG_XEN, yet! */
+/* FIXME Does not pass make check-headers without system emulation, yet! */
+
 #ifndef HW_XEN_BUS_HELPER_H
 #define HW_XEN_BUS_HELPER_H
 
diff --git a/include/hw/xen/xen-bus.h b/include/hw/xen/xen-bus.h
index 1c2d9dfdb8..a74335809f 100644
--- a/include/hw/xen/xen-bus.h
+++ b/include/hw/xen/xen-bus.h
@@ -5,6 +5,9 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without CONFIG_XEN, yet! */
+/* FIXME Does not pass make check-headers without system emulation, yet! */
+
 #ifndef HW_XEN_BUS_H
 #define HW_XEN_BUS_H
 
diff --git a/include/hw/xen/xen-legacy-backend.h b/include/hw/xen/xen-legacy-backend.h
index 07d4176ac1..e3f068e68b 100644
--- a/include/hw/xen/xen-legacy-backend.h
+++ b/include/hw/xen/xen-legacy-backend.h
@@ -1,3 +1,6 @@ 
+/* FIXME Does not pass make check-headers without CONFIG_XEN, yet! */
+/* FIXME Does not pass make check-headers without system emulation, yet! */
+
 #ifndef HW_XEN_LEGACY_BACKEND_H
 #define HW_XEN_LEGACY_BACKEND_H
 
diff --git a/include/hw/xen/xen_common.h b/include/hw/xen/xen_common.h
index 0504b43659..bed3e49acf 100644
--- a/include/hw/xen/xen_common.h
+++ b/include/hw/xen/xen_common.h
@@ -1,3 +1,6 @@ 
+/* FIXME Does not pass make check-headers without CONFIG_XEN, yet! */
+/* FIXME Does not pass make check-headers without system emulation, yet! */
+
 #ifndef QEMU_HW_XEN_COMMON_H
 #define QEMU_HW_XEN_COMMON_H
 
diff --git a/include/hw/xen/xen_pvdev.h b/include/hw/xen/xen_pvdev.h
index 83e5174d90..5089f14be8 100644
--- a/include/hw/xen/xen_pvdev.h
+++ b/include/hw/xen/xen_pvdev.h
@@ -1,3 +1,6 @@ 
+/* FIXME Does not pass make check-headers without CONFIG_XEN, yet! */
+/* FIXME Does not pass make check-headers without system emulation, yet! */
+
 #ifndef QEMU_HW_XEN_PVDEV_H
 #define QEMU_HW_XEN_PVDEV_H
 
diff --git a/include/libdecnumber/decNumberLocal.h b/include/libdecnumber/decNumberLocal.h
index 12cf1d8b6f..01ba6c7aea 100644
--- a/include/libdecnumber/decNumberLocal.h
+++ b/include/libdecnumber/decNumberLocal.h
@@ -37,6 +37,8 @@ 
 /* decNumber.h or one of decDouble (etc.) must be included first.     */
 /* ------------------------------------------------------------------ */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef DECNUMBERLOCAL_H
 #define DECNUMBERLOCAL_H
 
diff --git a/include/migration/cpu.h b/include/migration/cpu.h
index a40bd3549f..4c8dde2e95 100644
--- a/include/migration/cpu.h
+++ b/include/migration/cpu.h
@@ -1,4 +1,8 @@ 
 /* Declarations for use for CPU state serialization.  */
+
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MIGRATION_CPU_H
 #define MIGRATION_CPU_H
 
diff --git a/include/monitor/hmp-target.h b/include/monitor/hmp-target.h
index 454e8ed155..c022fd3b39 100644
--- a/include/monitor/hmp-target.h
+++ b/include/monitor/hmp-target.h
@@ -22,6 +22,9 @@ 
  * THE SOFTWARE.
  */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MONITOR_HMP_TARGET_H
 #define MONITOR_HMP_TARGET_H
 
diff --git a/include/qemu/atomic128.h b/include/qemu/atomic128.h
index ddd0d55d31..8dcf19482d 100644
--- a/include/qemu/atomic128.h
+++ b/include/qemu/atomic128.h
@@ -10,6 +10,8 @@ 
  * atomic primitive is meant to provide.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_ATOMIC128_H
 #define QEMU_ATOMIC128_H
 
diff --git a/include/qemu/cpuid.h b/include/qemu/cpuid.h
index 69301700bd..69c3917445 100644
--- a/include/qemu/cpuid.h
+++ b/include/qemu/cpuid.h
@@ -4,6 +4,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without CONFIG_CPUID_H, yet! */
+
 #ifndef QEMU_CPUID_H
 #define QEMU_CPUID_H
 
diff --git a/include/qemu/futex.h b/include/qemu/futex.h
index 91ae88966e..0fa19d30df 100644
--- a/include/qemu/futex.h
+++ b/include/qemu/futex.h
@@ -11,6 +11,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers without CONFIG_LINUX, yet! */
+
 #ifndef QEMU_FUTEX_H
 #define QEMU_FUTEX_H
 
diff --git a/include/qemu/ratelimit.h b/include/qemu/ratelimit.h
index 1b38291823..efd6074823 100644
--- a/include/qemu/ratelimit.h
+++ b/include/qemu/ratelimit.h
@@ -11,6 +11,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_RATELIMIT_H
 #define QEMU_RATELIMIT_H
 
diff --git a/include/qemu/thread-win32.h b/include/qemu/thread-win32.h
index 50af5dd7ab..e09a7ba397 100644
--- a/include/qemu/thread-win32.h
+++ b/include/qemu/thread-win32.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_THREAD_WIN32_H
 #define QEMU_THREAD_WIN32_H
 
diff --git a/include/qemu/xattr.h b/include/qemu/xattr.h
index a83fe8e749..8dae5620e4 100644
--- a/include/qemu/xattr.h
+++ b/include/qemu/xattr.h
@@ -10,6 +10,9 @@ 
  * later version.  See the COPYING file in the top-level directory.
  *
  */
+
+/* FIXME Does not pass make check-headers without CONFIG_LINUX, yet! */
+
 #ifndef QEMU_XATTR_H
 #define QEMU_XATTR_H
 
diff --git a/include/sysemu/balloon.h b/include/sysemu/balloon.h
index c8f6145257..ec77a48925 100644
--- a/include/sysemu/balloon.h
+++ b/include/sysemu/balloon.h
@@ -11,6 +11,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_BALLOON_H
 #define QEMU_BALLOON_H
 
diff --git a/include/sysemu/cryptodev-vhost-user.h b/include/sysemu/cryptodev-vhost-user.h
index 6debf53fc5..d2bbd854c4 100644
--- a/include/sysemu/cryptodev-vhost-user.h
+++ b/include/sysemu/cryptodev-vhost-user.h
@@ -20,6 +20,9 @@ 
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  *
  */
+
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef CRYPTODEV_VHOST_USER_H
 #define CRYPTODEV_VHOST_USER_H
 
diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h
index 250143cb5a..c5efa8b2f2 100644
--- a/include/sysemu/dump.h
+++ b/include/sysemu/dump.h
@@ -11,6 +11,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef DUMP_H
 #define DUMP_H
 
diff --git a/include/sysemu/hvf.h b/include/sysemu/hvf.h
index d275b5a843..2df17c4ed3 100644
--- a/include/sysemu/hvf.h
+++ b/include/sysemu/hvf.h
@@ -10,6 +10,9 @@ 
 
 /* header to be included in non-HVF-specific code */
 
+/* NOTE: May only be included into target-dependent code */
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef HVF_H
 #define HVF_H
 
diff --git a/include/sysemu/iothread.h b/include/sysemu/iothread.h
index 5f6240d5cb..8d8af53df8 100644
--- a/include/sysemu/iothread.h
+++ b/include/sysemu/iothread.h
@@ -11,6 +11,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef IOTHREAD_H
 #define IOTHREAD_H
 
diff --git a/include/sysemu/kvm_int.h b/include/sysemu/kvm_int.h
index f838412491..18f48589c1 100644
--- a/include/sysemu/kvm_int.h
+++ b/include/sysemu/kvm_int.h
@@ -6,6 +6,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef QEMU_KVM_INT_H
 #define QEMU_KVM_INT_H
 
diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h
index 58452457ce..6fb5b42cf1 100644
--- a/include/sysemu/memory_mapping.h
+++ b/include/sysemu/memory_mapping.h
@@ -11,6 +11,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef MEMORY_MAPPING_H
 #define MEMORY_MAPPING_H
 
diff --git a/include/sysemu/os-posix.h b/include/sysemu/os-posix.h
index 629c8c648b..5a7dabe22c 100644
--- a/include/sysemu/os-posix.h
+++ b/include/sysemu/os-posix.h
@@ -23,6 +23,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers without CONFIG_POSIX, yet! */
+
 #ifndef QEMU_OS_POSIX_H
 #define QEMU_OS_POSIX_H
 
diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
index ff18b23db1..b828117bb6 100644
--- a/include/sysemu/os-win32.h
+++ b/include/sysemu/os-win32.h
@@ -23,6 +23,8 @@ 
  * THE SOFTWARE.
  */
 
+/* FIXME Does not pass make check-headers without CONFIG_WIN32, yet! */
+
 #ifndef QEMU_OS_WIN32_H
 #define QEMU_OS_WIN32_H
 
diff --git a/include/sysemu/xen-mapcache.h b/include/sysemu/xen-mapcache.h
index a03e2f1878..e3acb95b42 100644
--- a/include/sysemu/xen-mapcache.h
+++ b/include/sysemu/xen-mapcache.h
@@ -6,6 +6,8 @@ 
  *
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef XEN_MAPCACHE_H
 #define XEN_MAPCACHE_H
 
diff --git a/include/trace-tcg.h b/include/trace-tcg.h
index da68608c85..6084376731 100644
--- a/include/trace-tcg.h
+++ b/include/trace-tcg.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef TRACE_TCG_H
 #define TRACE_TCG_H
 
diff --git a/include/ui/console.h b/include/ui/console.h
index f981696848..4edb647178 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef CONSOLE_H
 #define CONSOLE_H
 
diff --git a/include/ui/egl-context.h b/include/ui/egl-context.h
index f004ce11a7..fa777a9d7b 100644
--- a/include/ui/egl-context.h
+++ b/include/ui/egl-context.h
@@ -1,3 +1,6 @@ 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+/* FIXME Does not pass make check-headers without CONFIG_OPENGL, yet! */
+
 #ifndef EGL_CONTEXT_H
 #define EGL_CONTEXT_H
 
diff --git a/include/ui/egl-helpers.h b/include/ui/egl-helpers.h
index d714127799..5ea65ddfa1 100644
--- a/include/ui/egl-helpers.h
+++ b/include/ui/egl-helpers.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef EGL_HELPERS_H
 #define EGL_HELPERS_H
 
diff --git a/include/ui/gtk.h b/include/ui/gtk.h
index d9eedad976..1bad122097 100644
--- a/include/ui/gtk.h
+++ b/include/ui/gtk.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef UI_GTK_H
 #define UI_GTK_H
 
diff --git a/include/ui/input.h b/include/ui/input.h
index 8c8ccb999f..718f152f98 100644
--- a/include/ui/input.h
+++ b/include/ui/input.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef INPUT_H
 #define INPUT_H
 
diff --git a/include/ui/pixel_ops.h b/include/ui/pixel_ops.h
index d390adfd1b..18d5e181a6 100644
--- a/include/ui/pixel_ops.h
+++ b/include/ui/pixel_ops.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 static inline unsigned int rgb_to_pixel8(unsigned int r, unsigned int g,
                                          unsigned int b)
 {
diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
index 0668109305..4f559c1941 100644
--- a/include/ui/qemu-pixman.h
+++ b/include/ui/qemu-pixman.h
@@ -3,6 +3,8 @@ 
  * See the COPYING file in the top-level directory.
  */
 
+/* FIXME Does not pass make check-headers without pixman, yet! */
+
 #ifndef QEMU_PIXMAN_H
 #define QEMU_PIXMAN_H
 
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index 0875b8d56b..c57525755f 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef SDL2_H
 #define SDL2_H
 
diff --git a/include/ui/shader.h b/include/ui/shader.h
index 4c5acb2ce8..c062cac55f 100644
--- a/include/ui/shader.h
+++ b/include/ui/shader.h
@@ -1,3 +1,5 @@ 
+/* FIXME Does not pass make check-headers without CONFIG_OPENGL, yet! */
+
 #ifndef QEMU_SHADER_H
 #define QEMU_SHADER_H
 
diff --git a/include/ui/spice-display.h b/include/ui/spice-display.h
index eed60e4fae..4bb30522a6 100644
--- a/include/ui/spice-display.h
+++ b/include/ui/spice-display.h
@@ -15,6 +15,8 @@ 
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+/* FIXME Does not pass make check-headers, yet! */
+
 #ifndef UI_SPICE_DISPLAY_H
 #define UI_SPICE_DISPLAY_H
 
diff --git a/tests/Makefile.include b/tests/Makefile.include
index a983dd32da..9eafc99df2 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -15,6 +15,7 @@  check-help:
 	@echo " $(MAKE) check-tcg            Run TCG tests"
 	@echo " $(MAKE) check-softfloat      Run FPU emulation tests"
 	@echo " $(MAKE) check-acceptance     Run all acceptance (functional) tests"
+	@echo " $(MAKE) check-source         Run source code tests"
 	@echo
 	@echo " $(MAKE) check-report.html    Generates an HTML test report"
 	@echo " $(MAKE) check-venv           Creates a Python venv for tests"
@@ -493,6 +494,7 @@  generated-files-y += tests/test-qapi-introspect.h
 
 QEMU_CFLAGS += -I$(SRC_PATH)/tests
 
+include $(SRC_PATH)/tests/check-headers.mak
 
 # Deps that are common to various different sets of tests below
 test-util-obj-y = libqemuutil.a
@@ -1159,13 +1161,39 @@  check-acceptance: check-venv $(TESTS_RESULTS_DIR)
             --failfast=on $(SRC_PATH)/tests/acceptance, \
             "AVOCADO", "tests/acceptance")
 
+# Header sanity checking
+
+RECURSIVE_TARGETS += check-headers check-bad-headers
+
+.PHONY: check-headers check-bad-headers
+ifeq ($(wildcard $(SRC_PATH)/.git),)
+check-headers check-bad-headers:
+	@echo "  SKIP  $@ (requires a git tree)"
+else
+check-headers: CFLAGS += -g0	# save disk space
+check-headers: $(check-header-tests:.c=.o)
+check-headers: $(addsuffix /check-headers, $(TARGET_DIRS))
+
+# Expected to fail:
+check-bad-headers: $(check-bad-header-tests:.c=.o)
+check-bad-headers: $(addsuffix /check-bad-headers, $(TARGET_DIRS))
+
+.SECONDARY: $(check-header-tests) $(check-bad-header-tests)
+$(check-header-tests) $(check-bad-header-tests): tests/header-test-template.c
+	@mkdir -p $(dir $@)
+	@sed 's,@header@,$(subst tests/headers/,,$(@:.c=.h)),' <$< >$@
+endif
+
 # Consolidated targets
 
-.PHONY: check-block check-qapi-schema check-qtest check-unit check check-clean
+.PHONY: check-block check-qapi-schema check-qtest check-unit check-source
+.PHONY: check check-clean
 check-qapi-schema: $(patsubst %,check-%, $(check-qapi-schema-y)) check-tests/qapi-schema/doc-good.texi
 check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS))
 check-block: $(patsubst %,check-%, $(check-block-y))
-check: check-qapi-schema check-unit check-softfloat check-qtest check-decodetree
+check-source: check-headers
+check: check-qapi-schema check-unit check-softfloat check-qtest check-decodetree check-source
+
 check-clean:
 	rm -rf $(check-unit-y) tests/*.o $(QEMU_IOTESTS_HELPERS-y)
 	rm -rf $(sort $(foreach target,$(SYSEMU_TARGET_LIST), $(check-qtest-$(target)-y)) $(check-qtest-generic-y))
@@ -1180,5 +1208,6 @@  all: $(QEMU_IOTESTS_HELPERS-y)
 
 -include $(wildcard tests/*.d)
 -include $(wildcard tests/libqos/*.d)
+-include $(check-header-tests:.c=.d) $(check-bad-header-tests:.c=.d)
 
 endif
diff --git a/tests/check-headers.mak b/tests/check-headers.mak
new file mode 100644
index 0000000000..367b9dfb9a
--- /dev/null
+++ b/tests/check-headers.mak
@@ -0,0 +1,92 @@ 
+# -*- Mode: makefile -*-
+
+ifneq ($(wildcard $(SRC_PATH)/.git),)
+
+# All headers:
+src-headers := $(filter %.h, $(shell cd $(SRC_PATH) && git ls-files))
+
+# Headers we don't want to test
+# Third party headers we don't want to mess with
+excluded-headers := $(filter disas/libvixl/vixl/% include/hw/xen/interface/% include/standard-headers/% linux-headers/% pc-bios/% slirp/%, $(src-headers))
+# Funny stuff we don't want to mess with
+excluded-headers += $(filter tests/multiboot/% tests/tcg/% tests/uefi-test-tools/%, $(src-headers))
+excluded-headers += scripts/cocci-macro-file.h
+# Exclude all but include/ for now:
+excluded-headers += $(filter-out include/%, $(src-headers))
+
+# Headers for target-dependent code only (require -DNEED_CPU_H etc.)
+target-header-regexp := NOTE: May only be included into target-dependent code
+target-headers := $(shell cd $(SRC_PATH) && egrep -l '$(target-header-regexp)' $(src-headers))
+
+# Headers for target-independent code only
+untarget-headers := include/exec/poison.h
+
+# Headers carrying a FIXME about this test
+# Extended regular expression matching the FIXME comment in headers
+# not expected to pass the test in this build's configuration:
+bad-header-regexp := FIXME Does not pass make check-headers(
+# Require <cpuid.h>:
+ifneq ($(CONFIG_CPUID_H),y)
+bad-header-regexp += without CONFIG_CPUID_H|
+endif
+# Require Linux:
+ifneq ($(CONFIG_LINUX),y)
+bad-header-regexp += without CONFIG_LINUX|
+endif
+# Require OpenGL:
+ifneq ($(CONFIG_OPENGL),y)
+bad-header-regexp += without CONFIG_OPENGL|
+endif
+# Require Pixman:
+# since there's no easy, precise way to detect "have pixman",
+# approximate with CONFIG_SOFTMMU
+ifneq ($(CONFIG_SOFTMMU),y)
+bad-header-regexp += without pixman|
+endif
+# Require POSIX:
+ifneq ($(CONFIG_POSIX),y)
+bad-header-regexp += without CONFIG_POSIX|
+endif
+# Require SPICE:
+ifneq ($(CONFIG_SPICE),y)
+bad-header-regexp += without CONFIG_SPICE|
+endif
+# Require any system emulator being built
+# can't use CONFIG_SOFTMMU, it's off in TARGET_DIR=%-user; check
+# TARGET_DIRS instead
+ifeq ($(filter %-softmmu, $(TARGET_DIRS)),)
+bad-header-regexp += without system emulation|
+endif
+# Require Windows:
+ifneq ($(CONFIG_WIN32),y)
+bad-header-regexp += without CONFIG_WIN32|
+endif
+# Require Xen:
+ifneq ($(CONFIG_XEN),y)
+bad-header-regexp += without CONFIG_XEN|
+endif
+bad-header-regexp += D06F00D to avoid empty RE)?, yet!
+# The headers not expected to pass the test in this build's configuration:
+bad-headers := $(shell cd $(SRC_PATH) && egrep -l '$(bad-header-regexp)' $(src-headers))
+
+# Checked headers (all less excluded and bad):
+# to be checked target-independently: all less excluded, bad, and target
+checked-headers := $(filter-out $(excluded-headers) $(bad-headers) $(target-headers), $(src-headers))
+check-header-tests := $(patsubst %.h, tests/headers/%.c, $(checked-headers))
+# to be checked for each target: all less excluded, bad, and untarget
+checked-target-headers := $(filter-out $(excluded-headers) $(bad-headers) $(untarget-headers), $(src-headers))
+# Testing target-independent headers for each target is massive
+# overkill, limit to target-dependent headers for now.  This leaves
+# gaps in testing.  TODO accept the overkill or pick something in between
+checked-target-headers := $(filter $(target-headers), $(checked-target-headers))
+check-target-header-tests := $(patsubst %.h, tests/headers-tgt/%.c, $(checked-target-headers))
+
+# Bad headers (all less excluded and checked):
+# to be checked target-independently: bad less excluded and target
+unchecked-headers := $(filter-out $(excluded-headers) $(target-headers), $(bad-headers))
+check-bad-header-tests := $(patsubst %.h, tests/headers/%.c, $(unchecked-headers))
+# to be checked for each target: bad less excluded and untarget
+unchecked-target-headers := $(filter-out $(excluded-headers) $(untarget-headers), $(bad-headers))
+check-bad-target-header-tests := $(patsubst %.h, tests/headers-tgt/%.c, $(unchecked-target-headers))
+
+endif
diff --git a/tests/header-test-template.c b/tests/header-test-template.c
new file mode 100644
index 0000000000..469804e80c
--- /dev/null
+++ b/tests/header-test-template.c
@@ -0,0 +1,23 @@ 
+/*
+ * Template for make check-headers
+ *
+ * Copyright (C) 2016 Red Hat, Inc.
+ *
+ * Authors:
+ *  Markus Armbruster <armbru@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later.  See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+
+/*
+ * Some headers define static functions that real includers all use,
+ * but this one of course doesn't.  Suppress the resulting warning:
+ */
+#pragma GCC diagnostic ignored "-Wunused-function"
+
+#include "@header@"
+/* Include a second time to catch missing header guard */
+#include "@header@"