• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef Py_EXPORTS_H
2 #define Py_EXPORTS_H
3 
4 #if defined(_WIN32) || defined(__CYGWIN__)
5     #define Py_IMPORTED_SYMBOL __declspec(dllimport)
6     #define Py_EXPORTED_SYMBOL __declspec(dllexport)
7     #define Py_LOCAL_SYMBOL
8 #else
9 /*
10  * If we only ever used gcc >= 5, we could use __has_attribute(visibility)
11  * as a cross-platform way to determine if visibility is supported. However,
12  * we may still need to support gcc >= 4, as some Ubuntu LTS and Centos versions
13  * have 4 < gcc < 5.
14  */
15     #ifndef __has_attribute
16       #define __has_attribute(x) 0  // Compatibility with non-clang compilers.
17     #endif
18     #if (defined(__GNUC__) && (__GNUC__ >= 4)) ||\
19         (defined(__clang__) && __has_attribute(visibility))
20         #define Py_IMPORTED_SYMBOL __attribute__ ((visibility ("default")))
21         #define Py_EXPORTED_SYMBOL __attribute__ ((visibility ("default")))
22         #define Py_LOCAL_SYMBOL  __attribute__ ((visibility ("hidden")))
23     #else
24         #define Py_IMPORTED_SYMBOL
25         #define Py_EXPORTED_SYMBOL
26         #define Py_LOCAL_SYMBOL
27     #endif
28 #endif
29 
30 #endif /* Py_EXPORTS_H */
31