gnu-linux.h 12 KB
Newer Older
Richard M. Stallman's avatar
Richard M. Stallman committed
1
/* This file is the configuration file for Linux-based GNU systems
2
   Copyright (C) 1985, 1986, 1992, 1994, 1996, 1999, 2001, 2002, 2003, 2004,
Glenn Morris's avatar
Glenn Morris committed
3
                 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
Jim Blandy's avatar
Jim Blandy committed
4 5 6 7 8

This file is part of GNU Emacs.

GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 3, or (at your option)
Jim Blandy's avatar
Jim Blandy committed
10 11 12 13 14 15 16 17 18
any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING.  If not, write to
Lute Kamstra's avatar
Lute Kamstra committed
19 20
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.  */
Jim Blandy's avatar
Jim Blandy committed
21

22 23
/* This file was put together by Michael K. Johnson and Rik Faith.  */

Jim Blandy's avatar
Jim Blandy committed
24 25 26 27 28 29 30 31 32

/*
 *	Define symbols to identify the version of Unix this is.
 *	Define all the symbols that apply correctly.
 */

/* #define UNIPLUS */
/* #define USG5 */
#define USG
Karl Heuer's avatar
Karl Heuer committed
33
/* #define BSD_SYSTEM */
Jim Blandy's avatar
Jim Blandy committed
34
#define LINUX
Richard M. Stallman's avatar
Richard M. Stallman committed
35
#define GNU_LINUX
Jim Blandy's avatar
Jim Blandy committed
36 37 38 39

/* SYSTEM_TYPE should indicate the kind of system you are using.
 It sets the Lisp variable system-type.  */

Richard M. Stallman's avatar
Richard M. Stallman committed
40
#define SYSTEM_TYPE "gnu/linux"		/* All the best software is free. */
Jim Blandy's avatar
Jim Blandy committed
41

42 43 44 45
/* Check the version number of Linux--if it is at least 1.2.0,
   it is safe to use SIGIO.  */
#ifndef NOT_C_CODE
#ifdef emacs
46
#ifdef HAVE_LINUX_VERSION_H
47
#include <linux/version.h>
Jim Blandy's avatar
Jim Blandy committed
48

49 50
#if LINUX_VERSION_CODE > 0x10200
#define LINUX_SIGIO_DOES_WORK
51
#endif /* LINUX_VERSION_CODE > 0x10200 */
52 53 54
#if LINUX_VERSION_CODE >= 0x20000
#define LINUX_MAP_SHARED_DOES_WORK
#endif /* LINUX_VERSION_CODE >= 0x20000 */
55 56 57
#if LINUX_VERSION_CODE >= 0x20400
#define LINUX_SIGNALS_VIA_CHARACTERS_DOES_WORK
#endif /* LINUX_VERSION_CODE >= 0x20400 */
58
#endif /* HAVE_LINUX_VERSION_H */
59 60
#endif /* emacs */
#endif /* NOT_C_CODE */
Jim Blandy's avatar
Jim Blandy committed
61

62 63
#if defined HAVE_GRANTPT
#define UNIX98_PTYS
Jim Blandy's avatar
Jim Blandy committed
64

65 66
/* Run only once.  We need a `for'-loop because the code uses
   `continue'.  */
Jim Blandy's avatar
Jim Blandy committed
67

68
#define PTY_ITERATION	for (i = 0; i < 1; i++)
69

70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
#ifdef HAVE_GETPT
#define PTY_NAME_SPRINTF
#define PTY_OPEN fd = getpt ()
#else /* not HAVE_GETPT */
#define PTY_NAME_SPRINTF strcpy (pty_name, "/dev/ptmx");
#endif /* not HAVE_GETPT */

/* Note that grantpt and unlockpt may fork.  We must block SIGCHLD to
   prevent sigchld_handler from intercepting the child's death.  */

#define PTY_TTY_NAME_SPRINTF				\
  {							\
    char *ptyname;					\
							\
    sigblock (sigmask (SIGCHLD));			\
    if (grantpt (fd) == -1 || unlockpt (fd) == -1	\
        || !(ptyname = ptsname(fd)))			\
      {							\
	sigunblock (sigmask (SIGCHLD));			\
	close (fd);					\
	return -1;					\
      }							\
    strncpy (pty_name, ptyname, sizeof (pty_name));	\
    pty_name[sizeof (pty_name) - 1] = 0;		\
    sigunblock (sigmask (SIGCHLD));			\
  }
96

Dave Love's avatar
Dave Love committed
97
#else /* not HAVE_GRANTPT */
98

99 100
/* Letter to use in finding device name of first pty,
   if system supports pty's.  'p' means it is /dev/ptyp0  */
101

102
#define FIRST_PTY_LETTER 'p'
103

104
#endif  /* not HAVE_GRANDPT */
105

106 107
/*  Define HAVE_TERMIOS if the system provides POSIX-style
    functions and macros for terminal control.  */
Jim Blandy's avatar
Jim Blandy committed
108 109 110

#define HAVE_TERMIOS

111
/* Define HAVE_PTYS if the system supports pty devices. */
Jim Blandy's avatar
Jim Blandy committed
112 113 114

#define HAVE_PTYS

115
#define HAVE_SOCKETS
Jim Blandy's avatar
Jim Blandy committed
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

/* Define this symbol if your system has the functions bcopy, etc. */

#define BSTRING

/* subprocesses should be defined if you want to
   have code for asynchronous subprocesses
   (as used in M-x compile and M-x shell).
   This is generally OS dependent, and not supported
   under most USG systems. */

#define subprocesses

/* define MAIL_USE_FLOCK if the mailer uses flock
   to interlock access to /usr/spool/mail/$USER.
   The alternative is that a lock file named
   /usr/spool/mail/$USER.lock.  */

Richard M. Stallman's avatar
Richard M. Stallman committed
134 135 136
/* On GNU/Linux systems, both methods are used by various mail
   programs.  I assume that most people are using newer mailers that
   have heard of flock.  Change this if you need to. */
137 138 139 140 141 142 143 144
/* Debian contains a patch which says: ``On Debian/GNU/Linux systems,
   configure gets the right answers, and that means *NOT* using flock.
   Using flock is guaranteed to be the wrong thing. See Debian Policy
   for details.'' and then uses `#ifdef DEBIAN'.  Unfortunately the
   Debian maintainer hasn't provided a clean fix for Emacs.
   movemail.c will use `maillock' when MAILDIR, HAVE_LIBMAIL and
   HAVE_MAILLOCK_H are defined, so the following appears to be the
   correct logic.  -- fx */
145 146 147
/* We must check for HAVE_LIBLOCKFILE too, as movemail does.
   liblockfile is a Free Software replacement for libmail, used on
   Debian systems and elsewhere. -rfr */
148

149 150
#if !((defined (HAVE_LIBMAIL) || defined (HAVE_LIBLOCKFILE)) &&	\
      defined (HAVE_MAILLOCK_H))
Jim Blandy's avatar
Jim Blandy committed
151
#define MAIL_USE_FLOCK
152
#endif
Jim Blandy's avatar
Jim Blandy committed
153 154 155 156 157

/* Define CLASH_DETECTION if you want lock files to be written
   so that Emacs can tell instantly when you try to modify
   a file that someone else has modified in his Emacs.  */

158
#define CLASH_DETECTION
Jim Blandy's avatar
Jim Blandy committed
159 160 161 162 163 164 165 166 167 168 169 170 171 172

/* Here, on a separate page, add any special hacks needed
   to make Emacs work on this system.  For example,
   you might define certain system call names that don't
   exist on your system, or that do different things on
   your system and must be used only through an encapsulation
   (Which you should place, by convention, in sysdep.c).  */

/* If you mount the proc file system somewhere other than /proc
   you will have to uncomment the following and make the proper
   changes */

/* #define LINUX_LDAV_FILE "/proc/loadavg" */

Richard M. Stallman's avatar
Richard M. Stallman committed
173
/* This is needed for dispnew.c:update_frame */
Jim Blandy's avatar
Jim Blandy committed
174

175
#ifdef emacs
176
#include <stdio.h>  /* Get the definition of _IO_STDIO_H.  */
177
#if defined(_IO_STDIO_H) || defined(_STDIO_USES_IOSTREAM)
178
/* new C libio names */
179
#define GNU_LIBRARY_PENDING_OUTPUT_COUNT(FILE) \
180 181 182
  ((FILE)->_IO_write_ptr - (FILE)->_IO_write_base)
#else /* !_IO_STDIO_H */
/* old C++ iostream names */
183
#define GNU_LIBRARY_PENDING_OUTPUT_COUNT(FILE) \
184 185 186
  ((FILE)->_pptr - (FILE)->_pbase)
#endif /* !_IO_STDIO_H */
#endif /* emacs */
Jim Blandy's avatar
Jim Blandy committed
187

188
/* Ask GCC where to find libgcc.a.  */
189
#define LIB_GCC `$(CC) $(C_SWITCH_X_SITE) -print-libgcc-file-name`
190

191
#ifndef __ELF__
Richard M. Stallman's avatar
Richard M. Stallman committed
192
/* GNU/Linux usually has crt0.o in a non-standard place */
Jim Blandy's avatar
Jim Blandy committed
193
#define START_FILES pre-crt0.o /usr/lib/crt0.o
194
#else
Karl Heuer's avatar
Karl Heuer committed
195
#define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o
196
#endif
Jim Blandy's avatar
Jim Blandy committed
197

198 199 200
#ifdef __ELF__
/* Here is how to find X Windows.  LD_SWITCH_X_SITE_AUX gives an -R option
   says where to find X windows at run time.  */
201

202 203 204
#ifdef __mips__
#define LD_SWITCH_SYSTEM -G 0 LD_SWITCH_X_SITE_AUX
#else
205
#define LD_SWITCH_SYSTEM LD_SWITCH_X_SITE_AUX
206
#endif /* __mips__ */
207 208

/* Link temacs with -z nocombreloc so that unexec works right, whether or
Pavel Janík's avatar
Pavel Janík committed
209
   not -z combreloc is the default.  GNU ld ignores unknown -z KEYWORD
210 211 212
   switches, so this also works with older versions that don't implement
   -z combreloc.  */
#define LD_SWITCH_SYSTEM_TEMACS -z nocombreloc
213 214
#endif /* __ELF__ */

Richard M. Stallman's avatar
Richard M. Stallman committed
215 216
/* As of version 1.1.51, Linux did not actually implement SIGIO.
   But it works in newer versions.  */
Jim Blandy's avatar
Jim Blandy committed
217
#ifdef emacs
218 219 220
#ifdef LINUX_SIGIO_DOES_WORK
#define INTERRUPT_INPUT
#else
Paul Eggert's avatar
Paul Eggert committed
221
#define BROKEN_SIGIO
222 223
/* Some versions of Linux define SIGURG and SIGPOLL as aliases for SIGIO.
   This prevents lossage in process.c.  */
Paul Eggert's avatar
Paul Eggert committed
224 225
#define BROKEN_SIGURG
#define BROKEN_SIGPOLL
Jim Blandy's avatar
Jim Blandy committed
226
#endif
227
#endif
Jim Blandy's avatar
Jim Blandy committed
228 229 230 231 232

/* This is needed for sysdep.c */

#define NO_SIOCTL_H           /* don't have sioctl.h */

Richard M. Stallman's avatar
Richard M. Stallman committed
233
#define HAVE_WAIT_HEADER
Jim Blandy's avatar
Jim Blandy committed
234 235 236

#define SYSV_SYSTEM_DIR       /* use dirent.h */

Brian Fox's avatar
Brian Fox committed
237
#define POSIX                 /* affects getpagesize.h and systty.h */
Jim Blandy's avatar
Jim Blandy committed
238 239 240 241
#define POSIX_SIGNALS

/* Best not to include -lg, unless it is last on the command line */
#define LIBS_DEBUG
242
#ifndef __ELF__
Jim Blandy's avatar
Jim Blandy committed
243
#define LIB_STANDARD -lc /* avoid -lPW */
244
#else
245
#undef LIB_GCC
246
#define LIB_GCC
Karl Heuer's avatar
Karl Heuer committed
247
#define LIB_STANDARD -lgcc -lc -lgcc /usr/lib/crtn.o
248
#endif
249

250 251 252 253 254 255 256
/* Don't use -g in test compiles in configure.
   This is so we will use the same shared libs for that linking
   that are used when linking temacs.  */
#ifdef THIS_IS_CONFIGURE
#define C_DEBUG_SWITCH
#endif

Richard M. Stallman's avatar
Richard M. Stallman committed
257
/* 21 Jun 06: Eric Hanchrow <offby1@blarg.net> says this works.  */
258 259 260
#ifdef LINUX_SIGNALS_VIA_CHARACTERS_DOES_WORK
#define SIGNALS_VIA_CHARACTERS
#endif
261 262 263 264

/* Rob Malouf <malouf@csli.stanford.edu> says:
   SYSV IPC is standard a standard part of Linux since version 0.99pl10,
   and is a very common addition to previous versions.  */
265 266

#ifdef TERM
267
#define LIBS_SYSTEM -lclient
268 269
#define C_SWITCH_SYSTEM -D_BSD_SOURCE -I/usr/src/term
#else
270 271
/* alane@wozzle.linet.org says that -lipc is not a separate library,
   since libc-4.4.1.  So -lipc was deleted.  */
272
#define LIBS_SYSTEM
273 274 275
/* _BSD_SOURCE is redundant, at least in glibc2, since we define
   _GNU_SOURCE.  Left in in case it's relevant to libc5 systems and
   anyone's still using Emacs on those.  --fx 2002-12-14  */
276
#define C_SWITCH_SYSTEM -D_BSD_SOURCE
277 278
#endif

279 280 281
/* Paul Abrahams <abrahams@equinox.shaysnet.com> says this is needed.  */
#define LIB_MOTIF -lXm -lXpm

282
#ifdef HAVE_LIBNCURSES
283
#define TERMINFO
284
#define LIBS_TERMCAP -lncurses
285 286
#endif

287
#define HAVE_SYSVIPC
288

289 290
#ifdef __ELF__
#define UNEXEC unexelf.o
291
#ifndef LINUX_MAP_SHARED_DOES_WORK
Karl Heuer's avatar
Karl Heuer committed
292
#define UNEXEC_USE_MAP_PRIVATE
293
#endif
294
#endif
295

296 297 298 299 300 301 302 303
#ifdef LINUX_QMAGIC

#define HAVE_TEXT_START
#define UNEXEC unexsunos4.o
#define N_PAGSIZ(x) PAGE_SIZE

#else /* not LINUX_QMAGIC */

304 305 306 307
#define A_TEXT_OFFSET(hdr) (N_MAGIC(hdr) == QMAGIC ? sizeof (struct exec) : 0)
#define A_TEXT_SEEK(hdr) (N_TXTOFF(hdr) + A_TEXT_OFFSET(hdr))
#define ADJUST_EXEC_HEADER \
  unexec_text_start = N_TXTADDR(ohdr) + A_TEXT_OFFSET(ohdr)
308

309 310
#endif /* not LINUX_QMAGIC */

311
#if 0
312 313 314 315 316 317 318 319 320 321 322 323 324 325 326
/* In 19.23 and 19.24, configure sometimes fails to define these.
   It has to do with the fact that configure uses CFLAGS when linking
   while Makefile.in.in (erroneously) fails to do so when linking temacs.  */
#ifndef HAVE_GETTIMEOFDAY
#define HAVE_GETTIMEOFDAY
#endif
#ifndef HAVE_MKDIR
#define HAVE_MKDIR
#endif
#ifndef HAVE_RMDIR
#define HAVE_RMDIR
#endif
#ifndef HAVE_XSCREENNUMBEROFSCREEN
#define HAVE_XSCREENNUMBEROFSCREEN
#endif
327 328 329 330 331
#endif /* 0 */

/* This is to work around mysterious gcc failures in some system versions.
   It is unlikely that Emacs changes will work around this problem;
   therefore, this should remain permanently.  */
332 333 334
#ifndef HAVE_XRMSETDATABASE
#define HAVE_XRMSETDATABASE
#endif
335 336

/* The regex.o routines are a part of the GNU C-library used with Linux.  */
337 338 339 340 341
/* However, sometimes they disagree with the src/regex.h that comes with Emacs,
   and that can make trouble in etags.c because it gets the regex.h from Emacs
   and the function definitions in libc.  So turn this off.  */
/* #define REGEXP_IN_LIBC */

Richard M. Stallman's avatar
Richard M. Stallman committed
342 343 344 345
/* Use BSD process groups, but use setpgid() instead of setpgrp() to
   actually set a process group. */

#define BSD_PGRPS
346

Gerd Moellmann's avatar
Gerd Moellmann committed
347 348
#define NARROWPROTO 1

349 350 351 352
/* Use mmap directly for allocating larger buffers.  */
#ifdef DOUG_LEA_MALLOC
#undef REL_ALLOC
#endif
353 354 355 356

/* Tell that garbage collector that setjmp is known to save all
   registers relevant for conservative garbage collection in the
   jmp_buf.  */
357 358 359 360 361
/* Not all the architectures are tested, but there are Debian packages
   for SCM and/or Guile on them, so the technique must work.  See also
   comments in alloc.c concerning setjmp and gcc.  Fixme:  it's
   probably safe to make this conditional just on GCC, except for ia64
   register window-flushing.  */
Gerd Moellmann's avatar
Gerd Moellmann committed
362 363 364
/* Don't use #cpu here since in newest development versions of GCC,
   we must call cpp with -traditional, and that disables #cpu.  */

365 366
#if defined __i386__ || defined __sparc__ || defined __mc68000__ \
    || defined __alpha__ || defined __mips__ || defined __s390__ \
Andreas Schwab's avatar
Andreas Schwab committed
367 368
    || defined __arm__ || defined __powerpc__ || defined __amd64__ \
    || defined __ia64__
369
#define GC_SETJMP_WORKS 1
370
#define GC_MARK_STACK GC_MAKE_GCPROS_NOOPS
371 372 373
#ifdef __mc68000__
#define GC_LISP_OBJECT_ALIGNMENT 2
#endif
Andreas Schwab's avatar
Andreas Schwab committed
374 375 376 377 378 379
#ifdef __ia64__
#define GC_MARK_SECONDARY_STACK()				\
  do {								\
    extern void *__libc_ia64_register_backing_store_base;	\
    __builtin_ia64_flushrs ();					\
    mark_memory (__libc_ia64_register_backing_store_base,	\
380
		 __builtin_ia64_bsp (), 0);			\
Andreas Schwab's avatar
Andreas Schwab committed
381 382
  } while (0)
#endif
383
#endif
Miles Bader's avatar
Miles Bader committed
384 385 386

/* arch-tag: 6244ea2a-abd0-44ec-abec-ff3dcc9afea9
   (do not change this comment) */