(GC_SETJMP_WORKS, GC_MARK_STACK): Define for more
[bpt/emacs.git] / src / s / gnu-linux.h
index c11d5f9..83201e0 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is the configuration file for Linux-based GNU systems
-   Copyright (C) 1985, 1986, 1992, 1994, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1985, 86, 92, 94, 96, 1999, 2002 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -29,8 +29,9 @@ Boston, MA 02111-1307, USA.  */
 /* #define UNIPLUS */
 /* #define USG5 */
 #define USG
-/* #define BSD */
+/* #define BSD_SYSTEM */
 #define LINUX
+#define GNU_LINUX
 
 /* SYSTEM_TYPE should indicate the kind of system you are using.
  It sets the Lisp variable system-type.  */
@@ -47,30 +48,66 @@ Boston, MA 02111-1307, USA.  */
 #if LINUX_VERSION_CODE > 0x10200
 #define LINUX_SIGIO_DOES_WORK
 #endif /* LINUX_VERSION_CODE > 0x10200 */
+#if LINUX_VERSION_CODE >= 0x20000
+#define LINUX_MAP_SHARED_DOES_WORK
+#endif /* LINUX_VERSION_CODE >= 0x20000 */
 #endif /* HAVE_LINUX_VERSION_H */
 #endif /* emacs */
 #endif /* NOT_C_CODE */
 
+#if defined HAVE_GRANTPT
+#define UNIX98_PTYS
+
+/* Run only once.  We need a `for'-loop because the code uses
+   `continue'.  */
+
+#define PTY_ITERATION  for (i = 0; i < 1; i++)
+
+#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));                    \
+  }
+
+#else /* not HAVE_GRANTPT */
+
 /* Letter to use in finding device name of first pty,
-  if system supports pty's.  'p' means it is /dev/ptyp0  */
+   if system supports pty's.  'p' means it is /dev/ptyp0  */
 
 #define FIRST_PTY_LETTER 'p'
 
-/*
- *     Define HAVE_TERMIOS if the system provides POSIX-style
- *     functions and macros for terminal control.
- */
+#endif  /* not HAVE_GRANDPT */
+
+/*  Define HAVE_TERMIOS if the system provides POSIX-style
   functions and macros for terminal control.  */
 
 #define HAVE_TERMIOS
 
-/*
- *     Define HAVE_PTYS if the system supports pty devices.
- */
+/* Define HAVE_PTYS if the system supports pty devices. */
 
 #define HAVE_PTYS
 
-/* Uncomment this later when other problems are dealt with -mkj */
-
 #define HAVE_SOCKETS
 
 /* Define this symbol if your system has the functions bcopy, etc. */
@@ -109,22 +146,6 @@ Boston, MA 02111-1307, USA.  */
    your system and must be used only through an encapsulation
    (Which you should place, by convention, in sysdep.c).  */
 \f
-/* On POSIX systems the system calls are interruptible by signals
- that the user program has elected to catch.  Thus the system call
- must be retried in these cases.  To handle this without massive
- changes in the source code, we remap the standard system call names
- to names for our own functions in sysdep.c that do the system call
- with retries. */
-
-#define read sys_read
-#define write sys_write
-#define open sys_open
-#define close sys_close
-
-#define INTERRUPTIBLE_OPEN
-#define INTERRUPTIBLE_CLOSE
-#define INTERRUPTIBLE_IO
-
 /* If you mount the proc file system somewhere other than /proc
    you will have to uncomment the following and make the proper
    changes */
@@ -153,28 +174,37 @@ Boston, MA 02111-1307, USA.  */
 /* GNU/Linux usually has crt0.o in a non-standard place */
 #define START_FILES pre-crt0.o /usr/lib/crt0.o
 #else
-#define START_FILES pre-crt0.o /alt/usr/lib/crt1.o /alt/usr/lib/crti.o
+#define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o
 #endif
 
 #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.  */
 
+#ifdef __mips__
+#define LD_SWITCH_SYSTEM -G 0 LD_SWITCH_X_SITE_AUX
+#else
 #define LD_SWITCH_SYSTEM LD_SWITCH_X_SITE_AUX
+#endif /* __mips__ */
+
+/* Link temacs with -z nocombreloc so that unexec works right, whether or
+   not -z combreloc is the default.  GNU ld ignores unknown -z KEYWORD
+   switches, so this also works with older versions that don't implement
+   -z combreloc.  */
+#define LD_SWITCH_SYSTEM_TEMACS -z nocombreloc
 #endif /* __ELF__ */
 
 /* As of version 1.1.51, Linux did not actually implement SIGIO.
    But it works in newer versions.  */
-/* Here we assume that signal.h is already included.  */
 #ifdef emacs
 #ifdef LINUX_SIGIO_DOES_WORK
 #define INTERRUPT_INPUT
 #else
-#undef SIGIO
+#define BROKEN_SIGIO
 /* Some versions of Linux define SIGURG and SIGPOLL as aliases for SIGIO.
    This prevents lossage in process.c.  */
-#undef SIGURG
-#undef SIGPOLL
+#define BROKEN_SIGURG
+#define BROKEN_SIGPOLL
 #endif
 #endif
 
@@ -182,9 +212,6 @@ Boston, MA 02111-1307, USA.  */
 
 #define NO_SIOCTL_H           /* don't have sioctl.h */
 
-#define HAVE_VFORK
-#define HAVE_SYS_SIGLIST
-#define HAVE_GETWD            /* cure conflict with getcwd? */
 #define HAVE_WAIT_HEADER
 
 #define SYSV_SYSTEM_DIR       /* use dirent.h */
@@ -199,7 +226,7 @@ Boston, MA 02111-1307, USA.  */
 #else
 #undef LIB_GCC
 #define LIB_GCC
-#define LIB_STANDARD -lgcc -lc -lgcc /alt/usr/lib/crtn.o
+#define LIB_STANDARD -lgcc -lc -lgcc /usr/lib/crtn.o
 #endif
 
 /* Don't use -g in test compiles in configure.
@@ -224,6 +251,9 @@ Boston, MA 02111-1307, USA.  */
 /* alane@wozzle.linet.org says that -lipc is not a separate library,
    since libc-4.4.1.  So -lipc was deleted.  */
 #define LIBS_SYSTEM
+/* _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  */
 #define C_SWITCH_SYSTEM -D_BSD_SOURCE
 #endif
 
@@ -239,8 +269,10 @@ Boston, MA 02111-1307, USA.  */
 
 #ifdef __ELF__
 #define UNEXEC unexelf.o
+#ifndef LINUX_MAP_SHARED_DOES_WORK
 #define UNEXEC_USE_MAP_PRIVATE
 #endif
+#endif
 
 #ifdef LINUX_QMAGIC
 
@@ -292,4 +324,31 @@ Boston, MA 02111-1307, USA.  */
    actually set a process group. */
 
 #define BSD_PGRPS
-#define setpgrp(pid,pgid) setpgid((pid),(pgid))
+
+#define NARROWPROTO 1
+
+/* Use mmap directly for allocating larger buffers.  */
+#ifdef DOUG_LEA_MALLOC
+#undef REL_ALLOC
+#endif
+
+/* Tell that garbage collector that setjmp is known to save all
+   registers relevant for conservative garbage collection in the
+   jmp_buf.  */
+/* 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.  */
+/* Don't use #cpu here since in newest development versions of GCC,
+   we must call cpp with -traditional, and that disables #cpu.  */
+
+#if defined __i386__ || defined __sparc__ || defined __mc68000__ \
+    || defined __alpha__ || defined __mips__ || defined __s390__ \
+    || defined __arm__ || defined __powerpc__
+#define GC_SETJMP_WORKS 1
+#define GC_MARK_STACK GC_MAKE_GCPROS_NOOPS
+#ifdef __mc68000__
+#define GC_LISP_OBJECT_ALIGNMENT 2
+#endif
+#endif