442
|
1 /* System description file for Windows 9x and NT.
|
428
|
2 Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
|
800
|
3 Copyright (C) 2001, 2002 Ben Wing.
|
428
|
4
|
613
|
5 This file is part of XEmacs.
|
428
|
6
|
613
|
7 XEmacs is free software; you can redistribute it and/or modify
|
428
|
8 it under the terms of the GNU General Public License as published by
|
|
9 the Free Software Foundation; either version 2, or (at your option)
|
|
10 any later version.
|
|
11
|
613
|
12 XEmacs is distributed in the hope that it will be useful,
|
428
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15 GNU General Public License for more details.
|
|
16
|
|
17 You should have received a copy of the GNU General Public License
|
|
18 along with XEmacs; see the file COPYING. If not, write to
|
|
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
20 Boston, MA 02111-1307, USA. */
|
|
21
|
|
22 /* Synched up with: FSF 19.31. */
|
|
23
|
442
|
24 /* Capsule summary of different preprocessor flags:
|
|
25
|
|
26 1. Keep in mind that there are two possible OS environments we are dealing
|
771
|
27 with -- Cygwin and Native Windows. MS Windows natively provides
|
|
28 file-system, process, and window-system services through the Win32 API,
|
|
29 implemented by various DLL's. (The most important and KERNEL32, USER32,
|
|
30 and GDI32. KERNEL32 implements the basic file-system and process
|
|
31 services. USER32 implements the fundamental window-system services
|
|
32 such as creating windows and handling messages. GDI32 implements
|
|
33 higher-level drawing capabilities -- fonts, colors, lines, etc.) The C
|
|
34 library is implemented on top of Win32 using either MSVCRT (dynamically
|
|
35 linked) or LIBC.LIB (statically linked). Cygwin provides a POSIX
|
|
36 emulation layer on top of MS Windows -- in particular, providing the
|
|
37 file-system, process, tty, and signal semantics that are part of a
|
|
38 modern, standard Unix operating system. Cygwin does this using its own
|
|
39 DLL, cygwin1.dll, which makes calls to the Win32 API services in
|
|
40 kernel32.dll. Cygwin also provides its own implementation of the C
|
|
41 library, called `newlib' (libcygwin.a; libc.a and libm.a are symlinked
|
|
42 to it), which is implemented on top of the Unix system calls provided
|
|
43 in cygwin1.dll. In addition, Cygwin provides static import libraries
|
|
44 that give you direct access to the Win32 API -- XEmacs uses this to
|
|
45 provide GUI support under Cygwin. The two environments also use
|
|
46 different compilers -- Native Windows uses Visual C++, and Cygwin uses
|
1111
|
47 GCC. (MinGW, however, is a way of using GCC to target the Native
|
|
48 Windows environment. See comment in mingw32.h.)
|
442
|
49
|
|
50 2. There are two windowing environments we can target XEmacs for when
|
|
51 running under MS Windows -- Windows native, and X. (It may seem strange
|
|
52 to write an X application under Windows, but there are in fact many X
|
|
53 servers out there running on Windows, and as far as I know there is no
|
|
54 real (or at least, that works well) networking Window-system extension
|
|
55 under MS Windows. Furthermore, if you're porting a Unix application to
|
|
56 Windows and use Cygwin to assist you, it might seem natural to use an
|
|
57 X server to avoid having to port all the code to Windows.) For XEmacs,
|
|
58 there are various reasons people could come up with for why we would
|
|
59 want to keep maintaining X Windows under MS Windows support.
|
|
60
|
|
61 That gives us four possible build environments. I (Ben) build
|
|
62 regularly on fully-native-everything, Andy builds on Cygwin + MS
|
|
63 Windows + X Windows for windowing.
|
|
64
|
|
65 The build flags used for these divisions are:
|
|
66
|
|
67 CYGWIN -- for Cygwin-only stuff.
|
771
|
68 WIN32_NATIVE -- Win32 native OS-level stuff (files, process, etc.). Applies
|
|
69 whenever linking against the native C libraries -- i.e.
|
|
70 all compilations with VC++ and with MINGW, but never Cygwin.
|
442
|
71 HAVE_X_WINDOWS -- for X Windows (regardless of whether under MS Win)
|
|
72 HAVE_MS_WINDOWS -- MS Windows native windowing system (anything related to
|
771
|
73 the appearance of the graphical screen). May or may not
|
|
74 apply to any of VC++, MINGW, Cygwin.
|
428
|
75
|
442
|
76 Finally, there's also the MINGW build environment, which uses GCC
|
|
77 \(similar to Cygwin), but native MS Windows libraries rather than a
|
|
78 POSIX emulation layer (the Cygwin approach). This environment defines
|
|
79 WIN32_NATIVE, but also defines MINGW, which is used mostly because
|
|
80 uses its own include files (related to Cygwin), which have a few
|
|
81 things messed up.
|
|
82
|
|
83
|
|
84 Formerly, we had a whole host of flags. Here's the conversion, for porting
|
|
85 code from GNU Emacs and such:
|
|
86
|
|
87
|
|
88 WINDOWSNT -> WIN32_NATIVE
|
|
89 WIN32 -> WIN32_NATIVE
|
|
90 _WIN32 -> WIN32_NATIVE
|
|
91 HAVE_WIN32 -> WIN32_NATIVE
|
|
92 DOS_NT -> WIN32_NATIVE
|
|
93 HAVE_NTGUI -> WIN32_NATIVE, unless it ends up already bracketed by this
|
|
94 HAVE_FACES -> always true
|
|
95 MSDOS -> determine whether this code is really specific to MS-DOS (and not
|
|
96 Windows -- e.g. DJGPP code); if so, delete the code; otherwise,
|
|
97 convert to WIN32_NATIVE (we do not support MS-DOS w/DOS Extender
|
|
98 under XEmacs)
|
|
99
|
|
100 __CYGWIN__ -> CYGWIN
|
|
101 __CYGWIN32__ -> CYGWIN
|
|
102 __MINGW32__ -> MINGW
|
|
103
|
|
104 */
|
|
105
|
771
|
106 #include "win32-native.h"
|
428
|
107
|
|
108 /* In case non-Microsoft compiler is used, we fake _MSC_VER */
|
|
109 #ifndef _MSC_VER
|
|
110 #define _MSC_VER 1
|
|
111 #endif
|
|
112
|
771
|
113 /* Stuff from old nt/config.h: */
|
|
114
|
|
115 #define NTHEAP_PROBE_BASE 1
|
|
116
|
|
117 #ifdef HAVE_X_WINDOWS
|
|
118
|
|
119 #define HAVE_XREGISTERIMINSTANTIATECALLBACK
|
|
120
|
|
121 #define THIS_IS_X11R6
|
|
122 #define HAVE_XMU
|
|
123 #define HAVE_XLOCALE_H
|
|
124 #define HAVE_X11_LOCALE_H
|
|
125 #define GETTIMEOFDAY_ONE_ARGUMENT
|
428
|
126
|
771
|
127 #define LWLIB_USES_ATHENA
|
|
128 #define LWLIB_MENUBARS_LUCID
|
|
129 #define LWLIB_SCROLLBARS_LUCID
|
|
130 #define LWLIB_DIALOGS_ATHENA
|
|
131 #define LWLIB_TABS_LUCID
|
|
132 #define LWLIB_WIDGETS_ATHENA
|
428
|
133
|
771
|
134 /* These are what gets defined under Cygwin */
|
|
135 #define _BSD_SOURCE 1
|
|
136 #define _SVID_SOURCE 1
|
|
137 #define X_LOCALE 1
|
|
138 #define NARROWPROTO 1
|
|
139
|
|
140 #endif /* HAVE_X_WINDOWS */
|
|
141
|
|
142 #define HAVE_LOCALE_H
|
|
143 #define STDC_HEADERS
|
|
144
|
|
145 #define HAVE_LONG_FILE_NAMES
|
428
|
146
|
771
|
147 #define HAVE_TIMEVAL
|
|
148 #define HAVE_TZNAME
|
|
149 #define HAVE_H_ERRNO
|
428
|
150
|
771
|
151 #define HAVE_CLOSEDIR
|
|
152 #define HAVE_DUP2
|
|
153 #define HAVE_EXECVPE
|
|
154 #define HAVE_FMOD
|
|
155 #define HAVE_FREXP
|
|
156 #define HAVE_FTIME
|
|
157 #define HAVE_GETCWD
|
|
158 #define HAVE_GETHOSTNAME
|
|
159 #define HAVE_GETPAGESIZE
|
|
160 #define getpagesize() 4096
|
|
161 #define HAVE_GETTIMEOFDAY
|
|
162 #define HAVE_LINK
|
|
163 #define HAVE_LOGB
|
|
164 #define HAVE_MKDIR
|
|
165 #define HAVE_MKTIME
|
|
166 #define HAVE_RENAME
|
|
167 #define HAVE_RMDIR
|
|
168 #define HAVE_SELECT
|
|
169 #define HAVE_STRERROR
|
1257
|
170 #define HAVE_STRLWR
|
|
171 #define HAVE_STRUPR
|
428
|
172
|
771
|
173 #define HAVE_SOCKETS
|
428
|
174
|
771
|
175 #ifdef DEBUG_XEMACS
|
|
176 #define USE_ASSERTIONS
|
|
177 #define MEMORY_USAGE_STATS
|
|
178 #endif /* DEBUG_XEMACS */
|
|
179
|
|
180 #define HAVE_DRAGNDROP
|
428
|
181
|
|
182 #define SIZEOF_SHORT 2
|
|
183 #define SIZEOF_INT 4
|
|
184 #define SIZEOF_LONG 4
|
442
|
185 #define SIZEOF_LONG_LONG 0
|
428
|
186 #define SIZEOF_VOID_P 4
|
|
187
|
771
|
188 typedef int mode_t;
|
|
189 typedef int pid_t;
|
|
190 typedef int uid_t;
|
|
191 typedef int gid_t;
|
|
192 typedef int pid_t;
|
|
193 typedef int ssize_t;
|
428
|
194
|
|
195 /* If your system uses COFF (Common Object File Format) then define the
|
|
196 preprocessor symbol "COFF". */
|
|
197
|
|
198 #define COFF
|
|
199
|
|
200 /* define MAIL_USE_FLOCK if the mailer uses flock
|
|
201 to interlock access to /usr/spool/mail/$USER.
|
|
202 The alternative is that a lock file named
|
|
203 /usr/spool/mail/$USER.lock. */
|
|
204
|
|
205 #define MAIL_USE_POP
|
438
|
206 #define HAVE_LOCKING
|
|
207 #define MAIL_USE_LOCKING
|
428
|
208
|
|
209 /* See unexnt.c */
|
827
|
210 #if (_MSC_VER >= 1100) && !defined(PDUMP)
|
428
|
211 #define DUMP_SEPARATE_SECTION
|
|
212 #endif
|
|
213 #ifdef DUMP_SEPARATE_SECTION
|
|
214 #pragma data_seg("xdata")
|
|
215 #pragma bss_seg("xdata")
|
|
216 #endif
|
|
217
|
827
|
218 #ifdef emacs
|
|
219 /* intl-auto-encap-win32.[ch] assumes _WIN32_WINNT>=0x0400
|
|
220 We don't want this set when building command-line helpers in lib-src */
|
771
|
221 # ifndef _WIN32_WINNT
|
|
222 # define _WIN32_WINNT 0x0400
|
|
223 # endif
|
428
|
224 #endif
|
442
|
225
|
|
226 /* The VC++ (5.0, at least) headers treat WINVER non-existent as 0x0400 */
|
|
227 #if defined (WINVER) && WINVER < 0x0400
|
|
228 # undef WINVER
|
|
229 # define WINVER 0x0400
|
|
230 #endif
|
|
231
|
872
|
232 /* Vararg routines, main(), and callback routines for library functions
|
|
233 (qsort(), signal(), etc.) need to be __cdecl if we use the fastcall
|
|
234 convention by default (a good idea, since it speeds things up). #### Why
|
|
235 do they have to complain about this? Why not just do the right thing
|
|
236 automatically?
|
|
237
|
|
238 Prefix with X because plain CDECL is already defined by the VC++ header
|
|
239 files. */
|
|
240 #define XCDECL __cdecl
|
|
241
|
442
|
242 /* MSVC 6.0 has a mechanism to declare functions which never return */
|
|
243 #if (_MSC_VER >= 1200)
|
|
244 #define DOESNT_RETURN __declspec(noreturn) void
|
|
245 #define DECLARE_DOESNT_RETURN(decl) __declspec(noreturn) extern void decl
|
|
246 #define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
|
872
|
247 __declspec(noreturn) extern void __cdecl decl PRINTF_ARGS(str,idx)
|
|
248 #else
|
|
249 #define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
|
|
250 extern void __cdecl decl PRINTF_ARGS(str,idx)
|
442
|
251 #endif /* MSVC 6.0 */
|
|
252
|
1257
|
253 /* MSVC warnings no-no crap. When adding one to this section,
|
|
254 1. Think twice.
|
771
|
255 2. Insert textual description of the warning.
|
1257
|
256 3. Think again. Undo still works. */
|
771
|
257 #if (_MSC_VER >= 800)
|
|
258
|
|
259 /* unnamed type definition in parentheses
|
|
260 (Martin added a pedantically correct definition of ALIGNOF, which
|
|
261 generates temporary anonymous structures, and MSVC complains) */
|
|
262 #pragma warning ( disable : 4116 )
|
|
263
|
|
264 #endif /* compiler understands #pragma warning*/
|
|
265
|
|
266 /* MSVC version >= 2.x without /Za supports __inline */
|
|
267 #if (_MSC_VER < 900) || defined (__STDC__)
|
|
268 # define inline
|
|
269 #else
|
|
270 # define inline __inline
|
|
271 #endif
|
|
272
|
|
273 /* lisp.h defines abort() as a macro. therefore, we must include all
|
|
274 files that contain prototypes for abort() before then. */
|
|
275 #include <../include/process.h>
|