Mercurial > emacs
comparison src/s/darwin.h @ 44890:01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
lisp/ChangeLog, and src/ChangeLog for list of changes.
author | Andrew Choi <akochoi@shaw.ca> |
---|---|
date | Fri, 26 Apr 2002 23:39:06 +0000 |
parents | |
children | 39cdf9669519 |
comparison
equal
deleted
inserted
replaced
44889:e3b9f45140a5 | 44890:01b93e5e53a7 |
---|---|
1 /* System description header file for Darwin (Mac OS X). | |
2 Copyright (C) 2001 Free Software Foundation, Inc. | |
3 | |
4 This file is part of GNU Emacs. | |
5 | |
6 GNU Emacs is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 2, or (at your option) | |
9 any later version. | |
10 | |
11 GNU Emacs is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
19 Boston, MA 02111-1307, USA. */ | |
20 | |
21 | |
22 /* | |
23 * Define symbols to identify the version of Unix this is. | |
24 * Define all the symbols that apply correctly. | |
25 */ | |
26 | |
27 /* #define UNIPLUS */ | |
28 /* #define USG5 */ | |
29 /* #define USG */ | |
30 /* #define HPUX */ | |
31 /* #define UMAX */ | |
32 /* #define BSD4_1 */ | |
33 #define BSD4_2 | |
34 /* BSD4_3 and BSD4_4 are already defined in sys/param.h */ | |
35 /* #define BSD4_3 */ | |
36 /* #define BSD4_4 */ | |
37 #define BSD_SYSTEM | |
38 /* #define VMS */ | |
39 | |
40 /* MAC_OS is used to conditionally compile code common to both MAC_OS8 | |
41 and MAC_OSX. */ | |
42 #ifdef MAC_OSX | |
43 #define MAC_OS | |
44 #endif | |
45 | |
46 /* SYSTEM_TYPE should indicate the kind of system you are using. | |
47 It sets the Lisp variable system-type. */ | |
48 | |
49 #define SYSTEM_TYPE "darwin" | |
50 | |
51 /* NOMULTIPLEJOBS should be defined if your system's shell | |
52 does not have "job control" (the ability to stop a program, | |
53 run some other program, then continue the first one). */ | |
54 | |
55 /* #define NOMULTIPLEJOBS */ | |
56 | |
57 /* Emacs can read input using SIGIO and buffering characters itself, | |
58 or using CBREAK mode and making C-g cause SIGINT. | |
59 The choice is controlled by the variable interrupt_input. | |
60 | |
61 Define INTERRUPT_INPUT to make interrupt_input = 1 the default (use SIGIO) | |
62 | |
63 Emacs uses the presence or absence of the SIGIO and BROKEN_SIGIO macros | |
64 to indicate whether or not signal-driven I/O is possible. It uses | |
65 INTERRUPT_INPUT to decide whether to use it by default. | |
66 | |
67 SIGIO can be used only on systems that implement it (4.2 and 4.3). | |
68 CBREAK mode has two disadvantages | |
69 1) At least in 4.2, it is impossible to handle the Meta key properly. | |
70 I hear that in system V this problem does not exist. | |
71 2) Control-G causes output to be discarded. | |
72 I do not know whether this can be fixed in system V. | |
73 | |
74 Another method of doing input is planned but not implemented. | |
75 It would have Emacs fork off a separate process | |
76 to read the input and send it to the true Emacs process | |
77 through a pipe. */ | |
78 | |
79 #define INTERRUPT_INPUT | |
80 | |
81 /* Letter to use in finding device name of first pty, | |
82 if system supports pty's. 'a' means it is /dev/ptya0 */ | |
83 | |
84 #define FIRST_PTY_LETTER 'p' | |
85 | |
86 /* | |
87 * Define HAVE_TERMIOS if the system provides POSIX-style | |
88 * functions and macros for terminal control. | |
89 * | |
90 * Define HAVE_TERMIO if the system provides sysV-style ioctls | |
91 * for terminal control. | |
92 * | |
93 * Do not define both. HAVE_TERMIOS is preferred, if it is | |
94 * supported on your system. | |
95 */ | |
96 | |
97 #define HAVE_TERMIOS | |
98 /* #define HAVE_TERMIO */ | |
99 | |
100 #define NO_TERMIO | |
101 | |
102 /* | |
103 * Define HAVE_PTYS if the system supports pty devices. | |
104 */ | |
105 | |
106 #define HAVE_PTYS | |
107 | |
108 /* | |
109 * Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate | |
110 * The 4.2 opendir, etc., library functions. | |
111 */ | |
112 | |
113 /* #define NONSYSTEM_DIR_LIBRARY */ | |
114 | |
115 /* Define this symbol if your system has the functions bcopy, etc. */ | |
116 | |
117 #define BSTRING | |
118 | |
119 /* subprocesses should be defined if you want to | |
120 have code for asynchronous subprocesses | |
121 (as used in M-x compile and M-x shell). | |
122 This is generally OS dependent, and not supported | |
123 under most USG systems. */ | |
124 | |
125 #define subprocesses | |
126 | |
127 /* If your system uses COFF (Common Object File Format) then define the | |
128 preprocessor symbol "COFF". */ | |
129 | |
130 /* #define COFF */ | |
131 | |
132 /* define MAIL_USE_FLOCK if the mailer uses flock | |
133 to interlock access to /usr/spool/mail/$USER. | |
134 The alternative is that a lock file named | |
135 /usr/spool/mail/$USER.lock. */ | |
136 | |
137 #define MAIL_USE_FLOCK | |
138 | |
139 /* Define CLASH_DETECTION if you want lock files to be written | |
140 so that Emacs can tell instantly when you try to modify | |
141 a file that someone else has modified in his Emacs. */ | |
142 | |
143 #define CLASH_DETECTION | |
144 | |
145 /* Define this if your operating system declares signal handlers to | |
146 have a type other than the usual. `The usual' is `void' for ANSI C | |
147 systems (i.e. when the __STDC__ macro is defined), and `int' for | |
148 pre-ANSI systems. If you're using GCC on an older system, __STDC__ | |
149 will be defined, but the system's include files will still say that | |
150 signal returns int or whatever; in situations like that, define | |
151 this to be what the system's include files want. */ | |
152 /* #define SIGTYPE int */ | |
153 | |
154 /* If the character used to separate elements of the executable path | |
155 is not ':', #define this to be the appropriate character constant. */ | |
156 /* #define SEPCHAR ':' */ | |
157 | |
158 /* Define this if the system can use mmap for buffer text allocation. */ | |
159 /* #define USE_MMAP_FOR_BUFFERS 1 */ | |
160 | |
161 /* ============================================================ */ | |
162 | |
163 /* Here, add any special hacks needed | |
164 to make Emacs work on this system. For example, | |
165 you might define certain system call names that don't | |
166 exist on your system, or that do different things on | |
167 your system and must be used only through an encapsulation | |
168 (Which you should place, by convention, in sysdep.c). */ | |
169 | |
170 /* Some compilers tend to put everything declared static | |
171 into the initialized data area, which becomes pure after dumping Emacs. | |
172 On these systems, you must #define static as nothing to foil this. | |
173 Note that emacs carefully avoids static vars inside functions. */ | |
174 | |
175 /* #define static */ | |
176 | |
177 /* If the system's imake configuration file defines `NeedWidePrototypes' | |
178 as `NO', we must define NARROWPROTO manually. Such a define is | |
179 generated in the Makefile generated by `xmkmf'. If we don't | |
180 define NARROWPROTO, we will see the wrong function prototypes | |
181 for X functions taking float or double parameters. */ | |
182 | |
183 /* #define NARROWPROTO 1 */ | |
184 | |
185 /* ============================================================ */ | |
186 | |
187 /* After adding support for a new system, modify the large case | |
188 statement in the `configure' script to recognize reasonable | |
189 configuration names, and add a description of the system to | |
190 `etc/MACHINES'. | |
191 | |
192 If you've just fixed a problem in an existing configuration file, | |
193 you should also check `etc/MACHINES' to make sure its descriptions | |
194 of known problems in that configuration should be updated. */ | |
195 | |
196 | |
197 /* Avoid the use of the name init_process (process.c) because it is | |
198 also the name of a Mach system call. */ | |
199 #define init_process emacs_init_process | |
200 | |
201 /* Fix compilation problem for regex.c. */ | |
202 #define __restrict | |
203 | |
204 /* Fix compilation problem for md5.c. */ | |
205 #define __attribute__(x) | |
206 | |
207 /* Used in dispnew.c. Copied from freebsd.h. */ | |
208 #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) | |
209 | |
210 /* Darwin provides POSIX-style getpgrp. */ | |
211 #define GETPGRP_NO_ARG | |
212 | |
213 /* System uses OXTABS instead of the expected TAB3. (Copied from | |
214 bsd386.h.) */ | |
215 #define TAB3 OXTABS | |
216 | |
217 /* Darwin ld insists on the use of malloc routines in the System | |
218 framework. */ | |
219 #define SYSTEM_MALLOC | |
220 | |
221 /* Define HAVE_SOCKETS if system supports 4.2-compatible sockets. */ | |
222 #define HAVE_SOCKETS | |
223 | |
224 /* Extra initialization calls in main for Mac OS X system type. */ | |
225 #define SYMS_SYSTEM syms_of_mac() | |
226 | |
227 /* Definitions for how to dump. Copied from nextstep.h. */ | |
228 | |
229 #define UNEXEC unexmacosx.o | |
230 | |
231 #define START_FILES pre-crt0.o | |
232 | |
233 /* start_of_text isn't actually used, so make it compile without error. */ | |
234 #define TEXT_START (0) | |
235 | |
236 /* This seems to be right for end_of_text, but it may not be used anyway. */ | |
237 #define TEXT_END get_etext() | |
238 | |
239 /* This seems to be right for end_of_data, but it may not be used anyway. */ | |
240 #define DATA_END get_edata() | |
241 | |
242 /* Definitions for how to compile & link. */ | |
243 | |
244 /* Indicate that we are compiling for Mac OS X and where to find Mac | |
245 specific headers. */ | |
246 #define C_SWITCH_SYSTEM -fpascal-strings -fno-common -DMAC_OSX -I../mac/src | |
247 | |
248 /* Link in the Carbon lib. The -headerpad option tells ld (see man | |
249 page) to leave room at the end of the header for adding load | |
250 commands. Needed for dumping. 0x690 is the total size of 30 | |
251 segment load commands (at 56 each). */ | |
252 #define LD_SWITCH_SYSTEM_TEMACS -prebind -framework Carbon -lstdc++ -Xlinker -headerpad -Xlinker 690 | |
253 | |
254 #define C_SWITCH_SYSTEM_TEMACS -Dtemacs | |
255 | |
256 /* Link this program just by running cc. */ | |
257 #define ORDINARY_LINK | |
258 | |
259 /* We don't have a g library, so override the -lg LIBS_DEBUG switch. */ | |
260 #define LIBS_DEBUG | |
261 | |
262 /* Adding -lm confuses the dynamic linker, so omit it. */ | |
263 #define LIB_MATH | |
264 | |
265 /* Tell src/Makefile.in to create files in the Mac OS X application | |
266 bundle mac/Emacs.app. */ | |
267 #define OTHER_FILES macosx-app | |
268 | |
269 | |
270 /* Define the following so emacs symbols will not conflict with those | |
271 in the System framework. Otherwise -prebind will not work. */ | |
272 | |
273 /* Do not define abort in emacs.c. */ | |
274 #define NO_ABORT | |
275 | |
276 /* Do not define matherr in floatfns.c. */ | |
277 #define NO_MATHERR | |
278 | |
279 | |
280 /* This prevents a compilation error in xfaces.c: struct kboard * is | |
281 used in a function protocol the first time this type appears in the | |
282 file, since MULTI_KBOARD is undefined for the Mac OS X build. */ | |
283 #ifndef NOT_C_CODE | |
284 struct kboard; | |
285 #endif | |
286 | |
287 #ifdef temacs | |
288 #define malloc unexec_malloc | |
289 #define realloc unexec_realloc | |
290 #define free unexec_free | |
291 #endif |