On Thu, Jan 12, 2023 at 12:50:05PM +0100, Markus Armbruster wrote: > docs/devel/style.rst mandates: > > The "qemu/osdep.h" header contains preprocessor macros that affect > the behavior of core system headers like <stdint.h>. It must be > the first include so that core system headers included by external > libraries get the preprocessor macros that QEMU depends on. > > Do not include "qemu/osdep.h" from header files since the .c file > will have already included it. > > A few violations have crept in. Fix them. > > Signed-off-by: Markus Armbruster <[email protected]> > Reviewed-by: Philippe Mathieu-Daudé <[email protected]> > Reviewed-by: Bin Meng <[email protected]> > Reviewed-by: Taylor Simpson <[email protected]> > Reviewed-by: Alistair Francis <[email protected]>
With my awesome grep skillz I found one more: $ grep -r --include='*.h' qemu/osdep.h include/block/graph-lock.h:#include "qemu/osdep.h" Looks like all C files must include qemu/osdep.h, no? How about 1- add -include qemu/osdep.h on compile command line drop #include "qemu/osdep.h" from C files 2- drop double include guards, replace with a warning. following patch implements part 2: qemu/osdep: don't include it from headers doing so will lead to trouble eventually - instead of working around such cases make it more likely it will fail. Signed-off-by: Michael S. Tsirkin <[email protected]> --- diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 7d059ad526..e4a60f911c 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -24,7 +24,12 @@ * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. */ -#ifndef QEMU_OSDEP_H +#ifdef QEMU_OSDEP_H +#warning "Never include qemu/osdep.h from a header!" +#endif + +static inline void qemu_osdep_never_include_from_header(void) {} + #define QEMU_OSDEP_H #include "config-host.h" @@ -714,5 +719,3 @@ static inline int platform_does_not_support_system(const char *command) #ifdef __cplusplus } #endif - -#endif
