[PATCH 2/2] include: is_defined: implement __if_defined helper
Ahmad Fatoum
a.fatoum at pengutronix.de
Wed Apr 3 00:23:32 PDT 2024
This is useful when preprocessing non-C code that lacks an if statement
equivalent. For example, external device tree fragments can now specify:
#include <linux/is_defined.h>
__if_defined(bcm2711_rpi_4_dts, &emmc2, &sdhost) {
instead of having to use the more verbose #ifdef:
#ifdef bcm2711_rpi_4_dts
&emmc2 {
#else
&sdhost {
#endif
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
include/linux/is_defined.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/include/linux/is_defined.h b/include/linux/is_defined.h
index d68f8e877f9b..bfefca033f70 100644
--- a/include/linux/is_defined.h
+++ b/include/linux/is_defined.h
@@ -34,4 +34,10 @@
#define ___is_defined(val) ____is_defined(__ARG_PLACEHOLDER_##val)
#define ____is_defined(arg1_or_junk) __take_second_arg(arg1_or_junk 1, 0)
+#define __if_defined(x, a, b) ___if_defined(__is_defined(x), a, b)
+#define ___if_defined(val, a, b) ____if_defined(val, a, b)
+#define ____if_defined(val, a, b) ____if_defined_##val(a, b)
+#define ____if_defined_1(a, b) a
+#define ____if_defined_0(a, b) b
+
#endif
--
2.39.2
More information about the barebox
mailing list