On Tue, Jan 07, 2014 at 11:09:11AM +0100, Michal Marek wrote: > On 2014-01-07 10:48, Geert Uytterhoeven wrote: > > Furthermore some userspace may rely on doing #define XXX to avoid > > including a specific kernel header (yes, it's ugly). > > This pattern is also sometimes used: > $ head -6 include/linux/spinlock_up.h > #ifndef __LINUX_SPINLOCK_UP_H > #define __LINUX_SPINLOCK_UP_H > > #ifndef __LINUX_SPINLOCK_H > # error "please don't include this file directly" > #endif > > And there is nothing ugly about it. That's debatable, but it's certainly reasonable to try to enforce non-inclusion of "internal" headers directly. However, for headers not exposed to userspace, it'd be easy to write that as: include/linux/spinlock.h: #pragma once #define LINUX_SPINLOCK_H_INCLUDED include/linux/spinlock_up.h: #pragma once #ifndef LINUX_SPINLOCK_H_INCLUDED #error "Only include this file via spinlock.h, never directly" #endif > So #pragma once is probably a good > idea for most headers that are not exposed to userspace. But making it a > requirement in scripts/checkpatch.pl or Documentation/CodingStyle means > that it will become hard to defend the few legitimate uses of ifndef > guards against people who have a printed copy of checkpatch.pl under > their pillow. Any mention in CodingStyle or check in checkpatch would need to cover the two exceptions: uapi, and headers that are intentionally parsed multiple times for preprocessor magic (TRACE_HEADER_MULTI_READ). - Josh Triplett -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html