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
|
|
47 GCC. (MINGW, however, is a way of using GCC to target the Native
|
|
48 Windows environment. This works similarly to building with Cygwin, but
|
|
49 the resulting executable does not use the Cygwin DLL. Instead, MINGW
|
|
50 provides import libraries for the standard C library DLL's
|
|
51 (specifically CRTDLL -- #### how does this differ from MSVCRT and
|
|
52 LIBC.LIB?).)
|
442
|
53
|
|
54 2. There are two windowing environments we can target XEmacs for when
|
|
55 running under MS Windows -- Windows native, and X. (It may seem strange
|
|
56 to write an X application under Windows, but there are in fact many X
|
|
57 servers out there running on Windows, and as far as I know there is no
|
|
58 real (or at least, that works well) networking Window-system extension
|
|
59 under MS Windows. Furthermore, if you're porting a Unix application to
|
|
60 Windows and use Cygwin to assist you, it might seem natural to use an
|
|
61 X server to avoid having to port all the code to Windows.) For XEmacs,
|
|
62 there are various reasons people could come up with for why we would
|
|
63 want to keep maintaining X Windows under MS Windows support.
|
|
64
|
|
65 That gives us four possible build environments. I (Ben) build
|
|
66 regularly on fully-native-everything, Andy builds on Cygwin + MS
|
|
67 Windows + X Windows for windowing.
|
|
68
|
|
69 The build flags used for these divisions are:
|
|
70
|
|
71 CYGWIN -- for Cygwin-only stuff.
|
771
|
72 WIN32_NATIVE -- Win32 native OS-level stuff (files, process, etc.). Applies
|
|
73 whenever linking against the native C libraries -- i.e.
|
|
74 all compilations with VC++ and with MINGW, but never Cygwin.
|
442
|
75 HAVE_X_WINDOWS -- for X Windows (regardless of whether under MS Win)
|
|
76 HAVE_MS_WINDOWS -- MS Windows native windowing system (anything related to
|
771
|
77 the appearance of the graphical screen). May or may not
|
|
78 apply to any of VC++, MINGW, Cygwin.
|
428
|
79
|
442
|
80 Finally, there's also the MINGW build environment, which uses GCC
|
|
81 \(similar to Cygwin), but native MS Windows libraries rather than a
|
|
82 POSIX emulation layer (the Cygwin approach). This environment defines
|
|
83 WIN32_NATIVE, but also defines MINGW, which is used mostly because
|
|
84 uses its own include files (related to Cygwin), which have a few
|
|
85 things messed up.
|
|
86
|
|
87
|
|
88 Formerly, we had a whole host of flags. Here's the conversion, for porting
|
|
89 code from GNU Emacs and such:
|
|
90
|
|
91
|
|
92 WINDOWSNT -> WIN32_NATIVE
|
|
93 WIN32 -> WIN32_NATIVE
|
|
94 _WIN32 -> WIN32_NATIVE
|
|
95 HAVE_WIN32 -> WIN32_NATIVE
|
|
96 DOS_NT -> WIN32_NATIVE
|
|
97 HAVE_NTGUI -> WIN32_NATIVE, unless it ends up already bracketed by this
|
|
98 HAVE_FACES -> always true
|
|
99 MSDOS -> determine whether this code is really specific to MS-DOS (and not
|
|
100 Windows -- e.g. DJGPP code); if so, delete the code; otherwise,
|
|
101 convert to WIN32_NATIVE (we do not support MS-DOS w/DOS Extender
|
|
102 under XEmacs)
|
|
103
|
|
104 __CYGWIN__ -> CYGWIN
|
|
105 __CYGWIN32__ -> CYGWIN
|
|
106 __MINGW32__ -> MINGW
|
|
107
|
|
108 */
|
|
109
|
771
|
110 #include "win32-native.h"
|
428
|
111
|
|
112 /* In case non-Microsoft compiler is used, we fake _MSC_VER */
|
|
113 #ifndef _MSC_VER
|
|
114 #define _MSC_VER 1
|
|
115 #endif
|
|
116
|
771
|
117 /* Stuff from old nt/config.h: */
|
|
118
|
|
119 #define NTHEAP_PROBE_BASE 1
|
|
120
|
|
121 #define LISP_FLOAT_TYPE
|
|
122
|
|
123 #ifdef HAVE_X_WINDOWS
|
|
124
|
|
125 #define HAVE_XREGISTERIMINSTANTIATECALLBACK
|
|
126
|
|
127 #define THIS_IS_X11R6
|
|
128 #define HAVE_XMU
|
|
129 #define HAVE_XLOCALE_H
|
|
130 #define HAVE_X11_LOCALE_H
|
|
131 #define GETTIMEOFDAY_ONE_ARGUMENT
|
428
|
132
|
771
|
133 #define LWLIB_USES_ATHENA
|
|
134 #define LWLIB_MENUBARS_LUCID
|
|
135 #define LWLIB_SCROLLBARS_LUCID
|
|
136 #define LWLIB_DIALOGS_ATHENA
|
|
137 #define LWLIB_TABS_LUCID
|
|
138 #define LWLIB_WIDGETS_ATHENA
|
428
|
139
|
771
|
140 /* These are what gets defined under Cygwin */
|
|
141 #define _BSD_SOURCE 1
|
|
142 #define _SVID_SOURCE 1
|
|
143 #define X_LOCALE 1
|
|
144 #define NARROWPROTO 1
|
|
145
|
|
146 #endif /* HAVE_X_WINDOWS */
|
|
147
|
|
148 #define HAVE_LOCALE_H
|
|
149 #define STDC_HEADERS
|
|
150
|
|
151 #define HAVE_LONG_FILE_NAMES
|
428
|
152
|
771
|
153 #define HAVE_TIMEVAL
|
|
154 #define HAVE_TZNAME
|
|
155 #define HAVE_H_ERRNO
|
428
|
156
|
771
|
157 #define HAVE_CLOSEDIR
|
|
158 #define HAVE_DUP2
|
|
159 #define HAVE_EXECVPE
|
|
160 #define HAVE_FMOD
|
|
161 #define HAVE_FREXP
|
|
162 #define HAVE_FTIME
|
|
163 #define HAVE_GETCWD
|
|
164 #define HAVE_GETHOSTNAME
|
|
165 #define HAVE_GETPAGESIZE
|
|
166 #define getpagesize() 4096
|
|
167 #define HAVE_GETTIMEOFDAY
|
|
168 #define HAVE_LINK
|
|
169 #define HAVE_LOGB
|
|
170 #define HAVE_MKDIR
|
|
171 #define HAVE_MKTIME
|
|
172 #define HAVE_RENAME
|
|
173 #define HAVE_RMDIR
|
|
174 #define HAVE_SELECT
|
|
175 #define HAVE_STRERROR
|
428
|
176
|
771
|
177 #define HAVE_SOCKETS
|
428
|
178
|
771
|
179 #ifdef DEBUG_XEMACS
|
|
180 #define USE_ASSERTIONS
|
|
181 #define MEMORY_USAGE_STATS
|
|
182 #endif /* DEBUG_XEMACS */
|
|
183
|
|
184 #define HAVE_DRAGNDROP
|
428
|
185
|
|
186 #define SIZEOF_SHORT 2
|
|
187 #define SIZEOF_INT 4
|
|
188 #define SIZEOF_LONG 4
|
442
|
189 #define SIZEOF_LONG_LONG 0
|
428
|
190 #define SIZEOF_VOID_P 4
|
|
191
|
771
|
192 typedef int mode_t;
|
|
193 typedef int pid_t;
|
|
194 typedef int uid_t;
|
|
195 typedef int gid_t;
|
|
196 typedef int pid_t;
|
|
197 typedef int ssize_t;
|
428
|
198
|
|
199 /* If your system uses COFF (Common Object File Format) then define the
|
|
200 preprocessor symbol "COFF". */
|
|
201
|
|
202 #define COFF
|
|
203
|
|
204 /* define MAIL_USE_FLOCK if the mailer uses flock
|
|
205 to interlock access to /usr/spool/mail/$USER.
|
|
206 The alternative is that a lock file named
|
|
207 /usr/spool/mail/$USER.lock. */
|
|
208
|
|
209 #define MAIL_USE_POP
|
438
|
210 #define HAVE_LOCKING
|
|
211 #define MAIL_USE_LOCKING
|
428
|
212
|
|
213 /* See unexnt.c */
|
|
214 #if (_MSC_VER >= 1100)
|
|
215 #define DUMP_SEPARATE_SECTION
|
|
216 #endif
|
|
217 #ifdef DUMP_SEPARATE_SECTION
|
|
218 #pragma data_seg("xdata")
|
|
219 #pragma bss_seg("xdata")
|
|
220 #endif
|
|
221
|
|
222 #ifdef HAVE_SCROLLBARS
|
|
223 /* Ensure the NT 4 mouse definitions in winuser.h are available */
|
771
|
224 # ifndef _WIN32_WINNT
|
|
225 # define _WIN32_WINNT 0x0400
|
|
226 # endif
|
428
|
227 #endif
|
442
|
228
|
|
229 /* Force the various NT 4 structures and constants to be included; we're
|
|
230 careful not to call (or even link with) functions not in NT 3.51 when
|
|
231 running on 3.51, but when running on NT 4 or Win9x, we use the later
|
|
232 functions, and need their headers. */
|
|
233 /* The VC++ (5.0, at least) headers treat WINVER non-existent as 0x0400 */
|
|
234 #if defined (WINVER) && WINVER < 0x0400
|
|
235 # undef WINVER
|
|
236 # define WINVER 0x0400
|
|
237 #endif
|
|
238
|
|
239 /* MSVC 6.0 has a mechanism to declare functions which never return */
|
|
240 #if (_MSC_VER >= 1200)
|
|
241 #define DOESNT_RETURN __declspec(noreturn) void
|
|
242 #define DECLARE_DOESNT_RETURN(decl) __declspec(noreturn) extern void decl
|
|
243 #define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
|
|
244 __declspec(noreturn) extern void decl PRINTF_ARGS(str,idx)
|
|
245 #endif /* MSVC 6.0 */
|
|
246
|
771
|
247 /* MSVC warnings no-no crap. When adding one to this section,
|
|
248 1. Think twice
|
|
249 2. Insert textual description of the warning.
|
|
250 3. Think twice. Undo still works */
|
|
251 #if (_MSC_VER >= 800)
|
|
252
|
|
253 /* 'expression' : signed/unsigned mismatch */
|
|
254 /* #pragma warning ( disable : 4018 ) */
|
|
255 /* unnamed type definition in parentheses
|
|
256 (Martin added a pedantically correct definition of ALIGNOF, which
|
|
257 generates temporary anonymous structures, and MSVC complains) */
|
|
258 #pragma warning ( disable : 4116 )
|
|
259
|
|
260 #endif /* compiler understands #pragma warning*/
|
|
261
|
|
262 /* MSVC version >= 2.x without /Za supports __inline */
|
|
263 #if (_MSC_VER < 900) || defined (__STDC__)
|
|
264 # define inline
|
|
265 #else
|
|
266 # define inline __inline
|
|
267 #endif
|
|
268
|
|
269 /* lisp.h defines abort() as a macro. therefore, we must include all
|
|
270 files that contain prototypes for abort() before then. */
|
|
271 #include <../include/process.h>
|