Crypto++
8.8
Free C++ class library of cryptographic schemes
config_dll.h
Go to the documentation of this file.
1
// config_dll.h - written and placed in public domain by Jeffrey Walton
2
// the bits that make up this source file are from the
3
// library's monolithic config.h.
4
5
/// \file config_dll.h
6
/// \brief Library configuration file
7
/// \details <tt>config_dll.h</tt> provides defines for shared objects and
8
/// dynamic libraries. Generally speaking the macros are used to export
9
/// classes and template classes from the Win32 dynamic link library.
10
/// When not building the Win32 dynamic link library they are mostly an extern
11
/// template declaration.
12
/// \details In practice they are a furball coughed up by a cat and then peed
13
/// on by a dog. They are awful to get just right because of inconsistent
14
/// compiler support for extern templates, manual instantiation and the FIPS DLL.
15
/// \details <tt>config.h</tt> was split into components in May 2019 to better
16
/// integrate with Autoconf and its feature tests. The splitting occurred so
17
/// users could continue to include <tt>config.h</tt> while allowing Autoconf
18
/// to write new <tt>config_asm.h</tt> and new <tt>config_cxx.h</tt> using
19
/// its feature tests.
20
/// \note You should include <tt>config.h</tt> rather than <tt>config_dll.h</tt>
21
/// directly.
22
/// \sa <A HREF="https://github.com/weidai11/cryptopp/issues/835">Issue 835,
23
/// Make config.h more autoconf friendly</A>,
24
/// <A HREF="https://www.cryptopp.com/wiki/Configure.sh">Configure.sh script</A>,
25
/// <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>,
26
/// and <A HREF="https://www.cryptopp.com/wiki/FIPS_DLL">FIPS DLL</A>
27
/// on the Crypto++ wiki
28
/// \since Crypto++ 8.3
29
30
#ifndef CRYPTOPP_CONFIG_DLL_H
31
#define CRYPTOPP_CONFIG_DLL_H
32
33
#include "
config_os.h
"
34
35
#if defined(CRYPTOPP_DOXYGEN_PROCESSING)
36
37
/// \brief Win32 define for dynamic link libraries
38
/// \details CRYPTOPP_IMPORTS is set in the Visual Studio project files.
39
/// When the macro is set, <tt>CRYPTOPP_DLL</tt> is defined to
40
/// <tt>__declspec(dllimport)</tt>.
41
/// \details This macro has no effect on Unix & Linux.
42
/// \sa <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>,
43
/// and <A HREF="https://www.cryptopp.com/wiki/FIPS_DLL">FIPS DLL</A>
44
/// on the Crypto++ wiki
45
#define CRYPTOPP_IMPORTS ...
46
47
/// \brief Win32 define for dynamic link libraries
48
/// \details CRYPTOPP_EXPORTS is set in the Visual Studio project files.
49
/// When the macro is set, <tt>CRYPTOPP_DLL</tt> is defined to
50
/// <tt>__declspec(dllexport)</tt>.
51
/// \details This macro has no effect on Unix & Linux.
52
/// \sa <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>,
53
/// and <A HREF="https://www.cryptopp.com/wiki/FIPS_DLL">FIPS DLL</A>
54
/// on the Crypto++ wiki
55
#define CRYPTOPP_EXPORTS ...
56
57
/// \brief Win32 define for dynamic link libraries
58
/// \details CRYPTOPP_IS_DLL is set in the Visual Studio project files.
59
/// \sa <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>,
60
/// and <A HREF="https://www.cryptopp.com/wiki/FIPS_DLL">FIPS DLL</A>
61
/// on the Crypto++ wiki
62
#define CRYPTOPP_IS_DLL
63
64
/// \brief Instantiate templates in a dynamic library
65
/// \details CRYPTOPP_DLL_TEMPLATE_CLASS decoration should be used
66
/// for classes intended to be exported from dynamic link libraries.
67
/// \details This macro is primarily used on Win32, but sees some
68
/// action on Unix & Linux due to the source file <tt>dll.cpp</tt>.
69
/// \sa <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>,
70
/// and <A HREF="https://www.cryptopp.com/wiki/FIPS_DLL">FIPS DLL</A>
71
/// on the Crypto++ wiki
72
#define CRYPTOPP_DLL_TEMPLATE_CLASS ...
73
74
/// \brief Instantiate templates in a dynamic library
75
/// \details CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS decoration should be used
76
/// for template classes intended to be exported from dynamic link libraries.
77
/// \details This macro is primarily used on Win32, but sees some
78
/// action on Unix & Linux due to the source file <tt>dll.cpp</tt>.
79
/// \sa <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>,
80
/// and <A HREF="https://www.cryptopp.com/wiki/FIPS_DLL">FIPS DLL</A>
81
/// on the Crypto++ wiki
82
#define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS ...
83
84
/// \brief Instantiate templates in a dynamic library
85
/// \details CRYPTOPP_STATIC_TEMPLATE_CLASS decoration should be used
86
/// for template classes intended to be exported from dynamic link libraries.
87
/// \details This macro is primarily used on Win32, but sees some
88
/// action on Unix & Linux due to the source file <tt>dll.cpp</tt>.
89
/// \sa <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>,
90
/// and <A HREF="https://www.cryptopp.com/wiki/FIPS_DLL">FIPS DLL</A>
91
/// on the Crypto++ wiki
92
#define CRYPTOPP_STATIC_TEMPLATE_CLASS ...
93
94
/// \brief Instantiate templates in a dynamic library
95
/// \details CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS decoration should be used
96
/// for template classes intended to be exported from dynamic link libraries.
97
/// \details This macro is primarily used on Win32, but sees some
98
/// action on Unix & Linux due to the source file <tt>dll.cpp</tt>.
99
/// \sa <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>,
100
/// and <A HREF="https://www.cryptopp.com/wiki/FIPS_DLL">FIPS DLL</A>
101
/// on the Crypto++ wiki
102
#define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS ...
103
104
/// \brief Override for internal linkage
105
/// \details CRYPTOPP_TABLE can be used to override internal linkage
106
/// on tables with the <tt>const</tt> qualifier. According to C++ rules
107
/// a declaration with <tt>const</tt> qualifier is internal linkage.
108
/// \note The name CRYPTOPP_TABLE was chosen because it is often used to
109
/// export a table, like AES or SHA constants. The name avoids collisions
110
/// with the DLL gear macros, like CRYPTOPP_EXPORTS and CRYPTOPP_EXTERN.
111
#define CRYPTOPP_TABLE extern
112
113
/// \brief Win32 calling convention
114
/// \details CRYPTOPP_API sets the calling convention on Win32.
115
/// On Win32 CRYPTOPP_API is <tt>__cedcl</tt>. On Unix & Linux
116
/// CRYPTOPP_API is defined to nothing.
117
/// \sa <A HREF="https://www.cryptopp.com/wiki/Visual_Studio">Visual Studio</A>
118
/// on the Crypto++ wiki
119
#define CRYPTOPP_API ...
120
121
#else // CRYPTOPP_DOXYGEN_PROCESSING
122
123
#if defined(CRYPTOPP_WIN32_AVAILABLE)
124
125
#if defined(CRYPTOPP_EXPORTS)
126
# define CRYPTOPP_IS_DLL
127
# define CRYPTOPP_DLL __declspec(dllexport)
128
#elif defined(CRYPTOPP_IMPORTS)
129
# define CRYPTOPP_IS_DLL
130
# define CRYPTOPP_DLL __declspec(dllimport)
131
#else
132
# define CRYPTOPP_DLL
133
#endif
134
135
// C++ makes const internal linkage
136
#define CRYPTOPP_TABLE extern
137
#define CRYPTOPP_API __cdecl
138
139
#else // not CRYPTOPP_WIN32_AVAILABLE
140
141
// C++ makes const internal linkage
142
#define CRYPTOPP_TABLE extern
143
#define CRYPTOPP_DLL
144
#define CRYPTOPP_API
145
146
#endif // CRYPTOPP_WIN32_AVAILABLE
147
148
#if defined(__MWERKS__)
149
# define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern class CRYPTOPP_DLL
150
#elif defined(__BORLANDC__) || defined(__SUNPRO_CC)
151
# define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL
152
#else
153
# define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern template class CRYPTOPP_DLL
154
#endif
155
156
#if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_IMPORTS)
157
# define CRYPTOPP_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL
158
#else
159
# define CRYPTOPP_DLL_TEMPLATE_CLASS CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS
160
#endif
161
162
#if defined(__MWERKS__)
163
# define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern class
164
#elif defined(__BORLANDC__) || defined(__SUNPRO_CC)
165
# define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS template class
166
#else
167
# define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern template class
168
#endif
169
170
#if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_EXPORTS)
171
# define CRYPTOPP_STATIC_TEMPLATE_CLASS template class
172
#else
173
# define CRYPTOPP_STATIC_TEMPLATE_CLASS CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS
174
#endif
175
176
#endif // CRYPTOPP_DOXYGEN_PROCESSING
177
178
#endif // CRYPTOPP_CONFIG_DLL_H
config_os.h
Library configuration file.
Generated on Fri Jun 14 2024 14:11:58 for Crypto++ by
1.8.17