X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/3a707ba5cc66b2af35b4a2a02e28eb211d250972..c43fb4c32df6393a3e001151693b8ce28f860976:/src/s/gnu-linux.h diff --git a/src/s/gnu-linux.h b/src/s/gnu-linux.h index c1fa55501d..b4031bb1ca 100644 --- a/src/s/gnu-linux.h +++ b/src/s/gnu-linux.h @@ -1,12 +1,16 @@ /* 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-1986, 1992, 1994, 1996, 1999, 2001-2012 + Free Software Foundation, Inc. + +This file was put together by Michael K. Johnson and Rik Faith. This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +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 -the Free Software Foundation; either version 2, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, or +(at your option) 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 @@ -14,94 +18,57 @@ 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 -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -/* This file was put together by Michael K. Johnson and Rik Faith. */ - - -/* - * Define symbols to identify the version of Unix this is. - * Define all the symbols that apply correctly. - */ +along with GNU Emacs. If not, see . */ -/* #define UNIPLUS */ -/* #define USG5 */ +/* Define symbols to identify the version of Unix this is. + Define all the symbols that apply correctly. */ #define USG -/* #define BSD */ -#define LINUX - -/* SYSTEM_TYPE should indicate the kind of system you are using. - It sets the Lisp variable system-type. */ - -#define SYSTEM_TYPE "gnu/linux" /* All the best software is free. */ - -/* 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 -#ifdef HAVE_LINUX_VERSION_H -#include - -#if LINUX_VERSION_CODE > 0x10200 -#define LINUX_SIGIO_DOES_WORK -#endif /* LINUX_VERSION_CODE > 0x10200 */ -#endif /* HAVE_LINUX_VERSION_H */ -#endif /* emacs */ -#endif /* NOT_C_CODE */ +#define GNU_LINUX + +#if defined HAVE_GRANTPT +#define UNIX98_PTYS + +/* Run only once. We need a `for'-loop because the code uses `continue'. */ +#define PTY_ITERATION int i; 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; \ + } \ + snprintf (pty_name, sizeof pty_name, "%s", ptyname); \ + 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. - */ - -#define HAVE_TERMIOS - -/* - * Define HAVE_PTYS if the system supports pty devices. - */ +#endif /* not HAVE_GRANTPT */ +/* 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. */ - -#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. */ - -/* 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. */ - -#define MAIL_USE_FLOCK - -/* 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. */ - -#define CLASH_DETECTION - /* 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 @@ -109,177 +76,7 @@ Boston, MA 02111-1307, USA. */ your system and must be used only through an encapsulation (Which you should place, by convention, in sysdep.c). */ -/* 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 */ - -/* #define LINUX_LDAV_FILE "/proc/loadavg" */ - -/* This is needed for dispnew.c:update_frame */ - -#ifdef emacs -#include /* Get the definition of _IO_STDIO_H. */ -#if defined(_IO_STDIO_H) || defined(_STDIO_USES_IOSTREAM) -/* new C libio names */ -#define GNU_LIBRARY_PENDING_OUTPUT_COUNT(FILE) \ - ((FILE)->_IO_write_ptr - (FILE)->_IO_write_base) -#else /* !_IO_STDIO_H */ -/* old C++ iostream names */ -#define GNU_LIBRARY_PENDING_OUTPUT_COUNT(FILE) \ - ((FILE)->_pptr - (FILE)->_pbase) -#endif /* !_IO_STDIO_H */ -#endif /* emacs */ - -/* Ask GCC where to find libgcc.a. */ -#define LIB_GCC `$(CC) $(C_SWITCH_X_SITE) -print-libgcc-file-name` - -#ifndef __ELF__ -/* 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 /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. */ -#ifndef __GNUC__ -#define LD_SWITCH_SYSTEM LD_SWITCH_X_SITE_AUX -#else /* GCC */ -/* We use ./prefix-args because we don't know whether LD_SWITCH_X_SITE_AUX - has anything in it. It can be empty. - This works ok in src. Luckily lib-src does not use LD_SWITCH_SYSTEM. */ -#define LD_SWITCH_SYSTEM `./prefix-args -Xlinker LD_SWITCH_X_SITE_AUX` -#endif /* GCC */ -#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 -/* Some versions of Linux define SIGURG and SIGPOLL as aliases for SIGIO. - This prevents lossage in process.c. */ -#undef SIGURG -#undef SIGPOLL -#endif -#endif - -/* This is needed for sysdep.c */ - -#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 */ - #define POSIX /* affects getpagesize.h and systty.h */ -#define POSIX_SIGNALS - -/* Best not to include -lg, unless it is last on the command line */ -#define LIBS_DEBUG -#ifndef __ELF__ -#define LIB_STANDARD -lc /* avoid -lPW */ -#else -#undef LIB_GCC -#define LIB_GCC -#define LIB_STANDARD -lgcc -lc -lgcc /usr/lib/crtn.o -#endif - -/* 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 - -/* Let's try this out, just in case. - Nah. Rik Faith says it doesn't work well. */ -/* #define SIGNALS_VIA_CHARACTERS */ - -/* Rob Malouf says: - SYSV IPC is standard a standard part of Linux since version 0.99pl10, - and is a very common addition to previous versions. */ - -#ifdef TERM -#define LIBS_SYSTEM -lclient -#define C_SWITCH_SYSTEM -D_BSD_SOURCE -I/usr/src/term -#else -/* alane@wozzle.linet.org says that -lipc is not a separate library, - since libc-4.4.1. So -lipc was deleted. */ -#define LIBS_SYSTEM -#define C_SWITCH_SYSTEM -D_BSD_SOURCE -#endif - -/* Paul Abrahams says this is needed. */ -#define LIB_MOTIF -lXm -lXpm - -#ifdef HAVE_LIBNCURSES -#define TERMINFO -#define LIBS_TERMCAP -lncurses -#endif - -#define HAVE_SYSVIPC - -#ifdef __ELF__ -#define UNEXEC unexelf.o -#define UNEXEC_USE_MAP_PRIVATE -#endif - -#ifdef LINUX_QMAGIC - -#define HAVE_TEXT_START -#define UNEXEC unexsunos4.o -#define N_PAGSIZ(x) PAGE_SIZE - -#else /* not LINUX_QMAGIC */ - -#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) - -#endif /* not LINUX_QMAGIC */ - -#if 0 -/* 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 -#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; @@ -288,14 +85,37 @@ Boston, MA 02111-1307, USA. */ #define HAVE_XRMSETDATABASE #endif -/* The regex.o routines are a part of the GNU C-library used with Linux. */ -/* 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 */ - -/* Use BSD process groups, but use setpgid() instead of setpgrp() to - actually set a process group. */ +#define NARROWPROTO 1 + +/* 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__ || defined __amd64__ \ + || defined __ia64__ || defined __sh__ +#define GC_SETJMP_WORKS 1 +#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, \ + __builtin_ia64_bsp ()); \ + } while (0) +#endif +#else +#define GC_MARK_STACK GC_USE_GCPROS_AS_BEFORE +#endif -#define BSD_PGRPS -#define setpgrp(pid,pgid) setpgid((pid),(pgid)) +#ifdef __i386__ +/* libc-linux/sysdeps/linux/i386/ulimit.c says that due to shared library, */ +/* we cannot get the maximum address for brk */ +# define ULIMIT_BREAK_VALUE (32*1024*1024) +#endif