*** empty log message ***
[bpt/emacs.git] / src / s / freebsd.h
index 1a04cf0..057697d 100644 (file)
@@ -1,5 +1,17 @@
 /* s/ file for freebsd system.  */
 
+/* Get the correct __FreeBSD_version, even if this is before that was
+   defined. */
+#ifndef __FreeBSD_version 
+#ifndef __FreeBSD__
+#define __FreeBSD_version 199401
+#elif __FreeBSD__ == 1
+#define __FreeBSD_version 199405
+#else
+#include <osreldate.h>
+#endif
+#endif /* !defined __FreeBSD_version */
+
 /* '__FreeBSD__' is defined by the preprocessor on FreeBSD-1.1 and up.
    Earlier versions do not have shared libraries, so inhibit them.
    You can inhibit them on newer systems if you wish
@@ -33,8 +45,9 @@
 
 #define LIBS_DEBUG
 #define LIBS_SYSTEM -lutil
+#if __FreeBSD_version < 400000
 #define LIBS_TERMCAP -ltermcap
-#define LIB_GCC -lgcc
+#endif
 
 #define SYSV_SYSTEM_DIR
 
 #undef BSD_PGRPS
 #define GETPGRP_NO_ARG
 
+#ifdef __ELF__
+
+#define LD_SWITCH_SYSTEM_1
+#define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o
+#define UNEXEC unexelf.o
+#define LIB_STANDARD -lgcc -lc -lgcc /usr/lib/crtend.o /usr/lib/crtn.o
+#undef LIB_GCC
+#define LIB_GCC
+
+#else /* not __ELF__ */
+
 #ifndef NO_SHARED_LIBS
-#define LD_SWITCH_SYSTEM -e start -dc -dp
+#define LD_SWITCH_SYSTEM_1 -e start -dc -L/usr/local/lib
 #define HAVE_TEXT_START                /* No need to define `start_of_text'. */
+#if __FreeBSD_version >= 300002
+#define START_FILES pre-crt0.o /usr/lib/aout/crt0.o
+#else /* __FreeBSD_version < 300002 */
 #define START_FILES pre-crt0.o /usr/lib/crt0.o
+#endif /* __FreeBSD_version < 300002 */
 #define UNEXEC unexsunos4.o
 #define RUN_TIME_REMAP
+#define LIB_GCC -lgcc
 
 #ifndef N_TRELOFF
 #define N_PAGSIZ(x) __LDPGSZ
 #else /* NO_SHARED_LIBS */
 #ifdef __FreeBSD__  /* shared libs are available, but the user prefers
                      not to use them.  */
-#define LD_SWITCH_SYSTEM -Bstatic
+#define LD_SWITCH_SYSTEM_1 -Bstatic -L/usr/local/lib
 #define A_TEXT_OFFSET(x) (sizeof (struct exec))
 #define A_TEXT_SEEK(hdr) (N_TXTOFF(hdr) + A_TEXT_OFFSET(hdr))
 #endif /* __FreeBSD__ */
 #endif /* NO_SHARED_LIBS */
 
+#endif /* not __ELF__ */
+
+/* Let `ld' find image libs and similar things in /usr/local/lib.  The
+   system compiler, GCC, has apparently been modified to not look
+   there, contrary to what a stock GCC would do.  */
+
+#define LD_SWITCH_SYSTEM LD_SWITCH_SYSTEM_1 -L/usr/local/lib
+
 #define HAVE_WAIT_HEADER
-#define HAVE_GETLOADAVG
-/*#define HAVE_GETPAGESIZE  /* configure now puts this in config.h */
+#define HAVE_GETLOADAVG 1
+#if 0
+#define HAVE_GETPAGESIZE  /* configure now puts this in config.h */
+#endif
 #define HAVE_TERMIOS
 #define NO_TERMIO
 #define DECLARE_GETPWUID_WITH_UID_T
 #define BSD_SYSTEM 199103
 #elif __FreeBSD__ == 2
 #define BSD_SYSTEM 199306
-#elif __FreeBSD__ == 3
+#elif __FreeBSD__ >= 3
 #define BSD_SYSTEM 199506
 #endif
 
+#if 0  /* Shouldn't be necessary and produces warnings with the 
+          experimental Autoconf test.  */
 #define WAITTYPE int
 /* get this since it won't be included if WAITTYPE is defined */
 #ifdef emacs
 #include <sys/wait.h>
 #endif
 #define WRETCODE(w) (_W_INT(w) >> 8)
+#endif
 
 /* Needed to avoid hanging when child process writes an error message
    and exits -- enami tsugutomo <enami@ba2.so-net.or.jp>.  */
    remaining in /tmp or other directories with +t bit.
    To avoid this problem, you could #undef it to use no file lock. */
 /* #undef CLASH_DETECTION */
+
+/* If the system's imake configuration file defines `NeedWidePrototypes'
+   as `NO', we must define NARROWPROTO manually.  Such a define is
+   generated in the Makefile generated by `xmkmf'.  If we don't 
+   define NARROWPROTO, we will see the wrong function prototypes
+   for X functions taking float or double parameters.  */
+
+#define NARROWPROTO 1
+
+/* The following is needed to make `configure' find Xpm, Xaw3d and
+   image include and library files if using /usr/bin/gcc.  That
+   compiler seems to be modified to not find headers in
+   /usr/local/include or libs in /usr/local/lib by default.  */
+
+#define C_SWITCH_SYSTEM -I/usr/X11R6/include -I/usr/local/include -L/usr/local/lib
+
+/* Circumvent a bug in FreeBSD.  In the following sequence of
+   writes/reads on a PTY, read(2) returns bogus data:
+
+   write(2)  1022 bytes
+   write(2)   954 bytes, get EAGAIN
+   read(2)   1024 bytes in process_read_output
+   read(2)     11 bytes in process_read_output
+
+   That is, read(2) returns more bytes than have ever been written
+   successfully.  The 1033 bytes read are the 1022 bytes written
+   successfully after processing (for example with CRs added if the
+   terminal is set up that way which it is here).  The same bytes will
+   be seen again in a later read(2), without the CRs.  */
+
+#define BROKEN_PTY_READ_AFTER_EAGAIN 1
+
+/* Tell that garbage collector that setjmp is known to save all
+   registers relevant for conservative garbage collection in the
+   jmp_buf.  */
+
+#define GC_SETJMP_WORKS 1
+