aboutsummaryrefslogtreecommitdiffstats
path: root/config.h.in
diff options
context:
space:
mode:
Diffstat (limited to 'config.h.in')
-rw-r--r--config.h.in29
1 files changed, 9 insertions, 20 deletions
diff --git a/config.h.in b/config.h.in
index f36a3a474..1ab588506 100644
--- a/config.h.in
+++ b/config.h.in
@@ -420,27 +420,16 @@ extern uint64_t ottery_rand_uint64(void);
#endif
#endif
-#ifdef __cplusplus
- #define RSPAMD_CONSTRUCTOR(f) \
- static void f(void); \
- struct f##_t_ { f##_t_(void) { f(); } }; static f##_t_ f##_; \
- static void f(void)
-#elif defined(_MSC_VER)
- #pragma section(".CRT$XCU",read)
- #define INITIALIZER2_(f,p) \
- static void f(void); \
- __declspec(allocate(".CRT$XCU")) void (*f##_)(void) = f; \
- __pragma(comment(linker,"/include:" p #f "_")) \
- static void f(void)
- #ifdef _WIN64
- #define RSPAMD_CONSTRUCTOR(f) INITIALIZER2_(f,"")
- #else
- #define RSPAMD_CONSTRUCTOR(f) INITIALIZER2_(f,"_")
- #endif
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+ #define RSPAMD_CONSTRUCTOR(f) \
+ static void f(void) __attribute__((constructor)); \
+ static void f(void)
+ #define RSPAMD_DESTRUCTOR(f) \
+ static void f(void) __attribute__((destructor)); \
+ static void f(void)
#else
- #define RSPAMD_CONSTRUCTOR(f) \
- static void f(void) __attribute__((constructor)); \
- static void f(void)
+ /* In fact, everything else is not supported ¯\_(ツ)_/¯ */
+ #error incompatible compiler found, need gcc > 2.7 or clang
#endif
#endif