X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/cda158b40db31dcd6b938ba7ccb6313861594b03..b2c7a1068135e78b065d05069012f2fb240fea9d:/configure.ac diff --git a/configure.ac b/configure.ac index 6f4b3d51c8..c5befd0cc3 100644 --- a/configure.ac +++ b/configure.ac @@ -365,9 +365,6 @@ case "${srcdir}" in * ) srcdir="`(cd ${srcdir}; pwd)`" ;; esac -#### Given the configuration name, set opsysfile to the -#### name of s/*.h file we should use. - ### Canonicalize the configuration name. AC_CANONICAL_HOST @@ -555,8 +552,6 @@ if test $unported = yes; then Check `etc/MACHINES' for recognized configuration names.]) fi -opsysfile="s/${opsys}.h" - #### Choose a compiler. @@ -1104,12 +1099,8 @@ case $opsys in esac -# Configure gnulib before invoking PKG_CHECK_MODULES, as the latter might -# for example add -lrt to RSVG_LIBS, which would then cause gnulib to -# incorrectly conclude that -lrt is not needed to link clock_gettime. -gl_ASSERT_NO_GNULIB_POSIXCHECK -gl_ASSERT_NO_GNULIB_TESTS -gl_INIT +pre_PKG_CONFIG_CFLAGS=$CFLAGS +pre_PKG_CONFIG_LIBS=$LIBS AC_PATH_PROG(PKG_CONFIG, pkg-config, no) @@ -1266,7 +1257,9 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[static struct exception x; x.arg1 = x.arg2 = x.retval; x.name = ""; x.type = 1;]])], emacs_cv_struct_exception=yes, emacs_cv_struct_exception=no)) HAVE_EXCEPTION=$emacs_cv_struct_exception -if test $emacs_cv_struct_exception != yes; then +dnl Define on Darwin so emacs symbols will not conflict with those +dnl in the System framework. Otherwise -prebind will not work. +if test $emacs_cv_struct_exception != yes || test $opsys = darwin; then AC_DEFINE(NO_MATHERR, 1, [Define to 1 if you don't have struct exception in math.h.]) fi @@ -1300,19 +1293,6 @@ AC_CHECK_MEMBERS([struct ifreq.ifr_flags, struct ifreq.ifr_hwaddr, dnl Check for endianness. dnl AC_C_BIGENDIAN is done by gnulib. -AC_CACHE_CHECK([for __attribute__ ((__aligned__ (expr)))], - [emacs_cv_attribute_aligned], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[char __attribute__ ((__aligned__ (1 << 3))) c;]], - [[]])], - [emacs_cv_attribute_aligned=yes], - [emacs_cv_attribute_aligned=no])]) -if test $emacs_cv_attribute_aligned = yes; then - AC_DEFINE([HAVE_ATTRIBUTE_ALIGNED], 1, - [Define to 1 if GCC-style __attribute__ ((__aligned__ (expr))) works.]) -fi - dnl check for Make feature dnl AC_PROG_MAKE_SET is done by Automake. @@ -2135,6 +2115,7 @@ dnl tranle@intellicorp.com says libXmu.a can need XtMalloc in libXt.a to link. fi AC_CHECK_LIB(Xmu, XmuConvertStandardSelection) test $ac_cv_lib_Xmu_XmuConvertStandardSelection = no && LIBS="$OLDLIBS" + dnl ac_cv_lib_Xmu_XmuConvertStandardSelection is also referenced below. fi AC_SUBST(LIBXTR6) @@ -2158,7 +2139,21 @@ fi LIBXP= if test "${USE_X_TOOLKIT}" = "MOTIF"; then - AC_CACHE_CHECK(for Motif version 2.1, emacs_cv_motif_version_2_1, + # OpenMotif may be installed in such a way on some GNU/Linux systems. + if test -d /usr/include/openmotif; then + CPPFLAGS="-I/usr/include/openmotif $CPPFLAGS" + emacs_cv_openmotif=yes + case "$canonical" in + x86_64-*-linux-gnu* | powerpc64-*-linux-gnu* | sparc64-*-linux-gnu*) + test -d /usr/lib64/openmotif && LDFLAGS="-L/usr/lib64/openmotif $LDFLAGS" + ;; + *) + test -d /usr/lib/openmotif && LDFLAGS="-L/usr/lib/openmotif $LDFLAGS" + esac + else + emacs_cv_openmotif=no + fi + AC_CACHE_CHECK(for (Open)Motif version 2.1, emacs_cv_motif_version_2_1, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[#if XmVERSION > 2 || (XmVERSION == 2 && XmREVISION >= 1) int x = 5; @@ -2168,6 +2163,9 @@ Motif version prior to 2.1. emacs_cv_motif_version_2_1=yes, emacs_cv_motif_version_2_1=no)]) if test $emacs_cv_motif_version_2_1 = yes; then AC_CHECK_LIB(Xp, XpCreateContext, LIBXP=-lXp) + if test x$emacs_cv_openmotif = xyes; then + REAL_CPPFLAGS="-I/usr/include/openmotif $REAL_CPPFLAGS" + fi else AC_CACHE_CHECK(for LessTif where some systems put it, emacs_cv_lesstif, # We put this in CFLAGS temporarily to precede other -I options @@ -2708,9 +2706,9 @@ AC_SUBST(BLESSMAIL_TARGET) AC_CHECK_FUNCS(gethostname \ -rename closedir mkdir rmdir getrusage get_current_dir_name \ +closedir getrusage get_current_dir_name \ lrand48 logb frexp fmod cbrt setsid \ -strerror fpathconf select euidaccess getpagesize setlocale \ +fpathconf select euidaccess getpagesize setlocale \ utimes getrlimit setrlimit setpgid getcwd shutdown getaddrinfo \ __fpending strsignal setitimer \ sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \ @@ -2720,6 +2718,8 @@ getpwent endpwent getgrent endgrent \ touchlock \ cfmakeraw cfsetspeed copysign __executable_start) +dnl FIXME Fragile: something else may test for getwd as a dependency. +dnl Change to defining BROKEN_xxx ? dnl getwd appears to be buggy on SVR4.2, so we don't use it. if test $opsys != unixware; then AC_CHECK_FUNCS(getwd) @@ -2730,7 +2730,7 @@ fi ## version number A.09.05. ## You can fix the math library by installing patch number PHSS_4630. ## But we can fix it more reliably for Emacs by just not using rint. -## We also skip HAVE_RANDOM - see comments in src/s/hpux10-20.h. +## We also skip HAVE_RANDOM - see comments in src/conf_post.h. case $opsys in hpux*) : ;; *) AC_CHECK_FUNCS(random rint) ;; @@ -3021,7 +3021,7 @@ AC_SUBST(KRB5LIB) AC_SUBST(DESLIB) AC_SUBST(KRB4LIB) -AC_CHECK_FUNCS(tzset) +AC_CHECK_FUNCS_ONCE(tzset) AC_MSG_CHECKING(whether localtime caches TZ) AC_CACHE_VAL(emacs_cv_localtime_cache, [if test x$ac_cv_func_tzset = xyes; then @@ -3124,18 +3124,139 @@ dnl and macros for terminal control.]) dnl AC_DEFINE(HAVE_TCATTR, 1, [Define to 1 if you have tcgetattr and tcsetattr.]) dnl fi +dnl Turned on June 1996 supposing nobody will mind it. +AC_DEFINE(AMPERSAND_FULL_NAME, 1, [Define to use the convention that & + in the full name stands for the login id.]) + +dnl Every platform that uses configure (ie every non-MS platform) +dnl supports this. There is a create-lockfiles option you can +dnl customize if you do not want the lock files to be written. +dnl So it is not clear that this #define still needs to exist. +AC_DEFINE(CLASH_DETECTION, 1, [Define 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/her Emacs.]) + +dnl Everybody supports this, except MS. +dnl Seems like the kind of thing we should be testing for, though. +## Note: PTYs are broken on darwin <6. Use at your own risk. +AC_DEFINE(HAVE_PTYS, 1, [Define if the system supports pty devices.]) + +dnl Everybody supports this, except MS-DOS. +dnl Seems like the kind of thing we should be testing for, though. +dnl Compare with HAVE_INET_SOCKETS (which is unused...) above. +AC_DEFINE(HAVE_SOCKETS, 1, [Define if the system supports + 4.2-compatible sockets.]) + +AC_DEFINE(NULL_DEVICE, ["/dev/null"], [Name of the file to open to get + a null file, or a data sink.]) + +AC_DEFINE(SEPCHAR, [':'], [Character that separates PATH elements.]) + +dnl Everybody supports this, except MS-DOS. +AC_DEFINE(subprocesses, 1, [Define to enable asynchronous subprocesses.]) + +AC_DEFINE(USER_FULL_NAME, [pw->pw_gecos], [How to get a user's full name.]) + + +AH_TEMPLATE(NO_EDITRES, [Define if XEditRes should not be used.]) + +case $opsys in + aix4-2) + dnl Unfortunately without libXmu we cannot support EditRes. + if test x$ac_cv_lib_Xmu_XmuConvertStandardSelection != xyes; then + AC_DEFINE(NO_EDITRES, 1) + fi + ;; + + hpux*) + dnl Assar Westerlund says this is necessary for + dnl HP-UX 10.20, and that it works for HP-UX 0 as well. + AC_DEFINE(NO_EDITRES, 1) + ;; +esac + + case $opsys in darwin | gnu | hpux* | *bsd ) AC_DEFINE(NO_TERMIO, 1, [Define if termio.h should not be included.]) - ;; + ;; + + irix6-5 | sol2* | unixware ) + dnl Some SVr4s don't define NSIG in sys/signal.h for ANSI environments; + dnl instead, there's a system variable _sys_nsig. Unfortunately, we + dnl need the constant to dimension an array. So wire in the appropriate + dnl value here. + AC_DEFINE(NSIG_MINIMUM, 32, [Minimum value of NSIG.]) + ;; esac -dnl SIGIO exists, but the feature doesn't work in the way Emacs needs. -dnl See eg . + case $opsys in + dnl SIGIO exists, but the feature doesn't work in the way Emacs needs. + dnl See eg . hpux* | irix6-5 | openbsd | sol2* | unixware ) AC_DEFINE(BROKEN_SIGIO, 1, [Define if SIGIO should not be used.]) - ;; + ;; + + aix4-2) + dnl BUILD 9008 - FIONREAD problem still exists in X-Windows. + AC_DEFINE(BROKEN_FIONREAD, 1, [Define if FIONREAD should not be used.]) + dnl As we define BROKEN_FIONREAD, SIGIO will be undefined in systty.h. + dnl But, on AIX, SIGAIO, SIGPTY, and SIGPOLL are defined as SIGIO, + dnl which causes compilation error at init_signals in sysdep.c. + dnl So, we define these macros so that syssignal.h detects them + dnl and undefine SIGAIO, SIGPTY and SIGPOLL. + AC_DEFINE(BROKEN_SIGAIO, 1, [Define if SIGAIO should not be used.]) + AC_DEFINE(BROKEN_SIGPOLL,1, [Define if SIGPOLL should not be used.]) + AC_DEFINE(BROKEN_SIGPTY, 1, [Define if SIGPTY should not be used.]) + + dnl On AIX Emacs uses the gmalloc.c malloc implementation. But given + dnl the way this system works, libc functions that return malloced + dnl memory use the libc malloc implementation. Calling xfree or + dnl xrealloc on the results of such functions results in a crash. + dnl + dnl One solution for this could be to define SYSTEM_MALLOC in configure, + dnl but that does not currently work on this system. + dnl + dnl It is possible to completely override the malloc implementation on + dnl AIX, but that involves putting the malloc functions in a shared + dnl library and setting the MALLOCTYPE environment variable to point to + dnl that shared library. + dnl + dnl Emacs currently calls xrealloc on the results of get_current_dir name, + dnl to avoid a crash just use the Emacs implementation for that function. + dnl + dnl FIXME We could change the AC_CHECK_FUNCS call near the start + dnl of this file, so that we do not check for get_current_dir_name + dnl on AIX. But that might be fragile if something else ends + dnl up testing for get_current_dir_name as a dependency. + AC_DEFINE(BROKEN_GET_CURRENT_DIR_NAME, 1, [Define if + get_current_dir_name should not be used.]) + ;; + + freebsd) + dnl Circumvent a bug in FreeBSD. In the following sequence of + dnl writes/reads on a PTY, read(2) returns bogus data: + dnl + dnl write(2) 1022 bytes + dnl write(2) 954 bytes, get EAGAIN + dnl read(2) 1024 bytes in process_read_output + dnl read(2) 11 bytes in process_read_output + dnl + dnl That is, read(2) returns more bytes than have ever been written + dnl successfully. The 1033 bytes read are the 1022 bytes written + dnl successfully after processing (for example with CRs added if the + dnl terminal is set up that way which it is here). The same bytes will + dnl be seen again in a later read(2), without the CRs. + AC_DEFINE(BROKEN_PTY_READ_AFTER_EAGAIN, 1, [Define on FreeBSD to + work around an issue when reading from a PTY.]) + ;; + + dnl Define the following so emacs symbols will not conflict with those + dnl in the System framework. Otherwise -prebind will not work. + darwin) + AC_DEFINE(NO_ABORT, 1, [Do not define abort in emacs.c.]) + ;; esac case $opsys in @@ -3146,30 +3267,563 @@ case $opsys in esac case $opsys in - gnu-kfreebsd) opsysfile="s/gnu-linux.h" ;; - - hpux11) - dnl See comments in sysdep.c:sys_signal. - dnl SA_RESTART resets the timeout of `select' on hpux11. - dnl Defining BROKEN_SA_RESTART is not the same as undef'ing SA_RESTART. - AC_DEFINE(BROKEN_SA_RESTART, 1, [Define if SA_RESTART should only - be used in batch mode.]) - dnl It works to open the pty's tty in the parent (Emacs), then - dnl close and reopen it in the child. - AC_DEFINE(USG_SUBTTY_WORKS, 1, [Define for USG systems where it - works to open a pty's tty in the parent process, then close and - reopen it in the child.]) - - opsysfile="s/hpux10-20.h" - ;; + darwin | freebsd | netbsd | openbsd ) + AC_DEFINE(DONT_REOPEN_PTY, 1, [Define if process.c does not need to + close a pty to make it a controlling terminal (it is already a + controlling terminal of the subprocess, because we did ioctl TIOCSCTTY).]) + ;; +esac - openbsd) opsysfile="s/netbsd.h" ;; +dnl FIXME Surely we can test for this rather than hard-code it. +case $opsys in + netbsd | openbsd) sound_device="/dev/audio" ;; + *) sound_device="/dev/dsp" ;; +esac - sol2-10) - AC_DEFINE(_STRUCTURED_PROC, 1, [Needed for system_process_attributes - on Solaris.]) - opsysfile="s/sol2-6.h" - ;; +dnl Used in sound.c +AC_DEFINE_UNQUOTED(DEFAULT_SOUND_DEVICE, "$sound_device", + [Name of the default sound device.]) + + +dnl Emacs can read input using SIGIO and buffering characters itself, +dnl or using CBREAK mode and making C-g cause SIGINT. +dnl The choice is controlled by the variable interrupt_input. +dnl +dnl Define INTERRUPT_INPUT to make interrupt_input = 1 the default (use SIGIO) +dnl +dnl Emacs uses the presence or absence of the SIGIO and BROKEN_SIGIO macros +dnl to indicate whether or not signal-driven I/O is possible. It uses +dnl INTERRUPT_INPUT to decide whether to use it by default. +dnl +dnl SIGIO can be used only on systems that implement it (4.2 and 4.3). +dnl CBREAK mode has two disadvantages +dnl 1) At least in 4.2, it is impossible to handle the Meta key properly. +dnl I hear that in system V this problem does not exist. +dnl 2) Control-G causes output to be discarded. +dnl I do not know whether this can be fixed in system V. +dnl +dnl Another method of doing input is planned but not implemented. +dnl It would have Emacs fork off a separate process +dnl to read the input and send it to the true Emacs process +dnl through a pipe. +case $opsys in + darwin | gnu-linux | gnu-kfreebsd ) + AC_DEFINE(INTERRUPT_INPUT, 1, [Define to read input using SIGIO.]) + ;; +esac + + +dnl If the system's imake configuration file defines `NeedWidePrototypes' +dnl as `NO', we must define NARROWPROTO manually. Such a define is +dnl generated in the Makefile generated by `xmkmf'. If we don't define +dnl NARROWPROTO, we will see the wrong function prototypes for X functions +dnl taking float or double parameters. +case $opsys in + cygwin|gnu|gnu-linux|gnu-kfreebsd|irix6-5|freebsd|netbsd|openbsd) + AC_DEFINE(NARROWPROTO, 1, [Define if system's imake configuration + file defines `NeedWidePrototypes' as `NO'.]) + ;; +esac + + +dnl Used in process.c, this must be a loop, even if it only runs once. +dnl (Except on SGI; see below. Take that, clarity and consistency!) +AH_TEMPLATE(PTY_ITERATION, [How to iterate over PTYs.]) +dnl Only used if !PTY_ITERATION. Iterate from FIRST_PTY_LETTER to z, +dnl trying suffixes 0-16. +AH_TEMPLATE(FIRST_PTY_LETTER, [Letter to use in finding device name of + first PTY, if PTYs are supported.]) +AH_TEMPLATE(PTY_OPEN, [How to open a PTY, if non-standard.]) +AH_TEMPLATE(PTY_NAME_SPRINTF, [How to get the device name of the control + end of a PTY, if non-standard.]) +AH_TEMPLATE(PTY_TTY_NAME_SPRINTF, [How to get device name of the tty + end of a PTY, if non-standard.]) + +case $opsys in + aix4-2 ) + AC_DEFINE(PTY_ITERATION, [int c; for (c = 0; !c ; c++)] ) + dnl You allocate a pty by opening /dev/ptc to get the master side. + dnl To get the name of the slave side, you just ttyname() the master side. + AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");] ) + AC_DEFINE(PTY_TTY_NAME_SPRINTF, [strcpy (pty_name, ttyname (fd));] ) + ;; + + cygwin ) + AC_DEFINE(PTY_ITERATION, [int i; for (i = 0; i < 1; i++)] ) + dnl multi-line AC_DEFINEs are hard. :( + AC_DEFINE(PTY_OPEN, [ do { int dummy; SIGMASKTYPE mask; mask = sigblock (sigmask (SIGCHLD)); if (-1 == openpty (&fd, &dummy, pty_name, 0, 0)) fd = -1; sigsetmask (mask); if (fd >= 0) emacs_close (dummy); } while (0)] ) + AC_DEFINE(PTY_NAME_SPRINTF, [] ) + AC_DEFINE(PTY_TTY_NAME_SPRINTF, [] ) + ;; + + darwin ) + AC_DEFINE(PTY_ITERATION, [int i; for (i = 0; i < 1; i++)] ) + dnl Not used, because PTY_ITERATION is defined. + AC_DEFINE(FIRST_PTY_LETTER, ['p']) + dnl Note that openpty may fork via grantpt on Mac OS X 10.4/Darwin 8. + dnl But we don't have to block SIGCHLD because it is blocked in the + dnl implementation of grantpt. + AC_DEFINE(PTY_OPEN, [ do { int slave; if (openpty (&fd, &slave, pty_name, NULL, NULL) == -1) fd = -1; else emacs_close (slave); } while (0)] ) + AC_DEFINE(PTY_NAME_SPRINTF, [] ) + AC_DEFINE(PTY_TTY_NAME_SPRINTF, [] ) + ;; + + gnu | freebsd | netbsd | openbsd ) + AC_DEFINE(FIRST_PTY_LETTER, ['p']) + ;; + + gnu-linux | gnu-kfreebsd ) + dnl if HAVE_GRANTPT + if test "x$ac_cv_func_grantpt" = xyes; then + AC_DEFINE(UNIX98_PTYS, 1, [Define if the system has Unix98 PTYs.]) + AC_DEFINE(PTY_ITERATION, [int i; for (i = 0; i < 1; i++)] ) + dnl Note that grantpt and unlockpt may fork. We must block SIGCHLD + dnl to prevent sigchld_handler from intercepting the child's death. + AC_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)); }] ) + dnl if HAVE_GETPT + if test "x$ac_cv_func_getpt" = xyes; then + AC_DEFINE(PTY_OPEN, [fd = getpt ()]) + AC_DEFINE(PTY_NAME_SPRINTF, [] ) + else + AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptmx");] ) + fi + else + AC_DEFINE(FIRST_PTY_LETTER, ['p']) + fi + ;; + + hpux*) + AC_DEFINE(FIRST_PTY_LETTER, ['p']) + AC_DEFINE(PTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ptym/pty%c%x", c, i);] ) + AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/pty/tty%c%x", c, i);] ) + ;; + + irix6-5 ) + dnl It looks like this cannot be right, because it is not a loop. + dnl However, process.c actually does this: + dnl # ifndef __sgi + dnl continue; + dnl # else + dnl return -1; + dnl # endif + dnl which presumably makes it OK, since irix == sgi (?). + dnl FIXME it seems like this special treatment is unnecessary? + dnl Why can't irix use a single-trip loop like eg cygwin? + AC_DEFINE(PTY_ITERATION, []) + dnl Not used, because PTY_ITERATION is defined. + AC_DEFINE(FIRST_PTY_LETTER, ['q']) + AC_DEFINE(PTY_OPEN, [ { struct sigaction ocstat, cstat; struct stat stb; char * name; sigemptyset(&cstat.sa_mask); cstat.sa_handler = SIG_DFL; cstat.sa_flags = 0; sigaction(SIGCLD, &cstat, &ocstat); name = _getpty (&fd, O_RDWR | O_NDELAY, 0600, 0); sigaction(SIGCLD, &ocstat, (struct sigaction *)0); if (name == 0) return -1; if (fd < 0) return -1; if (fstat (fd, &stb) < 0) return -1; strcpy (pty_name, name); }] ) + dnl No need to get the pty name at all. + AC_DEFINE(PTY_NAME_SPRINTF, [] ) + dnl No need to use sprintf to get the tty name--we get that from _getpty. + AC_DEFINE(PTY_TTY_NAME_SPRINTF, [] ) + ;; + + sol2* ) + dnl Uses sigblock/sigunblock rather than sighold/sigrelse, + dnl which appear to be BSD4.1 specific. It may also be appropriate + dnl for SVR4.x (x<2) but I'm not sure. fnf@cygnus.com + dnl On SysVr4, grantpt(3) forks a subprocess, so keep sigchld_handler() + dnl from intercepting that death. If any child but grantpt's should die + dnl within, it should be caught after sigrelse(2). + AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptsname (int), *ptyname; sigblock (sigmask (SIGCLD)); if (grantpt (fd) == -1) { emacs_close (fd); return -1; } sigunblock (sigmask (SIGCLD)); if (unlockpt (fd) == -1) { emacs_close (fd); return -1; } if (!(ptyname = ptsname (fd))) { emacs_close (fd); return -1; } snprintf (pty_name, sizeof pty_name, "%s", ptyname); }] ) + ;; + + unixware ) + dnl Comments are as per sol2*. + AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptsname (int), *ptyname; sigblock(sigmask(SIGCLD)); if (grantpt(fd) == -1) fatal("could not grant slave pty"); sigunblock(sigmask(SIGCLD)); if (unlockpt(fd) == -1) fatal("could not unlock slave pty"); if (!(ptyname = ptsname(fd))) fatal ("could not enable slave pty"); snprintf (pty_name, sizeof pty_name, "%s", ptyname); }] ) + ;; +esac + + +case $opsys in + sol2* | unixware ) + dnl This change means that we don't loop through allocate_pty too + dnl many times in the (rare) event of a failure. + AC_DEFINE(FIRST_PTY_LETTER, ['z']) + AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptmx");] ) + dnl Push various streams modules onto a PTY channel. Used in process.c. + AC_DEFINE(SETUP_SLAVE_PTY, [if (ioctl (xforkin, I_PUSH, "ptem") == -1) fatal ("ioctl I_PUSH ptem"); if (ioctl (xforkin, I_PUSH, "ldterm") == -1) fatal ("ioctl I_PUSH ldterm"); if (ioctl (xforkin, I_PUSH, "ttcompat") == -1) fatal ("ioctl I_PUSH ttcompat");], [How to set up a slave PTY, if needed.]) + ;; +esac + + +AH_TEMPLATE(SIGNALS_VIA_CHARACTERS, [Make process_send_signal work by +"typing" a signal character on the pty.]) + +case $opsys in + dnl Perry Smith says this is correct for AIX. + dnl thomas@mathematik.uni-bremen.de says this is needed for IRIX. + aix4-2 | cygwin | gnu | irix6-5 | freebsd | netbsd | openbsd ) + AC_DEFINE(SIGNALS_VIA_CHARACTERS, 1) + ;; + + dnl 21 Jun 06: Eric Hanchrow says this works. + dnl FIXME Does gnu-kfreebsd have linux/version.h? It seems unlikely... + gnu-linux | gnu-kfreebsd ) + + AC_MSG_CHECKING([for signals via characters]) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ +#include +#if LINUX_VERSION_CODE < 0x20400 +# error "Linux version too old" +#endif + ]], [[]])], emacs_signals_via_chars=yes, emacs_signals_via_chars=no) + + AC_MSG_RESULT([$emacs_signals_via_chars]) + test $emacs_signals_via_chars = yes && AC_DEFINE(SIGNALS_VIA_CHARACTERS, 1) + ;; +esac + + +dnl Used in dispnew.c +AH_TEMPLATE(PENDING_OUTPUT_COUNT, [Number of chars of output in the +buffer of a stdio stream.]) + +dnl FIXME just PENDING_OUTPUT_COUNT should suffice. +AH_TEMPLATE(GNU_LIBRARY_PENDING_OUTPUT_COUNT, [Value of +PENDING_OUTPUT_COUNT if using the GNU C library.]) + +case $opsys in + cygwin | darwin | freebsd | netbsd | openbsd ) + AC_DEFINE(PENDING_OUTPUT_COUNT(FILE), [((FILE)->_p - (FILE)->_bf._base)]) + ;; + + unixware) + AC_DEFINE(PENDING_OUTPUT_COUNT(FILE), [((FILE)->__ptr - (FILE)->__base)]) + ;; + + gnu | gnu-linux | gnu-kfreebsd ) + AC_MSG_CHECKING([for style of pending output formalism]) + dnl In autoconf 2.67 and later, we could use a single test + dnl since the preprocessed output is accessible in "conftest.i". + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ +#include +#if !defined (_IO_STDIO_H) && !defined (_STDIO_USES_IOSTREAM) +# error "stdio definitions not found" +#endif + ]], [[]])], emacs_pending_output=new, emacs_pending_output=unknown) + + if test $emacs_pending_output = unknown; then + case $opsys in + gnu-linux | gnu-kfreebsd) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ +#include +#ifndef __UCLIBC__ +# error "not using uclibc" +#endif + ]], [[]])], emacs_pending_output=uclibc, emacs_pending_output=old) + ;; + esac + fi + + AC_MSG_RESULT([$emacs_pending_output]) + + case $emacs_pending_output in + new) + dnl New C libio names. + AC_DEFINE(GNU_LIBRARY_PENDING_OUTPUT_COUNT(FILE), + [((FILE)->_IO_write_ptr - (FILE)->_IO_write_base)]) + ;; + uclibc) + dnl Using the uClibc library. + AC_DEFINE(GNU_LIBRARY_PENDING_OUTPUT_COUNT(FILE), + [((FILE)->__bufpos - (FILE)->__bufstart)]) + ;; + old) + dnl Old C++ iostream names. + AC_DEFINE(GNU_LIBRARY_PENDING_OUTPUT_COUNT(FILE), + [((FILE)->_pptr - (FILE)->_pbase)]) + ;; + esac + ;; +esac + + +dnl Used in vm-limit.c +AH_TEMPLATE(DATA_START, [Address of the start of the data segment.]) +dnl Used in lisp.h, emacs.c, mem-limits.h +dnl NEWS.18 describes this as "a number which contains +dnl the high bits to be inclusive or'ed with pointers that are unpacked." +AH_TEMPLATE(DATA_SEG_BITS, [Extra bits to be or'd in with any pointers +stored in a Lisp_Object.]) +dnl if Emacs uses fewer than 32 bits for the value field of a LISP_OBJECT. + +case $opsys in + gnu) + dnl libc defines data_start. + AC_DEFINE(DATA_START, [({ extern int data_start; (char *) &data_start; })]) + ;; + + hpux*) + dnl The data segment on this machine always starts at address 0x40000000. + AC_DEFINE(DATA_START, [0x40000000]) + AC_DEFINE(DATA_SEG_BITS, [0x40000000]) + ;; + irix6-5) + AC_DEFINE(DATA_START, [0x10000000]) + AC_DEFINE(DATA_SEG_BITS, [0x10000000]) + ;; +esac + + +AH_TEMPLATE(ULIMIT_BREAK_VALUE, [Undocumented.]) +AH_TEMPLATE(TAB3, [Undocumented.]) + +case $opsys in + darwin) AC_DEFINE(TAB3, OXTABS) ;; + + gnu | freebsd | netbsd | openbsd ) + AC_DEFINE(TABDLY, OXTABS, [Undocumented.] ) + AC_DEFINE(TAB3, OXTABS) + ;; + + gnu-linux | gnu-kfreebsd ) + dnl libc-linux/sysdeps/linux/i386/ulimit.c says that due to shared + dnl library, we cannot get the maximum address for brk. + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ +#ifndef __i386__ +# error "not i386" +#endif + ]], [[]])], AC_DEFINE(ULIMIT_BREAK_VALUE, [(32*1024*1024)]), []) + + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ +#ifndef __ia64__ +# error "not ia64" +#endif + ]], [[]])], AC_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)], + [Mark a secondary stack, like the register stack on the ia64.]), []) + ;; + + hpux*) + AC_DEFINE(RUN_TIME_REMAP, 1, [Define if emacs.c needs to call + run_time_remap; for HPUX.]) + ;; + + irix6-5) + dnl Ulimit(UL_GMEMLIM) is busted... + AC_DEFINE(ULIMIT_BREAK_VALUE, [0x14000000]) + ;; +esac + + +dnl These won't be used automatically yet. We also need to know, at least, +dnl that the stack is continuous. +AH_TEMPLATE(GC_SETJMP_WORKS, [Define if setjmp is known to save all + registers relevant for conservative garbage collection in the jmp_buf.]) + +AH_TEMPLATE(GC_MARK_STACK, [Define to GC_USE_GCPROS_AS_BEFORE if + conservative garbage collection is not known to work.]) + + +case $opsys in + aix4-2 | hpux* | unixware) + dnl Conservative garbage collection has not been tested, so for now + dnl play it safe and stick with the old-fashioned way of marking. + AC_DEFINE(GC_MARK_STACK, [GC_USE_GCPROS_AS_BEFORE]) + ;; + + dnl Not all the architectures are tested, but there are Debian packages + dnl for SCM and/or Guile on them, so the technique must work. See also + dnl comments in alloc.c concerning setjmp and gcc. + dnl Fixme: it's probably safe to just use the GCC conditional below. + gnu-linux | gnu-kfreebsd ) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ +#if defined __i386__ || defined __sparc__ || defined __mc68000__ \ + || defined __alpha__ || defined __mips__ || defined __s390__ \ + || defined __arm__ || defined __powerpc__ || defined __amd64__ \ + || defined __ia64__ || defined __sh__ +/* ok */ +#else +# error "setjmp not known to work on this arch" +#endif + ]], [[]])], AC_DEFINE(GC_SETJMP_WORKS, 1), + AC_DEFINE(GC_MARK_STACK, [GC_USE_GCPROS_AS_BEFORE]) ) + ;; +esac + + +if test x$GCC = xyes; then + dnl GC_SETJMP_WORKS is nearly always appropriate for GCC. + AC_DEFINE(GC_SETJMP_WORKS, 1) +else + case $opsys in + dnl irix: Tested on Irix 6.5. SCM worked on earlier versions. + freebsd | netbsd | openbsd | irix6-5 | sol2* ) + AC_DEFINE(GC_SETJMP_WORKS, 1) + ;; + esac +fi dnl GCC? + + +case $opsys in + sol2* | unixware ) + dnl setjmp and longjmp can safely replace _setjmp and _longjmp, + dnl but they will run more slowly. + AC_DEFINE(_setjmp, setjmp, [Some platforms redefine this.]) + AC_DEFINE(_longjmp, longjmp, [Some platforms redefine this.]) + dnl TIOCGPGRP is broken in SysVr4, so we can't send signals to PTY + dnl subprocesses the usual way. But TIOCSIGNAL does work for PTYs, + dnl and this is all we need. + AC_DEFINE(TIOCSIGSEND, TIOCSIGNAL, [Some platforms redefine this.]) + ;; +esac + +dnl Used in process.c. +case $opsys in + irix6-5 | sol2* | unixware ) + dnl It is possible to receive SIGCHLD when there are no children + dnl waiting, because a previous waitsys(2) cleaned up the carcass + dnl of child without clearing the SIGCHLD pending info. So, use a + dnl non-blocking wait3 instead, which maps to waitpid(2) in SysVr4. + AC_DEFINE(wait3(status, options, rusage), + [waitpid ((pid_t) -1, (status), (options))], + [Some platforms redefine this.]) + dnl FIXME this makes no sense, because WRETCODE is only used in + dnl process.c, which includes syswait.h aftet config.h, and the + dnl former unconditionally redefines WRETCODE. + AC_DEFINE(WRETCODE(w), [(w >> 8)], [Some platforms redefine this.]) + ;; +esac + + +case $opsys in + hpux* | sol2* ) + dnl Used in xfaces.c. + AC_DEFINE(XOS_NEEDS_TIME_H, 1, [Compensate for a bug in Xos.h on + some systems, where it requires time.h.]) + ;; + + netbsd | openbsd ) + dnl Greg A. Woods says we must include signal.h + dnl before syssignal.h is included, to work around interface conflicts + dnl that are handled with CPP __RENAME() macro in signal.h. + AC_DEFINE(SIGNAL_H_AHB, 1, [Define if AH_BOTTOM should include signal.h.]) + ;; +esac + + +dnl Define symbols to identify the version of Unix this is. +dnl Define all the symbols that apply correctly. +AH_TEMPLATE(BSD4_2, [Define if the system is compatible with BSD 4.2.]) +AH_TEMPLATE(BSD_SYSTEM, [Define if the system is compatible with BSD 4.2.]) +AH_TEMPLATE(USG, [Define if the system is compatible with System III.]) +AH_TEMPLATE(USG5, [Define if the system is compatible with System V.]) +AH_TEMPLATE(USG5_4, [Define if the system is compatible with System V Release 4.]) + +case $opsys in + aix4-2) + AC_DEFINE(USG, []) + AC_DEFINE(USG5, []) + dnl This symbol should be defined on AIX Version 3 ??????? + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ +#ifndef _AIX +# error "_AIX not defined" +#endif + ]], [[]])], [], AC_DEFINE(_AIX, [], [Define if the system is AIX.])) + ;; + + cygwin) + AC_DEFINE(CYGWIN, 1, [Define if the system is Cygwin.]) + ;; + + darwin) + dnl BSD4_3 and BSD4_4 are already defined in sys/param.h. + AC_DEFINE(BSD4_2, []) + AC_DEFINE(BSD_SYSTEM, []) + dnl More specific than the above two. We cannot use __APPLE__ as this + dnl may not be defined on non-OSX Darwin, and we cannot define DARWIN + dnl here because Panther and lower CoreFoundation.h uses DARWIN to + dnl distinguish OS X from pure Darwin. + AC_DEFINE(DARWIN_OS, [], [Define if the system is Darwin.]) + ;; + + freebsd) + AC_DEFINE(BSD4_2, []) + dnl Hack to avoid calling AC_PREPROC_IFELSE multiple times. + dnl Would not be needed with autoconf >= 2.67, where the + dnl preprocessed output is accessible in "conftest.i". + AC_DEFINE(BSD_SYSTEM_AHB, 1, [Define if AH_BOTTOM should change BSD_SYSTEM.]) + ;; + + gnu | netbsd | openbsd ) + AC_DEFINE(BSD4_2, []) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ +#ifndef BSD_SYSTEM +# error "BSD_SYSTEM not defined" +#endif + ]], [[]])], [], AC_DEFINE(BSD_SYSTEM, 43) ) + ;; + + gnu-linux | gnu-kfreebsd ) + AC_DEFINE(USG, []) + AC_DEFINE(GNU_LINUX, [], [Define if ths system is compatible with GNU/Linux.]) + ;; + + hpux*) + AC_DEFINE(USG, []) + AC_DEFINE(USG5, []) + AC_DEFINE(HPUX, [], [Define if the system is HPUX.]) + ;; + + irix6-5) + AC_DEFINE(USG, []) + AC_DEFINE(USG5, []) + AC_DEFINE(USG5_4, []) + AC_DEFINE(IRIX6_5, [], [Define if the system is IRIX.]) + ;; + + sol2*) + AC_DEFINE(USG, []) + AC_DEFINE(USG5, []) + AC_DEFINE(USG5_4, []) + AC_DEFINE(SOLARIS2, [], [Define if the system is Solaris.]) + ;; + + unixware) + AC_DEFINE(USG, []) + AC_DEFINE(USG5, []) + AC_DEFINE(USG5_4, []) + ;; +esac + + +case $opsys in + dnl Emacs supplies its own malloc, but glib (part of Gtk+) calls + dnl memalign and on Cygwin, that becomes the Cygwin-supplied memalign. + dnl As malloc is not the Cygwin malloc, the Cygwin memalign always + dnl returns ENOSYS. A workaround is to set G_SLICE=always-malloc. */ + cygwin) + AC_DEFINE(G_SLICE_ALWAYS_MALLOC, 1, [Define to set the + G_SLICE environment variable to "always-malloc" at startup, if + using GTK.]) + ;; + + hpux11) + dnl See comments in sysdep.c:sys_signal. + dnl SA_RESTART resets the timeout of `select' on hpux11. + dnl Defining BROKEN_SA_RESTART is not the same as undef'ing SA_RESTART. + AC_DEFINE(BROKEN_SA_RESTART, 1, [Define if SA_RESTART should only + be used in batch mode.]) + dnl It works to open the pty's tty in the parent (Emacs), then + dnl close and reopen it in the child. + AC_DEFINE(USG_SUBTTY_WORKS, 1, [Define for USG systems where it + works to open a pty's tty in the parent process, then close and + reopen it in the child.]) + ;; + + irix6-5) + AC_DEFINE(PREFER_VSUSP, 1, [Define if process_send_signal should + use VSUSP instead of VSWTCH.]) + AC_DEFINE(SETPGRP_RELEASES_CTTY, 1, [Define if process.c:child_setup + should not call setpgrp.]) + ;; + + sol2-10) + AC_DEFINE(_STRUCTURED_PROC, 1, [Needed for system_process_attributes + on Solaris.]) + ;; esac # Set up the CFLAGS for real compilation, so we can substitute it. @@ -3222,11 +3876,7 @@ AC_SUBST(GNUSTEP_CFLAGS) AC_SUBST(CFLAGS) ## Used in lwlib/Makefile.in. AC_SUBST(X_TOOLKIT_TYPE) -if test -n "${opsysfile}"; then - S_FILE="\$(srcdir)/${opsysfile}" -else - S_FILE= -fi +S_FILE= AC_SUBST(S_FILE) AC_SUBST(ns_appdir) AC_SUBST(ns_appbindir) @@ -3239,9 +3889,8 @@ AC_DEFINE_UNQUOTED(EMACS_CONFIGURATION, "${canonical}", [Define to the canonical Emacs configuration name.]) AC_DEFINE_UNQUOTED(EMACS_CONFIG_OPTIONS, "${ac_configure_args}", [Define to the options passed to configure.]) -if test -n "$opsysfile"; then - AC_DEFINE_UNQUOTED(config_opsysfile, "${opsysfile}", - [Define to the used os dependent file.]) +if test -z "No longer used"; then + AC_DEFINE(config_opsysfile, [], [Define to the used os dependent file.]) fi XMENU_OBJ= @@ -3392,6 +4041,24 @@ AC_SUBST(CYGWIN_OBJ) AC_SUBST(PRE_ALLOC_OBJ) AC_SUBST(POST_ALLOC_OBJ) +# Configure gnulib. Although this does not affect CFLAGS or LIBS permanently. +# it temporarily reverts them to their pre-pkg-config values, +# because gnulib needs to work with both src (which uses the +# pkg-config stuff) and lib-src (which does not). For example, gnulib +# may need to determine whether LIB_CLOCK_GETTIME should contain -lrt, +# and it therefore needs to run in an environment where LIBS does not +# already contain -lrt merely because 'pkg-config --libs' printed '-lrt' +# for some package unrelated to lib-src. +SAVE_CFLAGS=$CFLAGS +SAVE_LIBS=$LIBS +CFLAGS=$pre_PKG_CONFIG_CFLAGS +LIBS="$LIB_PTHREAD $pre_PKG_CONFIG_LIBS" +gl_ASSERT_NO_GNULIB_POSIXCHECK +gl_ASSERT_NO_GNULIB_TESTS +gl_INIT +CFLAGS=$SAVE_CFLAGS +LIBS=$SAVE_LIBS + case "$opsys" in aix4-2) LD_SWITCH_SYSTEM_TEMACS="-Wl,-bnodelcsect" ;; @@ -3559,97 +4226,7 @@ along with GNU Emacs. If not, see . */ #define EMACS_CONFIG_H ])dnl -AH_BOTTOM([ -/* On AIX 3 this must be included before any other include file. */ -#include -#if ! HAVE_ALLOCA -# error "alloca not available on this machine" -#endif - -/* Define AMPERSAND_FULL_NAME if you use the convention - that & in the full name stands for the login id. */ -/* Turned on June 1996 supposing nobody will mind it. */ -#define AMPERSAND_FULL_NAME - -/* `subprocesses' should be defined if you want to - have code for asynchronous subprocesses - (as used in M-x compile and M-x shell). - Only MSDOS does not support this (it overrides - this in its config_opsysfile below). */ - -#define subprocesses - -/* Include the os dependent file. */ -#ifdef config_opsysfile -# include config_opsysfile -#endif - -/* GNUstep needs a bit more pure memory. Of the existing knobs, - SYSTEM_PURESIZE_EXTRA seems like the least likely to cause problems. - (There is probably a better place to do this, but right now the - Cocoa side does this in s/darwin.h and we cannot parallel this - exactly since GNUstep is multi-OS. */ -#if defined HAVE_NS && defined NS_IMPL_GNUSTEP -# define SYSTEM_PURESIZE_EXTRA 30000 -#endif - -#ifdef emacs /* Don't do this for lib-src. */ -/* Tell regex.c to use a type compatible with Emacs. */ -#define RE_TRANSLATE_TYPE Lisp_Object -#define RE_TRANSLATE(TBL, C) CHAR_TABLE_TRANSLATE (TBL, C) -#ifdef make_number -/* If make_number is a macro, use it. */ -#define RE_TRANSLATE_P(TBL) (!EQ (TBL, make_number (0))) -#else -/* If make_number is a function, avoid it. */ -#define RE_TRANSLATE_P(TBL) (!(INTEGERP (TBL) && XINT (TBL) == 0)) -#endif -#endif - -#include -#include - -#if __GNUC__ >= 3 /* On GCC 3.0 we might get a warning. */ -#define NO_INLINE __attribute__((noinline)) -#else -#define NO_INLINE -#endif - -#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) -#define EXTERNALLY_VISIBLE __attribute__((externally_visible)) -#else -#define EXTERNALLY_VISIBLE -#endif - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define ATTRIBUTE_FORMAT(spec) /* empty */ -#endif - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) -# define ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) -#else -# define ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) -#endif - -#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST - -/* Some versions of GNU/Linux define noinline in their headers. */ -#ifdef noinline -#undef noinline -#endif - -/* These won't be used automatically yet. We also need to know, at least, - that the stack is continuous. */ -#ifdef __GNUC__ -# ifndef GC_SETJMP_WORKS - /* GC_SETJMP_WORKS is nearly always appropriate for GCC. */ -# define GC_SETJMP_WORKS 1 -# endif -#endif +AH_BOTTOM([#include #endif /* EMACS_CONFIG_H */ @@ -3665,14 +4242,17 @@ End: #### It makes printing result more understandable as using GTK sets #### toolkit_scroll_bars to yes by default. if test "${HAVE_GTK}" = "yes"; then - USE_X_TOOLKIT=GTK + if test "${with_gtk3}" = "yes"; then + USE_X_TOOLKIT=GTK3 + else + USE_X_TOOLKIT=GTK + fi fi echo " Configured for \`${canonical}'. Where should the build process find the source code? ${srcdir} - What operating system file should Emacs use? ${opsysfile-none} What compiler should emacs be built with? ${CC} ${CFLAGS} Should Emacs use the GNU version of malloc? ${GNU_MALLOC}${GNU_MALLOC_reason} Should Emacs use a relocating allocator for buffers? ${REL_ALLOC} @@ -3810,7 +4390,7 @@ dnl by configure. This also explains the `move-if-change' test and dnl the use of force in the `epaths-force' rule in Makefile.in. AC_CONFIG_COMMANDS([epaths], [ echo creating src/epaths.h -${MAKE-make} epaths-force +${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force ], [GCC="$GCC" CPPFLAGS="$CPPFLAGS"]) AC_CONFIG_COMMANDS([gdbinit], [