From bf4d9ee05b6f8737c57088e93c3b9ac2b6bcce6f Mon Sep 17 00:00:00 2001
From: proplus <test@example.com>
Date: Wed, 6 Sep 2023 15:35:32 +0200
Subject: [PATCH] Fixed #29: restore old macro and rename new one

---
 src/trees-common.h | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/src/trees-common.h b/src/trees-common.h
index 821883b..97b8cb5 100644
--- a/src/trees-common.h
+++ b/src/trees-common.h
@@ -49,6 +49,29 @@
        __typeof__ (b) _b = (b); \
      _a > _b ? _a : _b; })
 
+/* Fix dovecot's broken DOVECOT_PREREQ version detection macro */
+#if !defined(DOVECOT_VERSION_MAJOR) || !defined(DOVECOT_PREREQ)
+/* Version detection didn't exist before 2.1.16 */
+#  error "This plugin doesn't work with dovecot version below 2.1.16"
+#else
+/* DOVECOT_VERSION_MICRO got added in 2.3.18 */
+/* In 2.3.18, the macro got broken too, so we use that for detection */
+/* see https://github.com/dovecot/core/commit/31c2413 */
+#  if defined(DOVECOT_VERSION_MICRO)
+/* re-define the macro to the old signature */
+#    undef DOVECOT_PREREQ
+#    define DOVECOT_PREREQ(maj, min) \
+            ((DOVECOT_VERSION_MAJOR << 16) + \
+              DOVECOT_VERSION_MINOR >= ((maj) << 16) + (min))
+/* if you want to detect micro version too, use this instead */
+#    define DOVECOT_PREREQ_MICRO(maj, min, micro) \
+            ((DOVECOT_VERSION_MAJOR << 24) + \
+	         (DOVECOT_VERSION_MINOR << 16) + \
+	         DOVECOT_VERSION_MICRO >= \
+	         ((maj) << 24) + ((min) << 16) + (micro))
+#  endif /* defined(DOVECOT_VERSION_MICRO) */
+#endif /* !defined(DOVECOT_VERSION_MAJOR) || !defined(DOVECOT_PREREQ) */
+
 extern const unsigned char trees_header[3];
 
 int trees_initialize(void);
-- 
GitLab