PLplot 5.15.0
Loading...
Searching...
No Matches
pldll.h
Go to the documentation of this file.
1#ifndef __PL_DLL_H
2#define __PL_DLL_H
3
4// In some cases, this header is #included without #including
5// plplot_config.h which normally #defines ENABLE_DYNDRIVERS (or not).
6#ifndef ENABLE_DYNDRIVERS
7// Define if there is support for dynamically loaded drivers
8#define ENABLE_DYNDRIVERS
9#endif
10
11
12#ifdef USINGDLL
13 #if defined ( _WIN32 )
14// Visual C/C++, Borland, MinGW and Watcom
15 #if defined ( __VISUALC__ ) || defined ( _MSC_VER ) || defined ( __BORLANDC__ ) || defined ( __GNUC__ ) || defined ( __WATCOMC__ )
16 #define PLDLLEXPORT __declspec( dllexport )
17 #define PLDLLIMPORT __declspec( dllimport )
18 #else
19 #define PLDLLEXPORT
20 #define PLDLLIMPORT
21 #endif
22 #elif defined ( __CYGWIN__ )
23 #define PLDLLEXPORT __declspec( dllexport )
24 #define PLDLLIMPORT __declspec( dllimport )
25 #elif defined ( __GNUC__ ) && __GNUC__ > 3
26// Follow ideas in http://gcc.gnu.org/wiki/Visibility for GCC version 4.x
27// The following forces exported symbols specifically designated with
28// PLDLLEXPORT to be visible.
29 #define PLDLLEXPORT __attribute__ ( ( visibility( "default" ) ) )
30 #define PLDLLIMPORT
31 #endif
32#endif
33
34// For an unknown compiler or static built we clear the macros
35#ifndef PLDLLEXPORT
36 #define PLDLLEXPORT
37 #define PLDLLIMPORT
38#endif
39
40// The IMPEXP macros will always be set to DLLIMPORT (even for
41// the static library, but DLLIMPORT is empty in this case), if
42// cmake didn't set the corresponding macro xxxx_EXPORTS when the
43// corresponding library is built (DLLIMPEXP is set to DLLEXPORT
44// then)
45#if defined ( plplot_EXPORTS )
46 #define PLDLLIMPEXP PLDLLEXPORT
47 #define PLDLLIMPEXP_DATA( type ) PLDLLEXPORT type
48#else
49 #define PLDLLIMPEXP PLDLLIMPORT
50 #define PLDLLIMPEXP_DATA( type ) PLDLLIMPORT type
51#endif
52
53// for dynamic drivers set the macros correctly. If a shared library is built,
54// but dyanmic drivers disabled, the driver dll macros are the same as the
55// plplot dll macros
56#ifdef ENABLE_DYNDRIVERS
57 #if defined ( aqt_EXPORTS ) || \
58 defined ( cairo_EXPORTS ) || \
59 defined ( cgm_EXPORTS ) || \
60 defined ( gd_EXPORTS ) || \
61 defined ( mem_EXPORTS ) || \
62 defined ( ntk_EXPORTS ) || \
63 defined ( null_EXPORTS ) || \
64 defined ( pdf_EXPORTS ) || \
65 defined ( plmeta_EXPORTS ) || \
66 defined ( ps_EXPORTS ) || \
67 defined ( pstex_EXPORTS ) || \
68 defined ( psttf_EXPORTS ) || \
69 defined ( svg_EXPORTS ) || \
70 defined ( tk_EXPORTS ) || \
71 defined ( tkwin_EXPORTS ) || \
72 defined ( wingcc_EXPORTS ) || \
73 defined ( wxwidgets_EXPORTS ) || \
74 defined ( xfig_EXPORTS ) || \
75 defined ( xwin_EXPORTS ) || \
76 defined ( qt_EXPORTS ) || \
77 defined ( wingdi_EXPORTS )
78 #define PLDLLIMPEXP_DRIVER PLDLLEXPORT
79 #define PLDLLIMPEXP_DRIVER_DATA( type ) PLDLLEXPORT type
80 #else
81 #define PLDLLIMPEXP_DRIVER PLDLLIMPORT
82 #define PLDLLIMPEXP_DRIVER_DATA( type ) PLDLLIMPORT type
83 #endif
84#else
85 #define PLDLLIMPEXP_DRIVER PLDLLIMPEXP
86 #define PLDLLIMPEXP_DRIVER_DATA( type ) PLDLLIMPEXP_DATA( type )
87#endif
88
89#if defined ( plplotcxx_EXPORTS )
90 #define PLDLLIMPEXP_CXX PLDLLEXPORT
91 #define PLDLLIMPEXP_CXX_DATA( type ) PLDLLEXPORT type
92#else
93 #define PLDLLIMPEXP_CXX PLDLLIMPORT
94 #define PLDLLIMPEXP_CXX_DATA( type ) PLDLLIMPORT type
95#endif
96
97#if defined ( plplotfortranc_EXPORTS )
98 #define PLDLLIMPEXP_FORTRANC PLDLLEXPORT
99 #define PLDLLIMPEXP_FORTRANC_DATA( type ) PLDLLEXPORT type
100#else
101 #define PLDLLIMPEXP_FORTRANC PLDLLIMPORT
102 #define PLDLLIMPEXP_FORTRANC_DATA( type ) PLDLLIMPORT type
103#endif
104
105#if defined ( plplotwxwidgets_EXPORTS )
106 #define PLDLLIMPEXP_WX PLDLLEXPORT
107 #define PLDLLIMPEXP_WX_DATA( type ) PLDLLEXPORT type
108#else
109 #define PLDLLIMPEXP_WX PLDLLIMPORT
110 #define PLDLLIMPEXP_WX_DATA( type ) PLDLLIMPORT type
111#endif
112
113// Note for the case when ENABLE_DYNDRIVERS is not defined, the
114// libplplot build specifically includes the tclmatrix code (see
115// cmake/modules/tk.cmake).
116#if defined ( tclmatrix_EXPORTS ) || \
117 ( !defined ( ENABLE_DYNDRIVERS ) && defined ( plplot_EXPORTS ) )
118 #define PLDLLIMPEXP_TCLMAT PLDLLEXPORT
119 #define PLDLLIMPEXP_TCLMAT_DATA( type ) PLDLLEXPORT type
120#else
121 #define PLDLLIMPEXP_TCLMAT PLDLLIMPORT
122 #define PLDLLIMPEXP_TCLMAT_DATA( type ) PLDLLIMPORT type
123#endif
124
125// Note for the case when ENABLE_DYNDRIVERS is not defined, the
126// libplplot build specifically includes the plplottcltk code (see
127// cmake/modules/tk.cmake).
128#if defined ( plplottcltk_Main_EXPORTS ) || \
129 defined ( plplottcltk_EXPORTS ) || \
130 ( !defined ( ENABLE_DYNDRIVERS ) && defined ( plplot_EXPORTS ) )
131 #define PLDLLIMPEXP_TCLTK PLDLLEXPORT
132 #define PLDLLIMPEXP_TCLTK_DATA( type ) PLDLLEXPORT type
133#else
134 #define PLDLLIMPEXP_TCLTK PLDLLIMPORT
135 #define PLDLLIMPEXP_TCLTK_DATA( type ) PLDLLIMPORT type
136#endif
137
138// Note for the case when ENABLE_DYNDRIVERS is not defined, the
139// libplplot build specifically includes bindings/qt-gui/plqt.cpp (see
140// cmake/modules/qt.cmake).
141#if defined ( plplotqt_EXPORTS ) || \
142 ( !defined ( ENABLE_DYNDRIVERS ) && defined ( plplot_EXPORTS ) )
143 #define PLDLLIMPEXP_QT PLDLLEXPORT
144 #define PLDLLIMPEXP_QT_DATA( type ) PLDLLEXPORT type
145#else
146 #define PLDLLIMPEXP_QT PLDLLIMPORT
147 #define PLDLLIMPEXP_QT_DATA( type ) PLDLLIMPORT type
148#endif
149
150#if defined ( plplot_pyqt4_EXPORTS )
151 #define PLDLLIMPEXP_PYQT4 PLDLLEXPORT
152 #define PLDLLIMPEXP_PYQT4_DATA( type ) PLDLLEXPORT type
153#else
154 #define PLDLLIMPEXP_PYQT4 PLDLLIMPORT
155 #define PLDLLIMPEXP_PYQT4_DATA( type ) PLDLLIMPORT type
156#endif
157
158#if defined ( plplot_pyqt5_EXPORTS )
159 #define PLDLLIMPEXP_PYQT5 PLDLLEXPORT
160 #define PLDLLIMPEXP_PYQT5_DATA( type ) PLDLLEXPORT type
161#else
162 #define PLDLLIMPEXP_PYQT5 PLDLLIMPORT
163 #define PLDLLIMPEXP_PYQT5_DATA( type ) PLDLLIMPORT type
164#endif
165
166#endif // __PL_DLL_H