diff src/config.h.in @ 2367:ecf1ebac70d8

[xemacs-hg @ 2004-11-04 23:05:23 by ben] commit mega-patch configure.in: Turn off -Winline and -Wchar-subscripts. Use the right set of cflags when compiling modules. Rewrite ldap configuration to separate the inclusion of lber (needed in recent Cygwin) from the basic checks for the needed libraries. add a function for MAKE_JUNK_C; initially code was added to generate xemacs.def using this, but it will need to be rewritten. add an rm -f for junk.c to avoid weird Cygwin bug with cp -f onto an existing file. Sort list of auto-detected functions and eliminate unused checks for stpcpy, setlocale and getwd. Add autodetection of Cygwin scanf problems BETA: Rewrite section on configure to indicate what flags are important and what not. digest-doc.c, make-dump-id.c, profile.c, sorted-doc.c: Add proper decls for main(). make-msgfile.c: Document that this is old junk. Move proposal to text.c. make-msgfile.lex: Move proposal to text.c. make-mswin-unicode.pl: Convert error-generating code so that the entire message will be seen as a single unrecognized token. mule/mule-ccl.el: Update docs. lispref/mule.texi: Update CCL docs. ldap/eldap.c: Mule-ize. Use EXTERNAL_LIST_LOOP_2 instead of deleted EXTERNAL_LIST_LOOP. * XEmacs 21.5.18 "chestnut" is released. --------------------------------------------------------------- MULE-RELATED WORK: --------------------------------------------------------------- --------------------------- byte-char conversion --------------------------- buffer.c, buffer.h, insdel.c, text.c: Port FSF algorithm for byte-char conversion, replacing broken previous version. Track the char position of the gap. Add functions to do char-byte conversion downwards as well as upwards. Move comments about algorithm workings to internals manual. --------------------------- work on types --------------------------- alloc.c, console-x-impl.h, dump-data.c, dump-data.h, dumper.c, dialog-msw.c, dired-msw.c, doc.c, editfns.c, esd.c, event-gtk.h, event-msw.c, events.c, file-coding.c, file-coding.h, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-shared.c, glyphs-x.c, glyphs.c, glyphs.h, gui.c, hpplay.c, imgproc.c, intl-win32.c, lrecord.h, lstream.c, keymap.c, lisp.h, libsst.c, linuxplay.c, miscplay.c, miscplay.h, mule-coding.c, nas.c, nt.c, ntheap.c, ntplay.c, objects-msw.c, objects-tty.c, objects-x.c, print.c, process-nt.c, process.c, redisplay.h, select-common.h, select-gtk.c, select-x.c, sgiplay.c, sound.c, sound.h, sunplay.c, sysfile.h, sysdep.c, syswindows.h, text.c, unexnt.c, win32.c, xgccache.c: Further work on types. This creates a full set of types for all the basic semantics of `char' that I have so far identified, so that its semantics can always be identified for the purposes of proper Mule-safe code, and the raw use of `char' always avoided. (1) More type renaming, for consistency of naming. Char_ASCII -> Ascbyte UChar_ASCII -> UAscbyte Char_Binary -> CBinbyte UChar_Binary -> Binbyte SChar_Binary -> SBinbyte (2) Introduce Rawbyte, CRawbyte, Boolbyte, Chbyte, UChbyte, and Bitbyte and use them. (3) New types Itext, Wexttext and Textcount for separating out the concepts of bytes and textual units (different under UTF-16 and UTF-32, which are potential internal encodings). (4) qxestr*_c -> qxestr*_ascii. lisp.h: New; goes with other qxe() functions. #### Maybe goes in a different section. lisp.h: Group generic int-type defs together with EMACS_INT defs. lisp.h: * lisp.h (WEXTTEXT_IS_WIDE) New defns. lisp.h: New type to replace places where int occurs as a boolean. It's signed because occasionally people may want to use -1 as an error value, and because unsigned ints are viral -- see comments in the internals manual against using them. dynarr.c: int -> Bytecount. --------------------------- Mule-izing --------------------------- device-x.c: Partially Mule-ize. dumper.c, dumper.h: Mule-ize. Use Rawbyte. Use stderr_out not printf. Use wext_*(). sysdep.c, syswindows.h, text.c: New Wexttext API for manipulation of external text that may be Unicode (e.g. startup code under Windows). emacs.c: Mule-ize. Properly deal with argv in external encoding. Use wext_*() and Wexttext. Use Rawbyte. #if 0 some old junk on SCO that is unlikely to be correct. Rewrite allocation code in run-temacs. emacs.c, symsinit.h, win32.c: Rename win32 init function and call it even earlier, to initialize mswindows_9x_p even earlier, for use in startup code (XEUNICODE_P). process.c: Use _wenviron not environ under Windows, to get Unicode environment variables. event-Xt.c: Mule-ize drag-n-drop related stuff. dragdrop.c, dragdrop.h, frame-x.c: Mule-ize. text.h: Add some more stand-in defines for particular kinds of conversion; use in Mule-ization work in frame-x.c etc. --------------------------- Freshening --------------------------- intl-auto-encap-win32.c, intl-auto-encap-win32.h: Regenerate. --------------------------- Unicode-work --------------------------- intl-win32.c, syswindows.h: Factor out common options to MultiByteToWideChar and WideCharToMultiByte. Add convert_unicode_to_multibyte_malloc() and convert_unicode_to_multibyte_dynarr() and use. Add stuff for alloca() conversion of multibyte/unicode. alloc.c: Use dfc_external_data_len() in case of unicode coding system. alloc.c, mule-charset.c: Don't zero out and reinit charset Unicode tables. This fucks up dump-time loading. Anyway, either we load them at dump time or run time, never both. unicode.c: Dump the blank tables as well. --------------------------------------------------------------- DOCUMENTATION, MOSTLY MULE-RELATED: --------------------------------------------------------------- EmacsFrame.c, emodules.c, event-Xt.c, fileio.c, input-method-xlib.c, mule-wnnfns.c, redisplay-gtk.c, redisplay-tty.c, redisplay-x.c, regex.c, sysdep.c: Add comment about Mule work needed. text.h: Add more documentation describing why DFC routines were not written to return their value. Add some other DFC documentation. console-msw.c, console-msw.h: Add pointer to docs in win32.c. emacs.c: Add comments on sources of doc info. text.c, charset.h, unicode.c, intl-win32.c, intl-encap-win32.c, text.h, file-coding.c, mule-coding.c: Collect background comments and related to text matters and internationalization, and proposals for work to be done, in text.c or Internals manual, stuff related to specific textual API's in text.h, and stuff related to internal implementation of Unicode conversion in unicode.c. Put lots of pointers to the comments to make them easier to find. s/mingw32.h, s/win32-common.h, s/win32-native.h, s/windowsnt.h, win32.c: Add bunches of new documentation on the different kinds of builds and environments under Windows and how they work. Collect this info in win32.c. Add pointers to these docs in the relevant s/* files. emacs.c: Document places with long comments. Remove comment about exiting, move to internals manual, put in pointer. event-stream.c: Move docs about event queues and focus to internals manual, put in pointer. events.h: Move docs about event stream callbacks to internals manual, put in pointer. profile.c, redisplay.c, signal.c: Move documentation to the Internals manual. process-nt.c: Add pointer to comment in win32-native.el. lisp.h: Add comments about some comment conventions. lisp.h: Add comment about the second argument. device-msw.c, redisplay-msw.c: @@#### comments are out-of-date. --------------------------------------------------------------- PDUMP WORK (MOTIVATED BY UNICODE CHANGES) --------------------------------------------------------------- alloc.c, buffer.c, bytecode.c, console-impl.h, console.c, device.c, dumper.c, lrecord.h, elhash.c, emodules.h, events.c, extents.c, frame.c, glyphs.c, glyphs.h, mule-charset.c, mule-coding.c, objects.c, profile.c, rangetab.c, redisplay.c, specifier.c, specifier.h, window.c, lstream.c, file-coding.h, file-coding.c: PDUMP: Properly implement dump_add_root_block(), which never worked before, and is necessary for dumping Unicode tables. Pdump name changes for accuracy: XD_STRUCT_PTR -> XD_BLOCK_PTR. XD_STRUCT_ARRAY -> XD_BLOCK_ARRAY. XD_C_STRING -> XD_ASCII_STRING. *_structure_* -> *_block_*. lrecord.h: some comments added about dump_add_root_block() vs dump_add_root_block_ptr(). extents.c: remove incorrect comment about pdump problems with gap array. --------------------------------------------------------------- ALLOCATION --------------------------------------------------------------- abbrev.c, alloc.c, bytecode.c, casefiddle.c, device-msw.c, device-x.c, dired-msw.c, doc.c, doprnt.c, dragdrop.c, editfns.c, emodules.c, file-coding.c, fileio.c, filelock.c, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, gui-msw.c, gui-x.c, imgproc.c, intl-win32.c, lread.c, menubar-gtk.c, menubar.c, nt.c, objects-msw.c, objects-x.c, print.c, process-nt.c, process-unix.c, process.c, realpath.c, redisplay.c, search.c, select-common.c, symbols.c, sysdep.c, syswindows.h, text.c, text.h, ui-byhand.c: New macros {alloca,xnew}_{itext,{i,ext,raw,bin,asc}bytes} for more convenient allocation of these commonly requested items. Modify functions to use alloca_ibytes, alloca_array, alloca_extbytes, xnew_ibytes, etc. also XREALLOC_ARRAY, xnew. alloc.c: Rewrite the allocation functions to factor out repeated code. Add assertions for freeing dumped data. lisp.h: Moved down and consolidated with other allocation stuff. lisp.h, dynarr.c: New functions for allocation that's very efficient when mostly in LIFO order. lisp.h, text.c, text.h: Factor out some stuff for general use by alloca()-conversion funs. text.h, lisp.h: Fill out convenience routines for allocating various kinds of bytes and put them in lisp.h. Use them in place of xmalloc(), ALLOCA(). text.h: Fill out the convenience functions so the _MALLOC() kinds match the alloca() kinds. --------------------------------------------------------------- ERROR-CHECKING --------------------------------------------------------------- text.h: Create ASSERT_ASCTEXT_ASCII() and ASSERT_ASCTEXT_ASCII_LEN() from similar Eistring checkers and change the Eistring checkers to use them instead. --------------------------------------------------------------- MACROS IN LISP.H --------------------------------------------------------------- lisp.h: Redo GCPRO declarations. Create a "base" set of functions that can be used to generate any kind of gcpro sets -- regular, ngcpro, nngcpro, private ones used in GC_EXTERNAL_LIST_LOOP_2. buffer.c, callint.c, chartab.c, console-msw.c, device-x.c, dialog-msw.c, dired.c, extents.c, ui-gtk.c, rangetab.c, nt.c, mule-coding.c, minibuf.c, menubar-msw.c, menubar.c, menubar-gtk.c, lread.c, lisp.h, gutter.c, glyphs.c, glyphs-widget.c, fns.c, fileio.c, file-coding.c, specifier.c: Eliminate EXTERNAL_LIST_LOOP, which does not check for circularities. Use EXTERNAL_LIST_LOOP_2 instead or EXTERNAL_LIST_LOOP_3 or EXTERNAL_PROPERTY_LIST_LOOP_3 or GC_EXTERNAL_LIST_LOOP_2 (new macro). Removed/redid comments on EXTERNAL_LIST_LOOP. --------------------------------------------------------------- SPACING FIXES --------------------------------------------------------------- callint.c, hftctl.c, number-gmp.c, process-unix.c: Spacing fixes. --------------------------------------------------------------- FIX FOR GEOMETRY PROBLEM IN FIRST FRAME --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. toolbar.c: bug fix for problem of initial frame being 77 chars wide on Windows. will be overridden by my other ws. --------------------------------------------------------------- FIX FOR LEAKING PROCESS HANDLES: --------------------------------------------------------------- process-nt.c: Fixes for leaking handles. Inspired by work done by Adrian Aichner <adrian@xemacs.org>. --------------------------------------------------------------- FIX FOR CYGWIN BUG (Unicode-related): --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. --------------------------------------------------------------- WARNING FIXES: --------------------------------------------------------------- console-stream.c: `reinit' is unused. compiler.h, event-msw.c, frame-msw.c, intl-encap-win32.c, text.h: Add stuff to deal with ANSI-aliasing warnings I got. regex.c: Gather includes together to avoid warning. --------------------------------------------------------------- CHANGES TO INITIALIZATION ROUTINES: --------------------------------------------------------------- buffer.c, emacs.c, console.c, debug.c, device-x.c, device.c, dragdrop.c, emodules.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, events.c, extents.c, faces.c, file-coding.c, fileio.c, font-lock.c, frame-msw.c, glyphs-widget.c, glyphs.c, gui-x.c, insdel.c, lread.c, lstream.c, menubar-gtk.c, menubar-x.c, minibuf.c, mule-wnnfns.c, objects-msw.c, objects.c, print.c, scrollbar-x.c, search.c, select-x.c, text.c, undo.c, unicode.c, window.c, symsinit.h: Call reinit_*() functions directly from emacs.c, for clarity. Factor out some redundant init code. Move disallowed stuff that had crept into vars_of_glyphs() into complex_vars_of_glyphs(). Call init_eval_semi_early() from eval.c not in the middle of vars_of_() in emacs.c since there should be no order dependency in the latter calls. --------------------------------------------------------------- ARMAGEDDON: --------------------------------------------------------------- alloc.c, emacs.c, lisp.h, print.c: Rename inhibit_non_essential_printing_operations to inhibit_non_essential_conversion_operations. text.c: Assert on !inhibit_non_essential_conversion_operations. console-msw.c, print.c: Don't do conversion in SetConsoleTitle or FindWindow to avoid problems during armageddon. Put #errors for NON_ASCII_INTERNAL_FORMAT in places where problems would arise. --------------------------------------------------------------- CHANGES TO THE BUILD PROCEDURE: --------------------------------------------------------------- config.h.in, s/cxux.h, s/usg5-4-2.h, m/powerpc.h: Add comment about correct ordering of this file. Rearrange everything to follow this -- put all #undefs together and before the s&m files. Add undefs for HAVE_ALLOCA, C_ALLOCA, BROKEN_ALLOCA_IN_FUNCTION_CALLS, STACK_DIRECTION. Remove unused HAVE_STPCPY, HAVE_GETWD, HAVE_SETLOCALE. m/gec63.h: Deleted; totally broken, not used at all, not in FSF. m/7300.h, m/acorn.h, m/alliant-2800.h, m/alliant.h, m/altos.h, m/amdahl.h, m/apollo.h, m/att3b.h, m/aviion.h, m/celerity.h, m/clipper.h, m/cnvrgnt.h, m/convex.h, m/cydra5.h, m/delta.h, m/delta88k.h, m/dpx2.h, m/elxsi.h, m/ews4800r.h, m/gould.h, m/hp300bsd.h, m/hp800.h, m/hp9000s300.h, m/i860.h, m/ibmps2-aix.h, m/ibmrs6000.h, m/ibmrt-aix.h, m/ibmrt.h, m/intel386.h, m/iris4d.h, m/iris5d.h, m/iris6d.h, m/irist.h, m/isi-ov.h, m/luna88k.h, m/m68k.h, m/masscomp.h, m/mg1.h, m/mips-nec.h, m/mips-siemens.h, m/mips.h, m/news.h, m/nh3000.h, m/nh4000.h, m/ns32000.h, m/orion105.h, m/pfa50.h, m/plexus.h, m/pmax.h, m/powerpc.h, m/pyrmips.h, m/sequent-ptx.h, m/sequent.h, m/sgi-challenge.h, m/symmetry.h, m/tad68k.h, m/tahoe.h, m/targon31.h, m/tekxd88.h, m/template.h, m/tower32.h, m/tower32v3.h, m/ustation.h, m/vax.h, m/wicat.h, m/xps100.h: Delete C_ALLOCA, HAVE_ALLOCA, STACK_DIRECTION, BROKEN_ALLOCA_IN_FUNCTION_CALLS. All of this is auto-detected. When in doubt, I followed recent FSF sources, which also have these things deleted.
author ben
date Thu, 04 Nov 2004 23:08:28 +0000
parents 702b5727498a
children 166ed8151e62
line wrap: on
line diff
--- a/src/config.h.in	Thu Nov 04 22:51:31 2004 +0000
+++ b/src/config.h.in	Thu Nov 04 23:08:28 2004 +0000
@@ -1,6 +1,6 @@
 /* XEmacs site configuration template file.  -*- C -*-
    Copyright (C) 1986, 1991-1994, 1998, 1999 Free Software Foundation, Inc.
-   Copyright (C) 2000, 2001, 2002 Ben Wing.
+   Copyright (C) 2000, 2001, 2002, 2004 Ben Wing.
 
 This file is part of XEmacs.
 
@@ -27,6 +27,21 @@
 #ifndef _SRC_CONFIG_H_
 #define _SRC_CONFIG_H_
 
+/* The proper format of this file:
+
+1. All #undef statements that are changed by configure should go together,
+   BEFORE the inclusion of the s&m files, and need to be bracketed by
+   #ifndef WIN32_NO_CONFIGURE.  There is currently only one exception to
+   this: SYSTEM_TYPE.
+
+2. All other code, except for the things that may be referenced in s&m
+   files (there is very very little of this) need to go AFTER the inclusion
+   of s&m files.
+
+Together, this ensures that the s&m files can override configure
+determinations as necessary, and we will properly notice this.
+*/
+
 /*
 This file now serves both as config.h.in and simply as config.h under
 Windows NT.  Under Windows NT, there is no configure script that
@@ -133,12 +148,6 @@
 /* Allow the configurer to specify if she wants site-modules. */
 #undef INHIBIT_SITE_MODULES
 
-/* This will be removed in 19.15. */
-/* Hah!  Try 20.3 ... */
-/* Hah!  Try never ... */
-/* If at first you don't succeed, try, try again. */
-/* #define LOSING_BYTECODE */
-
 /* Undefine on systems which don't have processes */
 #undef HAVE_UNIX_PROCESSES
 
@@ -160,6 +169,30 @@
 /* Use a debugging malloc? -- experimental */
 #undef USE_DEBUG_MALLOC
 
+/* Use the relocating allocator for buffer space? */
+#undef REL_ALLOC
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at run-time.
+        STACK_DIRECTION > 0 => grows toward higher addresses
+        STACK_DIRECTION < 0 => grows toward lower addresses
+        STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Is alloca() broken when part of an argument to a function call? */
+#undef BROKEN_ALLOCA_IN_FUNCTION_CALLS
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
 /* Compile in TTY support? */
 #undef HAVE_TTY
 
@@ -185,18 +218,6 @@
 #undef NARROWPROTO
 #endif /* HAVE_X_WINDOWS */
 
-#endif /* WIN32_NO_CONFIGURE */
-
-#ifdef HAVE_X_WINDOWS
-/* The following should always be defined, no matter what xmkmf thinks. */
-#ifndef NeedFunctionPrototypes
-#define NeedFunctionPrototypes 1
-#endif
-#ifndef FUNCPROTO
-#define FUNCPROTO 15
-#endif
-#endif /* HAVE_X_WINDOWS */
-
 /* Defines for building Gtk applications */
 #undef HAVE_GNOME
 #undef HAVE_GTK
@@ -205,22 +226,6 @@
 #undef HAVE_GLADE_H
 #undef LIBGLADE_XML_TXTDOMAIN
 
-/* Define HAVE_WINDOW_SYSTEM if any windowing system is available. */
-#if defined (HAVE_GTK) || defined (HAVE_X_WINDOWS) || defined (HAVE_MS_WINDOWS) /* || defined (HAVE_NEXTSTEP) */
-#define HAVE_WINDOW_SYSTEM
-#endif
-
-#if defined (HAVE_GTK) || defined (HAVE_X_WINDOWS)
-#define HAVE_XLIKE
-#endif
-
-/* Define HAVE_UNIXOID_EVENT_LOOP if we use select() to wait for events. */
-#if defined (HAVE_X_WINDOWS) || defined (HAVE_TTY) || defined (HAVE_MSG_SELECT)
-#define HAVE_UNIXOID_EVENT_LOOP
-#endif
-
-#ifndef WIN32_NO_CONFIGURE /* Defined in xemacs.mak or s/windowsnt.h: */
-
 /* XFree86 has a different prototype for this function */
 #undef HAVE_XREGISTERIMINSTANTIATECALLBACK
 #undef XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE
@@ -343,6 +348,9 @@
 /* Can `gettimeofday' accept two arguments? */
 #undef GETTIMEOFDAY_ONE_ARGUMENT
 
+/* Is scanf() broken? (Under certain versions of Cygwin) */
+#undef CYGWIN_SCANF_BUG
+
 #undef HAVE_MMAP
 #undef HAVE_STRCOLL
 #undef HAVE_GETPGRP
@@ -350,6 +358,7 @@
 
 #undef HAVE_INVERSE_HYPERBOLIC
 
+/* Functions in the big list of functions checked for */
 #undef HAVE_CBRT
 #undef HAVE_CLOSEDIR
 #undef HAVE_DUP2
@@ -357,14 +366,15 @@
 #undef HAVE_FMOD
 #undef HAVE_FPATHCONF
 #undef HAVE_FREXP
+#undef HAVE_FSYNC
 #undef HAVE_FTIME
+#undef HAVE_FTRUNCATE
 #undef HAVE_GETADDRINFO
 #undef HAVE_GETHOSTNAME
 #undef HAVE_GETNAMEINFO
 #undef HAVE_GETPAGESIZE
 #undef HAVE_GETRLIMIT
 #undef HAVE_GETTIMEOFDAY
-#undef HAVE_GETWD
 #undef HAVE_GETCWD
 #undef HAVE_LINK
 #undef HAVE_LOGB
@@ -376,7 +386,6 @@
 #undef HAVE_POLL
 #undef HAVE_RANDOM
 #undef HAVE_READLINK
-#undef HAVE_REALPATH
 #undef HAVE_RENAME
 #undef HAVE_RES_INIT
 #undef HAVE_RINT
@@ -388,21 +397,24 @@
 #undef HAVE_SIGBLOCK
 #undef HAVE_SIGHOLD
 #undef HAVE_SIGPROCMASK
-#undef HAVE_SIGSETJMP
 #undef HAVE_SNPRINTF
-#undef HAVE_STPCPY
 #undef HAVE_STRERROR
 #undef HAVE_STRLWR
 #undef HAVE_STRUPR
 #undef HAVE_SYMLINK
 #undef HAVE_TZSET
 #undef HAVE_ULIMIT
+#undef HAVE_UMASK
 #undef HAVE_USLEEP
+#undef HAVE_VLIMIT
+#undef HAVE_VSNPRINTF
+#undef HAVE_WAITPID
+#undef HAVE_WCSCMP
+#undef HAVE_WCSLEN
+
 #undef HAVE_UTIME
 #undef HAVE_UTIMES
-#undef HAVE_WAITPID
-#undef HAVE_VSNPRINTF
-#undef HAVE_VLIMIT
+#undef HAVE_SIGSETJMP
 
 /* Many flavors of PTY support */
 #undef HAVE_GETPT	/* glibc's easy pty allocation function */
@@ -428,9 +440,6 @@
 #undef HAVE_SYSVIPC
 #undef HAVE_LOCKF
 #undef HAVE_FLOCK
-#undef HAVE_FSYNC
-#undef HAVE_FTRUNCATE
-#undef HAVE_UMASK
 
 #undef SYSV_SYSTEM_DIR
 #undef NONSYSTEM_DIR_LIBRARY
@@ -667,116 +676,58 @@
 #undef gid_t
 #undef socklen_t
 
-#endif /* WIN32_NO_CONFIGURE */
-
-/* USER_FULL_NAME returns a string that is the user's full name.
-   It can assume that the variable `pw' points to the password file
-   entry for this user.
-
-   At some sites, the pw_gecos field contains the user's full name.
-   If neither this nor any other field contains the right thing, use
-   pw_name, giving the user's login name, since that is better than
-   nothing. */
-#define USER_FULL_NAME pw->pw_gecos
-
-#if (defined (QUANTIFY) || defined (PURIFY)) && !defined (XLIB_ILLEGAL_ACCESS)
-#define XLIB_ILLEGAL_ACCESS 1
-#endif
-
-#define XEMACS_WANTS_C_ALLOCA
-
-/* alloca twiddling.
-   Because we might be #including alloca.h here, feature test macros
-   such as _XOPEN_SOURCE must be defined above. */
+/* Enhanced numeric support */
+#undef WITH_NUMBER_TYPES
+#undef WITH_GMP
+#undef WITH_MP
+#undef MP_PREFIX
+#undef HAVE_MP_MOVE
 
-#undef HAVE_ALLOCA_H
-#ifndef NOT_C_CODE
-#if defined (__CYGWIN__)
-/* We get complaints about redefinitions if we just use the __GNUC__
-   definition: stdlib.h also includes alloca.h, which defines it slightly
-   differently */
-#include <alloca.h>
-#elif defined (__GNUC__)
-#define alloca __builtin_alloca
-#elif defined (WIN32_NO_CONFIGURE)
-/* Defines size_t and alloca ().  */
-#include <malloc.h>
-#elif defined (__DECC)
-#include <alloca.h>
-#pragma intrinsic(alloca)
-#elif defined (HAVE_ALLOCA_H)
-#include <alloca.h>
-#elif defined (_AIX)
-/* AIX requires this before any "real" code in the translation unit.  */
-#pragma alloca
-#elif ! defined (alloca)
-#ifdef C_ALLOCA
-#define alloca xemacs_c_alloca
-#else
-void *alloca ();
-#endif /* C_ALLOCA */
-#endif /* !defined (alloca) */
-#endif /* C code */
+#undef SIZEOF_SHORT
+#undef SIZEOF_INT
+#undef SIZEOF_LONG
+#undef SIZEOF_LONG_LONG
+#undef SIZEOF_VOID_P
+#undef SIZEOF_DOUBLE
 
-/* The configuration script may define `opsysfile' to be the name of
-   the s/...h file that describes your operating system.
-   The file name is chosen based on the configuration name. */
+/* some systems (Cygwin) typedef u?intptr_t in <sys/types.h>
+   but the standard is <inttypes.h>
+   ugliness due to last-resort conditional typedef'ing in lisp.h */
+#undef HAVE_INTPTR_T_IN_SYS_TYPES_H
+
+/* Does the keyword `inline' exist?  */
+#undef inline
 
-#if defined (__cplusplus) && !defined (NOT_C_CODE)
-extern "C" {
-#endif
-
-#undef config_opsysfile
-#ifdef WIN32_NO_CONFIGURE
-#include "s/windowsnt.h"
-#elif defined (config_opsysfile)
-#include config_opsysfile
-#endif
-
-/* The configuration script may define `machfile' to be the name of
-   the m/...h file that describes the machine you are using.
-   The file name is chosen based on the configuration name. */
-
-#undef config_machfile
-#ifdef WIN32_NO_CONFIGURE
-#include "m/windowsnt.h"
-#elif defined (config_machfile)
-#include config_machfile
-#endif
-
-#if defined (__cplusplus) && !defined (NOT_C_CODE)
-}
-#endif
+/* movemail options */
+/* Should movemail use POP3 for mail access? */
+#undef MAIL_USE_POP
+/* Should movemail use kerberos for POP authentication? */
+#undef KERBEROS
+/* Should movemail use hesiod for getting POP server host? */
+#undef HESIOD
+/* Determine type of mail locking. */
+#undef MAIL_LOCK_LOCKF
+#undef MAIL_LOCK_FLOCK
+#undef MAIL_LOCK_DOT
+#undef MAIL_LOCK_LOCKING
+#undef MAIL_LOCK_MMDF
 
-/* s&m files shouldn't be required to define anything, or even to exist.
-   If the s&m files don't define SYSTEM_TYPE, configure will select an
-   appropriate default value. */
-#ifndef SYSTEM_TYPE
-#undef SYSTEM_TYPE
-#endif
-
-#if defined (USE_SYSTEM_MALLOC) && !defined (SYSTEM_MALLOC)
-#define SYSTEM_MALLOC
-#endif
-
-/* Define the return type of signal handlers if the s/xxx.h file
-   did not already do so. */
-#define RETSIGTYPE void
+#undef HAVE_MKSTEMP
 
-#ifndef XCDECL
-#define XCDECL
-#endif
+#undef PREFIX_USER_DEFINED
+#undef EXEC_PREFIX_USER_DEFINED
+#undef MODULEDIR_USER_DEFINED
+#undef SITEMODULEDIR_USER_DEFINED
+#undef DOCDIR_USER_DEFINED
+#undef LISPDIR_USER_DEFINED
+#undef PACKAGE_PATH_USER_DEFINED
+#undef SITELISPDIR_USER_DEFINED
+#undef ARCHLIBDIR_USER_DEFINED
+#undef ETCDIR_USER_DEFINED
+#undef INFODIR_USER_DEFINED
+#undef INFOPATH_USER_DEFINED
 
-/* SIGTYPE is the macro we actually use. */
-#ifndef SIGTYPE
-#define SIGTYPE RETSIGTYPE XCDECL
-#define SIGRETURN return
-#endif
-
-#ifndef WIN32_NO_CONFIGURE /* Defined in xemacs.mak or s/windowsnt.h: */
-
-/* Use the relocating allocator for buffer space? */
-#undef REL_ALLOC
+#undef PDUMP
 
 /* Define DYNODUMP if it is necessary to properly dump on this system.
    Currently this is only Solaris 2.x, for x < 6. */
@@ -838,10 +789,131 @@
 
 #endif /* WIN32_NO_CONFIGURE */
 
+/* alloca twiddling.
+   Because we might be #including alloca.h here, feature test macros
+   such as _XOPEN_SOURCE must be defined above.
+
+   #### This really should go below the inclusion of s&m files, like
+   everything else. */
+
+#ifndef NOT_C_CODE
+#if defined (__CYGWIN__)
+/* We get complaints about redefinitions if we just use the __GNUC__
+   definition: stdlib.h also includes alloca.h, which defines it slightly
+   differently */
+#include <alloca.h>
+#elif defined (__GNUC__)
+#define alloca __builtin_alloca
+#elif defined (WIN32_NO_CONFIGURE)
+/* Defines size_t and alloca ().  */
+#include <malloc.h>
+#elif defined (__DECC)
+#include <alloca.h>
+#pragma intrinsic(alloca)
+#elif defined (HAVE_ALLOCA_H)
+#include <alloca.h>
+#elif defined (_AIX)
+/* AIX requires this before any "real" code in the translation unit.  */
+#pragma alloca
+#elif ! defined (alloca)
+#ifdef C_ALLOCA
+#define alloca xemacs_c_alloca
+#else
+void *alloca ();
+#endif /* C_ALLOCA */
+#endif /* !defined (alloca) */
+#endif /* C code */
+
+/* The configuration script may define `opsysfile' to be the name of
+   the s/...h file that describes your operating system.
+   The file name is chosen based on the configuration name. */
+
+#if defined (__cplusplus) && !defined (NOT_C_CODE)
+extern "C" {
+#endif
+
+#undef config_opsysfile
+#ifdef WIN32_NO_CONFIGURE
+#include "s/windowsnt.h"
+#elif defined (config_opsysfile)
+#include config_opsysfile
+#endif
+
+/* The configuration script may define `machfile' to be the name of
+   the m/...h file that describes the machine you are using.
+   The file name is chosen based on the configuration name. */
+
+#undef config_machfile
+#ifdef WIN32_NO_CONFIGURE
+#include "m/windowsnt.h"
+#elif defined (config_machfile)
+#include config_machfile
+#endif
+
+#if defined (__cplusplus) && !defined (NOT_C_CODE)
+}
+#endif
+
+/* This will be removed in 19.15. */
+/* Hah!  Try 20.3 ... */
+/* Hah!  Try never ... */
+/* If at first you don't succeed, try, try again. */
+/* #define LOSING_BYTECODE */
+
+/* USER_FULL_NAME returns a string that is the user's full name.
+   It can assume that the variable `pw' points to the password file
+   entry for this user.
+
+   At some sites, the pw_gecos field contains the user's full name.
+   If neither this nor any other field contains the right thing, use
+   pw_name, giving the user's login name, since that is better than
+   nothing. */
+#define USER_FULL_NAME pw->pw_gecos
+
+#define XEMACS_WANTS_C_ALLOCA
+
+/* s&m files shouldn't be required to define anything, or even to exist.
+   If the s&m files don't define SYSTEM_TYPE, configure will select an
+   appropriate default value. */
+#ifndef SYSTEM_TYPE
+#undef SYSTEM_TYPE
+#endif
+
+#if defined (USE_SYSTEM_MALLOC) && !defined (SYSTEM_MALLOC)
+#define SYSTEM_MALLOC
+#endif
+
+/* Define the return type of signal handlers if the s/xxx.h file
+   did not already do so. */
+#define RETSIGTYPE void
+
+#ifndef XCDECL
+#define XCDECL
+#endif
+
+/* SIGTYPE is the macro we actually use. */
+#ifndef SIGTYPE
+#define SIGTYPE RETSIGTYPE XCDECL
+#define SIGRETURN return
+#endif
+
+/* Define HAVE_WINDOW_SYSTEM if any windowing system is available. */
+#if defined (HAVE_GTK) || defined (HAVE_X_WINDOWS) || defined (HAVE_MS_WINDOWS) /* || defined (HAVE_NEXTSTEP) */
+#define HAVE_WINDOW_SYSTEM
+#endif
+
 #if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_DIALOGS) || defined (HAVE_TOOLBARS) || defined (HAVE_WIDGETS)
 #define HAVE_GUI_OBJECTS
 #endif
 
+#if defined (HAVE_MENUBARS) || defined (HAVE_DIALOGS)
+#define HAVE_POPUPS
+#endif
+
+#if defined (HAVE_GTK) || defined (HAVE_X_WINDOWS)
+#define HAVE_XLIKE
+#endif
+
 /* For the moment, Athena widgets and dialogs may be very unstable and not
    working well, but things under Windows work much better.  configure by
    default tries to turn Windows widgets and dialogs on, but the Athena
@@ -854,8 +926,23 @@
 #define HAVE_X_DIALOGS
 #endif
 
-#if defined (HAVE_MENUBARS) || defined (HAVE_DIALOGS)
-#define HAVE_POPUPS
+#ifdef HAVE_X_WINDOWS
+/* The following should always be defined, no matter what xmkmf thinks. */
+#ifndef NeedFunctionPrototypes
+#define NeedFunctionPrototypes 1
+#endif
+#ifndef FUNCPROTO
+#define FUNCPROTO 15
+#endif
+#endif /* HAVE_X_WINDOWS */
+
+#if (defined (QUANTIFY) || defined (PURIFY)) && !defined (XLIB_ILLEGAL_ACCESS)
+#define XLIB_ILLEGAL_ACCESS 1
+#endif
+
+/* Define HAVE_UNIXOID_EVENT_LOOP if we use select() to wait for events. */
+#if defined (HAVE_X_WINDOWS) || defined (HAVE_TTY) || defined (HAVE_MSG_SELECT)
+#define HAVE_UNIXOID_EVENT_LOOP
 #endif
 
 /* If you are using SunOS 4.1.1 and X11r5, then you need this patch.
@@ -891,25 +978,6 @@
 #define listen Rlisten
 #endif /* HAVE_SOCKS && !DO_NOT_SOCKSIFY */
 
-#ifndef WIN32_NO_CONFIGURE /* Defined in xemacs.mak or s/windowsnt.h: */
-
-#undef SIZEOF_SHORT
-#undef SIZEOF_INT
-#undef SIZEOF_LONG
-#undef SIZEOF_LONG_LONG
-#undef SIZEOF_VOID_P
-#undef SIZEOF_DOUBLE
-
-/* some systems (Cygwin) typedef u?intptr_t in <sys/types.h>
-   but the standard is <inttypes.h>
-   ugliness due to last-resort conditional typedef'ing in lisp.h */
-#undef HAVE_INTPTR_T_IN_SYS_TYPES_H
-
-/* Does the keyword `inline' exist?  */
-#undef inline
-
-#endif /* WIN32_NO_CONFIGURE */
-
 #ifndef BITS_PER_CHAR
 #define BITS_PER_CHAR 8
 #endif
@@ -920,13 +988,6 @@
 #define VOID_P_BITS (SIZEOF_VOID_P * BITS_PER_CHAR)
 #define DOUBLE_BITS (SIZEOF_DOUBLE * BITS_PER_CHAR)
 
-/* Enhanced numeric support */
-#undef WITH_NUMBER_TYPES
-#undef WITH_GMP
-#undef WITH_MP
-#undef MP_PREFIX
-#undef HAVE_MP_MOVE
-
 /* Use `INLINE_HEADER' to define inline functions in .h files.
    Use `inline static' to define inline functions in .c files.
    See the Internals manual for examples and more information. */
@@ -988,41 +1049,6 @@
 # define JMP_BUF jmp_buf
 #endif
 
-#ifndef WIN32_NO_CONFIGURE /* Defined in xemacs.mak or s/windowsnt.h: */
-
-/* movemail options */
-/* Should movemail use POP3 for mail access? */
-#undef MAIL_USE_POP
-/* Should movemail use kerberos for POP authentication? */
-#undef KERBEROS
-/* Should movemail use hesiod for getting POP server host? */
-#undef HESIOD
-/* Determine type of mail locking. */
-#undef MAIL_LOCK_LOCKF
-#undef MAIL_LOCK_FLOCK
-#undef MAIL_LOCK_DOT
-#undef MAIL_LOCK_LOCKING
-#undef MAIL_LOCK_MMDF
-
-#undef HAVE_MKSTEMP
-
-#undef PREFIX_USER_DEFINED
-#undef EXEC_PREFIX_USER_DEFINED
-#undef MODULEDIR_USER_DEFINED
-#undef SITEMODULEDIR_USER_DEFINED
-#undef DOCDIR_USER_DEFINED
-#undef LISPDIR_USER_DEFINED
-#undef PACKAGE_PATH_USER_DEFINED
-#undef SITELISPDIR_USER_DEFINED
-#undef ARCHLIBDIR_USER_DEFINED
-#undef ETCDIR_USER_DEFINED
-#undef INFODIR_USER_DEFINED
-#undef INFOPATH_USER_DEFINED
-
-#undef PDUMP
-
-#endif /* WIN32_NO_CONFIGURE */
-
 /* For the moment, we go ahead and keep this, since it's used in mouse.el.
    #### font-lock does its own version using parse-partial-sexp.  We should
    merge the two. */