Set ELF visibility to keep all of our external symbols to ourselves.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 1 Oct 2019 10:40:41 +0000 (11:40 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 1 Oct 2019 20:51:10 +0000 (21:51 +0100)
catacomb-python.h
catacomb.c

index df29099..5815343 100644 (file)
 #include <catacomb/share.h>
 #include <catacomb/gfshare.h>
 
+/*----- Other preliminaries -----------------------------------------------*/
+
+#define GOBBLE_SEMI extern int notexist
+#if defined(__GNUC__) && defined(__ELF__)
+#  define PRIVATE_SYMBOLS _Pragma("GCC visibility push(hidden)") GOBBLE_SEMI
+#  define PUBLIC_SYMBOLS _Pragma("GCC visibility pop") GOBBLE_SEMI
+#  define EXPORT __attribute__((__visibility__("default")))
+#else
+#  define PRIVATE_SYMBOLS GOBBLE_SEMI
+#  define PUBLIC_SYMBOLS GOBBLE_SEMI
+#  define EXPORT
+#endif
+
+PRIVATE_SYMBOLS;
+
 /*----- Utility macros ----------------------------------------------------*/
 
 #define RETURN_OBJ(obj) do { Py_INCREF(obj); return (obj); } while (0)
index b596b5e..affb5d3 100644 (file)
@@ -167,7 +167,7 @@ static void init_random(void)
 #endif
 }
 
-void init_base(void)
+EXPORT void init_base(void)
 {
   PyObject *mod;
   addmethods(methods);