|
1 /* e_os2.h */ |
|
2 /* ==================================================================== |
|
3 * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. |
|
4 * |
|
5 * Redistribution and use in source and binary forms, with or without |
|
6 * modification, are permitted provided that the following conditions |
|
7 * are met: |
|
8 * |
|
9 * 1. Redistributions of source code must retain the above copyright |
|
10 * notice, this list of conditions and the following disclaimer. |
|
11 * |
|
12 * 2. Redistributions in binary form must reproduce the above copyright |
|
13 * notice, this list of conditions and the following disclaimer in |
|
14 * the documentation and/or other materials provided with the |
|
15 * distribution. |
|
16 * |
|
17 * 3. All advertising materials mentioning features or use of this |
|
18 * software must display the following acknowledgment: |
|
19 * "This product includes software developed by the OpenSSL Project |
|
20 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" |
|
21 * |
|
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to |
|
23 * endorse or promote products derived from this software without |
|
24 * prior written permission. For written permission, please contact |
|
25 * openssl-core@openssl.org. |
|
26 * |
|
27 * 5. Products derived from this software may not be called "OpenSSL" |
|
28 * nor may "OpenSSL" appear in their names without prior written |
|
29 * permission of the OpenSSL Project. |
|
30 * |
|
31 * 6. Redistributions of any form whatsoever must retain the following |
|
32 * acknowledgment: |
|
33 * "This product includes software developed by the OpenSSL Project |
|
34 * for use in the OpenSSL Toolkit (http://www.openssl.org/)" |
|
35 * |
|
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY |
|
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
|
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR |
|
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
|
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
|
47 * OF THE POSSIBILITY OF SUCH DAMAGE. |
|
48 * ==================================================================== |
|
49 * |
|
50 * This product includes cryptographic software written by Eric Young |
|
51 * (eay@cryptsoft.com). This product includes software written by Tim |
|
52 * Hudson (tjh@cryptsoft.com). |
|
53 * |
|
54 */ |
|
55 |
|
56 #include <openssl/opensslconf.h> |
|
57 |
|
58 #ifndef HEADER_E_OS2_H |
|
59 #define HEADER_E_OS2_H |
|
60 |
|
61 #ifdef __cplusplus |
|
62 extern "C" { |
|
63 #endif |
|
64 |
|
65 /****************************************************************************** |
|
66 * Detect operating systems. This probably needs completing. |
|
67 * The result is that at least one OPENSSL_SYS_os macro should be defined. |
|
68 * However, if none is defined, Unix is assumed. |
|
69 **/ |
|
70 |
|
71 #define OPENSSL_SYS_UNIX |
|
72 |
|
73 /* ----------------------- Macintosh, before MacOS X ----------------------- */ |
|
74 #if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC) |
|
75 # undef OPENSSL_SYS_UNIX |
|
76 # define OPENSSL_SYS_MACINTOSH_CLASSIC |
|
77 #endif |
|
78 |
|
79 /* ---------------------- Microsoft operating systems ---------------------- */ |
|
80 |
|
81 /* The 16 bit environments are pretty straightforward */ |
|
82 #if defined(OPENSSL_SYSNAME_WIN16) || defined(OPENSSL_SYSNAME_MSDOS) |
|
83 # undef OPENSSL_SYS_UNIX |
|
84 # define OPENSSL_SYS_MSDOS |
|
85 #endif |
|
86 #if defined(OPENSSL_SYSNAME_WIN16) |
|
87 # undef OPENSSL_SYS_UNIX |
|
88 # define OPENSSL_SYS_WIN16 |
|
89 #endif |
|
90 |
|
91 /* For 32 bit environment, there seems to be the CygWin environment and then |
|
92 all the others that try to do the same thing Microsoft does... */ |
|
93 #if defined(OPENSSL_SYSNAME_UWIN) |
|
94 # undef OPENSSL_SYS_UNIX |
|
95 # define OPENSSL_SYS_WIN32_UWIN |
|
96 #else |
|
97 # if defined(__CYGWIN32__) || defined(OPENSSL_SYSNAME_CYGWIN32) |
|
98 # undef OPENSSL_SYS_UNIX |
|
99 # define OPENSSL_SYS_WIN32_CYGWIN |
|
100 # else |
|
101 # if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32) |
|
102 # undef OPENSSL_SYS_UNIX |
|
103 # define OPENSSL_SYS_WIN32 |
|
104 # endif |
|
105 # if defined(OPENSSL_SYSNAME_WINNT) |
|
106 # undef OPENSSL_SYS_UNIX |
|
107 # define OPENSSL_SYS_WINNT |
|
108 # endif |
|
109 # if defined(OPENSSL_SYSNAME_WINCE) |
|
110 # undef OPENSSL_SYS_UNIX |
|
111 # define OPENSSL_SYS_WINCE |
|
112 # endif |
|
113 # endif |
|
114 #endif |
|
115 |
|
116 /* Anything that tries to look like Microsoft is "Windows" */ |
|
117 #if defined(OPENSSL_SYS_WIN16) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) |
|
118 # undef OPENSSL_SYS_UNIX |
|
119 # define OPENSSL_SYS_WINDOWS |
|
120 # ifndef OPENSSL_SYS_MSDOS |
|
121 # define OPENSSL_SYS_MSDOS |
|
122 # endif |
|
123 #endif |
|
124 |
|
125 /* DLL settings. This part is a bit tough, because it's up to the application |
|
126 implementor how he or she will link the application, so it requires some |
|
127 macro to be used. */ |
|
128 #ifdef OPENSSL_SYS_WINDOWS |
|
129 # ifndef OPENSSL_OPT_WINDLL |
|
130 # if defined(_WINDLL) /* This is used when building OpenSSL to indicate that |
|
131 DLL linkage should be used */ |
|
132 # define OPENSSL_OPT_WINDLL |
|
133 # endif |
|
134 # endif |
|
135 #endif |
|
136 |
|
137 /* -------------------------------- OpenVMS -------------------------------- */ |
|
138 #if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS) |
|
139 # undef OPENSSL_SYS_UNIX |
|
140 # define OPENSSL_SYS_VMS |
|
141 # if defined(__DECC) |
|
142 # define OPENSSL_SYS_VMS_DECC |
|
143 # elif defined(__DECCXX) |
|
144 # define OPENSSL_SYS_VMS_DECC |
|
145 # define OPENSSL_SYS_VMS_DECCXX |
|
146 # else |
|
147 # define OPENSSL_SYS_VMS_NODECC |
|
148 # endif |
|
149 #endif |
|
150 |
|
151 /* --------------------------------- OS/2 ---------------------------------- */ |
|
152 #if defined(__EMX__) || defined(__OS2__) |
|
153 # undef OPENSSL_SYS_UNIX |
|
154 # define OPENSSL_SYS_OS2 |
|
155 #endif |
|
156 |
|
157 /* --------------------------------- Unix ---------------------------------- */ |
|
158 #ifdef OPENSSL_SYS_UNIX |
|
159 # if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX) |
|
160 # define OPENSSL_SYS_LINUX |
|
161 # endif |
|
162 # ifdef OPENSSL_SYSNAME_MPE |
|
163 # define OPENSSL_SYS_MPE |
|
164 # endif |
|
165 # ifdef OPENSSL_SYSNAME_SNI |
|
166 # define OPENSSL_SYS_SNI |
|
167 # endif |
|
168 # ifdef OPENSSL_SYSNAME_ULTRASPARC |
|
169 # define OPENSSL_SYS_ULTRASPARC |
|
170 # endif |
|
171 # ifdef OPENSSL_SYSNAME_NEWS4 |
|
172 # define OPENSSL_SYS_NEWS4 |
|
173 # endif |
|
174 # ifdef OPENSSL_SYSNAME_MACOSX |
|
175 # define OPENSSL_SYS_MACOSX |
|
176 # endif |
|
177 # ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY |
|
178 # define OPENSSL_SYS_MACOSX_RHAPSODY |
|
179 # define OPENSSL_SYS_MACOSX |
|
180 # endif |
|
181 # ifdef OPENSSL_SYSNAME_SUNOS |
|
182 # define OPENSSL_SYS_SUNOS |
|
183 #endif |
|
184 # if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY) |
|
185 # define OPENSSL_SYS_CRAY |
|
186 # endif |
|
187 # if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX) |
|
188 # define OPENSSL_SYS_AIX |
|
189 # endif |
|
190 #endif |
|
191 |
|
192 /* ------------------------------- VxWorks --------------------------------- */ |
|
193 #ifdef OPENSSL_SYSNAME_VXWORKS |
|
194 # define OPENSSL_SYS_VXWORKS |
|
195 #endif |
|
196 |
|
197 /** |
|
198 * That's it for OS-specific stuff |
|
199 *****************************************************************************/ |
|
200 |
|
201 |
|
202 /* Specials for I/O an exit */ |
|
203 #ifdef OPENSSL_SYS_MSDOS |
|
204 # define OPENSSL_UNISTD_IO <io.h> |
|
205 # define OPENSSL_DECLARE_EXIT extern void exit(int); |
|
206 #else |
|
207 # define OPENSSL_UNISTD_IO OPENSSL_UNISTD |
|
208 # define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ |
|
209 #endif |
|
210 |
|
211 /* Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare |
|
212 certain global symbols that, with some compilers under VMS, have to be |
|
213 defined and declared explicitely with globaldef and globalref. |
|
214 Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare |
|
215 DLL exports and imports for compilers under Win32. These are a little |
|
216 more complicated to use. Basically, for any library that exports some |
|
217 global variables, the following code must be present in the header file |
|
218 that declares them, before OPENSSL_EXTERN is used: |
|
219 |
|
220 #ifdef SOME_BUILD_FLAG_MACRO |
|
221 # undef OPENSSL_EXTERN |
|
222 # define OPENSSL_EXTERN OPENSSL_EXPORT |
|
223 #endif |
|
224 |
|
225 The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL |
|
226 have some generally sensible values, and for OPENSSL_EXTERN to have the |
|
227 value OPENSSL_IMPORT. |
|
228 */ |
|
229 |
|
230 #if defined(OPENSSL_SYS_VMS_NODECC) |
|
231 # define OPENSSL_EXPORT globalref |
|
232 # define OPENSSL_IMPORT globalref |
|
233 # define OPENSSL_GLOBAL globaldef |
|
234 #elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) |
|
235 # define OPENSSL_EXPORT extern _declspec(dllexport) |
|
236 # define OPENSSL_IMPORT extern _declspec(dllimport) |
|
237 # define OPENSSL_GLOBAL |
|
238 #else |
|
239 # define OPENSSL_EXPORT extern |
|
240 # define OPENSSL_IMPORT extern |
|
241 # define OPENSSL_GLOBAL |
|
242 #endif |
|
243 #define OPENSSL_EXTERN OPENSSL_IMPORT |
|
244 |
|
245 /* Macros to allow global variables to be reached through function calls when |
|
246 required (if a shared library version requvres it, for example. |
|
247 The way it's done allows definitions like this: |
|
248 |
|
249 // in foobar.c |
|
250 OPENSSL_IMPLEMENT_GLOBAL(int,foobar) = 0; |
|
251 // in foobar.h |
|
252 OPENSSL_DECLARE_GLOBAL(int,foobar); |
|
253 #define foobar OPENSSL_GLOBAL_REF(foobar) |
|
254 */ |
|
255 #ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION |
|
256 # define OPENSSL_IMPLEMENT_GLOBAL(type,name) static type _hide_##name; \ |
|
257 type *_shadow_##name(void) { return &_hide_##name; } \ |
|
258 static type _hide_##name |
|
259 # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) |
|
260 # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) |
|
261 #else |
|
262 # define OPENSSL_IMPLEMENT_GLOBAL(type,name) OPENSSL_GLOBAL type _shadow_##name |
|
263 # define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name |
|
264 # define OPENSSL_GLOBAL_REF(name) _shadow_##name |
|
265 #endif |
|
266 |
|
267 #ifdef __cplusplus |
|
268 } |
|
269 #endif |
|
270 #endif |
|
271 |