1 | /* lt_system.h -- system portability abstraction layer |
2 | |
3 | Copyright (C) 2004, 2007, 2010-2015 Free Software Foundation, Inc. |
4 | Written by Gary V. Vaughan, 2004 |
5 | |
6 | NOTE: The canonical source of this file is maintained with the |
7 | GNU Libtool package. Report bugs to bug-libtool@gnu.org. |
8 | |
9 | GNU Libltdl is free software; you can redistribute it and/or |
10 | modify it under the terms of the GNU Lesser General Public |
11 | License as published by the Free Software Foundation; either |
12 | version 2 of the License, or (at your option) any later version. |
13 | |
14 | As a special exception to the GNU Lesser General Public License, |
15 | if you distribute this file as part of a program or library that |
16 | is built using GNU Libtool, you may include this file under the |
17 | same distribution terms that you use for the rest of that program. |
18 | |
19 | GNU Libltdl is distributed in the hope that it will be useful, |
20 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
22 | GNU Lesser General Public License for more details. |
23 | |
24 | You should have received a copy of the GNU Lesser General Public |
25 | License along with GNU Libltdl; see the file COPYING.LIB. If not, a |
26 | copy can be downloaded from http://www.gnu.org/licenses/lgpl.html, |
27 | or obtained by writing to the Free Software Foundation, Inc., |
28 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
29 | */ |
30 | |
31 | #if !defined LT_SYSTEM_H |
32 | #define LT_SYSTEM_H 1 |
33 | |
34 | #include <stddef.h> |
35 | #include <stdlib.h> |
36 | #include <sys/types.h> |
37 | |
38 | /* Some systems do not define EXIT_*, even with STDC_HEADERS. */ |
39 | #if !defined EXIT_SUCCESS |
40 | # define EXIT_SUCCESS 0 |
41 | #endif |
42 | #if !defined EXIT_FAILURE |
43 | # define EXIT_FAILURE 1 |
44 | #endif |
45 | |
46 | /* Just pick a big number... */ |
47 | #define LT_FILENAME_MAX 2048 |
48 | |
49 | |
50 | /* Saves on those hard to debug '\0' typos.... */ |
51 | #define LT_EOS_CHAR '\0' |
52 | |
53 | /* LTDL_BEGIN_C_DECLS should be used at the beginning of your declarations, |
54 | so that C++ compilers don't mangle their names. Use LTDL_END_C_DECLS at |
55 | the end of C declarations. */ |
56 | #if defined __cplusplus |
57 | # define LT_BEGIN_C_DECLS extern "C" { |
58 | # define LT_END_C_DECLS } |
59 | #else |
60 | # define LT_BEGIN_C_DECLS /* empty */ |
61 | # define LT_END_C_DECLS /* empty */ |
62 | #endif |
63 | |
64 | /* LT_STMT_START/END are used to create macros that expand to a |
65 | a single compound statement in a portable way. */ |
66 | #if defined __GNUC__ && !defined __STRICT_ANSI__ && !defined __cplusplus |
67 | # define LT_STMT_START (void)( |
68 | # define LT_STMT_END ) |
69 | #else |
70 | # if (defined sun || defined __sun__) |
71 | # define LT_STMT_START if (1) |
72 | # define LT_STMT_END else (void)0 |
73 | # else |
74 | # define LT_STMT_START do |
75 | # define LT_STMT_END while (0) |
76 | # endif |
77 | #endif |
78 | |
79 | /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ |
80 | #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE |
81 | /* DATA imports from DLLs on WIN32 can't be const, because runtime |
82 | relocations are performed -- see ld's documentation on pseudo-relocs. */ |
83 | # define LT_DLSYM_CONST |
84 | #elif defined __osf__ |
85 | /* This system does not cope well with relocations in const data. */ |
86 | # define LT_DLSYM_CONST |
87 | #else |
88 | # define LT_DLSYM_CONST const |
89 | #endif |
90 | |
91 | /* Canonicalise Windows and Cygwin recognition macros. |
92 | To match the values set by recent Cygwin compilers, make sure that if |
93 | __CYGWIN__ is defined (after canonicalisation), __WINDOWS__ is NOT! */ |
94 | #if defined __CYGWIN32__ && !defined __CYGWIN__ |
95 | # define __CYGWIN__ __CYGWIN32__ |
96 | #endif |
97 | #if defined __CYGWIN__ |
98 | # if defined __WINDOWS__ |
99 | # undef __WINDOWS__ |
100 | # endif |
101 | #elif defined _WIN32 |
102 | # define __WINDOWS__ _WIN32 |
103 | #elif defined WIN32 |
104 | # define __WINDOWS__ WIN32 |
105 | #endif |
106 | #if defined __CYGWIN__ && defined __WINDOWS__ |
107 | # undef __WINDOWS__ |
108 | #endif |
109 | |
110 | |
111 | /* DLL building support on win32 hosts; mostly to workaround their |
112 | ridiculous implementation of data symbol exporting. */ |
113 | #if !defined LT_SCOPE |
114 | # if defined __WINDOWS__ || defined __CYGWIN__ |
115 | # if defined DLL_EXPORT /* defined by libtool (if required) */ |
116 | # define LT_SCOPE extern __declspec(dllexport) |
117 | # endif |
118 | # if defined LIBLTDL_DLL_IMPORT /* define if linking with this dll */ |
119 | /* note: cygwin/mingw compilers can rely instead on auto-import */ |
120 | # define LT_SCOPE extern __declspec(dllimport) |
121 | # endif |
122 | # endif |
123 | # if !defined LT_SCOPE /* static linking or !__WINDOWS__ */ |
124 | # define LT_SCOPE extern |
125 | # endif |
126 | #endif |
127 | |
128 | #if defined __WINDOWS__ |
129 | /* LT_DIRSEP_CHAR is accepted *in addition* to '/' as a directory |
130 | separator when it is set. */ |
131 | # define LT_DIRSEP_CHAR '\\' |
132 | # define LT_PATHSEP_CHAR ';' |
133 | #else |
134 | # define LT_PATHSEP_CHAR ':' |
135 | #endif |
136 | |
137 | #if defined _MSC_VER /* Visual Studio */ |
138 | # define R_OK 4 |
139 | #endif |
140 | |
141 | /* fopen() mode flags for reading a text file */ |
142 | #undef LT_READTEXT_MODE |
143 | #if defined __WINDOWS__ || defined __CYGWIN__ |
144 | # define LT_READTEXT_MODE "rt" |
145 | #else |
146 | # define LT_READTEXT_MODE "r" |
147 | #endif |
148 | |
149 | /* The extra indirection to the LT__STR and LT__CONC macros is required so |
150 | that if the arguments to LT_STR() (or LT_CONC()) are themselves macros, |
151 | they will be expanded before being quoted. */ |
152 | #ifndef LT_STR |
153 | # define LT__STR(arg) #arg |
154 | # define LT_STR(arg) LT__STR(arg) |
155 | #endif |
156 | |
157 | #ifndef LT_CONC |
158 | # define LT__CONC(a, b) a##b |
159 | # define LT_CONC(a, b) LT__CONC(a, b) |
160 | #endif |
161 | #ifndef LT_CONC3 |
162 | # define LT__CONC3(a, b, c) a##b##c |
163 | # define LT_CONC3(a, b, c) LT__CONC3(a, b, c) |
164 | #endif |
165 | |
166 | #endif /*!defined LT_SYSTEM_H*/ |
167 | |