xref: /third_party/python/Include/exports.h (revision 7db96d56)
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