19Sjkh/* RCS compile-time configuration */
29Sjkh
350472Speter	/* $FreeBSD$ */
49Sjkh
59Sjkh/*
69Sjkh * This file is generated automatically.
79Sjkh * If you edit it by hand your changes may be lost.
89Sjkh * Instead, please try to fix conf.sh,
99Sjkh * and send your fixes to rcs-bugs@cs.purdue.edu.
109Sjkh */
119Sjkh
129Sjkh#define exitmain(n) return n /* how to exit from main() */
1311894Speter/* #define _POSIX_C_SOURCE 2147483647L */ /* if strict C + Posix 1003.1b-1993 or later */
1411894Speter/* #define _POSIX_SOURCE */ /* if strict C + Posix 1003.1-1990 */
159Sjkh
169Sjkh#include <errno.h>
179Sjkh#include <stdio.h>
189Sjkh#include <time.h>
199Sjkh
209Sjkh/* Comment out #include lines below that do not work.  */
219Sjkh#include <sys/types.h>
229Sjkh#include <sys/stat.h>
239Sjkh#include <dirent.h>
249Sjkh#include <fcntl.h>
259Sjkh#include <limits.h>
2611894Speter/* #include <mach/mach.h> */
2711894Speter/* #include <net/errno.h> */
289Sjkh#include <pwd.h>
2911894Speter/* #include <siginfo.h> */
309Sjkh#include <signal.h>
319Sjkh#include <stdlib.h>
329Sjkh#include <string.h>
339Sjkh#include <sys/mman.h>
349Sjkh#include <sys/wait.h>
3511894Speter/* #include <ucontext.h> */
369Sjkh#include <unistd.h>
379Sjkh#include <utime.h>
389Sjkh/* #include <vfork.h> */
399Sjkh
4011894Speter/* Define boolean symbols to be 0 (false, the default), or 1 (true).  */
419Sjkh#define has_sys_param_h 1 /* Does #include <sys/param.h> work?  */
4211894Speter/* extern int errno; */ /* Uncomment if <errno.h> doesn't declare errno.  */
439Sjkh#define has_readlink 1 /* Does readlink() work?  */
4411894Speter#define readlink_isreg_errno EINVAL /* errno after readlink on regular file */
459Sjkh
4611894Speter#if has_readlink && !defined(MAXSYMLINKS)
479Sjkh#	if has_sys_param_h
489Sjkh#		include <sys/param.h>
499Sjkh#	endif
509Sjkh#	ifndef MAXSYMLINKS
519Sjkh#		define MAXSYMLINKS 20 /* BSD; not standard yet */
529Sjkh#	endif
539Sjkh#endif
549Sjkh
559Sjkh/* Comment out the typedefs below if the types are already declared.  */
569Sjkh/* Fix any uncommented typedefs that are wrong.  */
579Sjkh/* typedef int mode_t; */
5811894Speter/* typedef long off_t; */
599Sjkh/* typedef int pid_t; */
601880Swollman/* typedef int sig_atomic_t; */
619Sjkh/* typedef unsigned size_t; */
629Sjkh/* typedef int ssize_t; */
639Sjkh/* typedef long time_t; */
649Sjkh/* typedef int uid_t; */
659Sjkh
6611894Speter/* Comment out the keyword definitions below if the keywords work.  */
6711894Speter/* #define const */
6811894Speter/* #define volatile */
6911894Speter
7011894Speter/* Define boolean symbols to be 0 (false, the default), or 1 (true).  */
719Sjkh#define has_prototypes 1 /* Do function prototypes work?  */
729Sjkh#define has_stdarg 1 /* Does <stdarg.h> work?  */
7311894Speter/* #define has_varargs ? */ /* Does <varargs.h> work?  */
749Sjkh#define va_start_args 2 /* How many args does va_start() take?  */
7511894Speter
7611894Speter#if O_BINARY
7711894Speter	/* Text and binary i/o behave differently.  */
7811894Speter	/* This is incompatible with Posix and Unix.  */
7911894Speter#	define FOPEN_RB "rb"
8011894Speter#	define FOPEN_R_WORK (Expand==BINARY_EXPAND ? "r" : "rb")
8111894Speter#	define FOPEN_WB "wb"
8211894Speter#	define FOPEN_W_WORK (Expand==BINARY_EXPAND ? "w" : "wb")
8311894Speter#	define FOPEN_WPLUS_WORK (Expand==BINARY_EXPAND ? "w+" : "w+b")
8411894Speter#	define OPEN_O_BINARY O_BINARY
8511894Speter#else
8611894Speter	/*
8711894Speter	* Text and binary i/o behave the same.
8811894Speter	* Omit "b", since some nonstandard hosts reject it.
8911894Speter	*/
9011894Speter#	define FOPEN_RB "r"
9111894Speter#	define FOPEN_R_WORK "r"
9211894Speter#	define FOPEN_WB "w"
9311894Speter#	define FOPEN_W_WORK "w"
9411894Speter#	define FOPEN_WPLUS_WORK "w+"
9511894Speter#	define OPEN_O_BINARY 0
9611894Speter#endif
9711894Speter
9811894Speter/* This may need changing on non-Unix systems (notably DOS).  */
9911894Speter#define OPEN_CREAT_READONLY (S_IRUSR|S_IRGRP|S_IROTH) /* lock file mode */
10011894Speter#define OPEN_O_LOCK 0 /* extra open flags for creating lock file */
10111894Speter#define OPEN_O_WRONLY O_WRONLY /* main open flag for creating a lock file */
10211894Speter
10311894Speter/* Define or comment out the following symbols as needed.  */
1049Sjkh#if has_prototypes
1059Sjkh#	define P(params) params
1069Sjkh#else
1079Sjkh#	define P(params) ()
1089Sjkh#endif
1099Sjkh#if has_stdarg
1109Sjkh#	include <stdarg.h>
1119Sjkh#else
1129Sjkh#	if has_varargs
1139Sjkh#		include <varargs.h>
1149Sjkh#	else
1159Sjkh		typedef char *va_list;
1169Sjkh#		define va_dcl int va_alist;
1179Sjkh#		define va_start(ap) ((ap) = (va_list)&va_alist)
1189Sjkh#		define va_arg(ap,t) (((t*) ((ap)+=sizeof(t)))  [-1])
1199Sjkh#		define va_end(ap)
1209Sjkh#	endif
1219Sjkh#endif
1229Sjkh#if va_start_args == 2
1239Sjkh#	define vararg_start va_start
1249Sjkh#else
1259Sjkh#	define vararg_start(ap,p) va_start(ap)
1269Sjkh#endif
12711894Speter#define bad_chmod_close 0 /* Can chmod() close file descriptors?  */
12811894Speter#define bad_creat0 0 /* Do writes fail after creat(f,0)?  */
12911894Speter#define bad_fopen_wplus 0 /* Does fopen(f,"w+") fail to truncate f?  */
13011894Speter#define getlogin_is_secure 0 /* Is getlogin() secure?  Usually it's not.  */
13111894Speter#define has_attribute_noreturn 1 /* Does __attribute__((noreturn)) work?  */
13211894Speter#if has_attribute_noreturn
13311894Speter#	define exiting __attribute__((noreturn))
1349Sjkh#else
13511894Speter#	define exiting
1369Sjkh#endif
1379Sjkh#define has_dirent 1 /* Do opendir(), readdir(), closedir() work?  */
13811894Speter#define void_closedir 0 /* Does closedir() yield void?  */
1391880Swollman#define has_fchmod 1 /* Does fchmod() work?  */
14011894Speter#define has_fflush_input 0 /* Does fflush() work on input files?  */
14111894Speter#define has_fputs 1 /* Does fputs() work?  */
1429Sjkh#define has_ftruncate 1 /* Does ftruncate() work?  */
1439Sjkh#define has_getuid 1 /* Does getuid() work?  */
1449Sjkh#define has_getpwuid 1 /* Does getpwuid() work?  */
1459Sjkh#define has_memcmp 1 /* Does memcmp() work?  */
1469Sjkh#define has_memcpy 1 /* Does memcpy() work?  */
1479Sjkh#define has_memmove 1 /* Does memmove() work?  */
14811894Speter#define has_map_fd 0 /* Does map_fd() work?  */
14911894Speter#define has_mmap 1 /* Does mmap() work on regular files?  */
1509Sjkh#define has_madvise 0 /* Does madvise() work?  */
15111894Speter#define mmap_signal SIGBUS /* signal received if you reference nonexistent part of mmapped file */
1529Sjkh#define has_rename 1 /* Does rename() work?  */
1539Sjkh#define bad_a_rename 0 /* Does rename(A,B) fail if A is unwritable?  */
1549Sjkh#define bad_b_rename 0 /* Does rename(A,B) fail if B is unwritable?  */
15511894Speter#define bad_NFS_rename 0 /* Can rename(A,B) falsely report success?  */
15611894Speter/* typedef int void; */ /* Some ancient compilers need this.  */
1579Sjkh#define VOID (void) /* 'VOID e;' discards the value of an expression 'e'.  */
15811894Speter#define has_seteuid 1 /* Does seteuid() work?  See ../INSTALL.RCS.  */
15911894Speter#define has_setreuid 0 /* Does setreuid() work?  See ../INSTALL.RCS.  */
1609Sjkh#define has_setuid 1 /* Does setuid() exist?  */
16111894Speter#define has_sigaction 1 /* Does struct sigaction work?  */
162121536Speter#define has_sa_sigaction 1 /* Does struct sigaction have sa_sigaction?  */
1639Sjkh#define has_signal 1 /* Does signal() work?  */
1649Sjkh#define signal_type void /* type returned by signal handlers */
1659Sjkh#define sig_zaps_handler 0 /* Must a signal handler reinvoke signal()?  */
1669Sjkh/* #define has_sigblock ? */ /* Does sigblock() work?  */
1679Sjkh/* #define sigmask(s) (1 << ((s)-1)) */ /* Yield mask for signal number.  */
1681880Swollmantypedef size_t fread_type; /* type returned by fread() and fwrite() */
1699Sjkhtypedef size_t freadarg_type; /* type of their size arguments */
1709Sjkhtypedef void *malloc_type; /* type returned by malloc() */
1719Sjkh#define has_getcwd 1 /* Does getcwd() work?  */
1729Sjkh/* #define has_getwd ? */ /* Does getwd() work?  */
17311894Speter#define needs_getabsname 0 /* Must we define getabsname?  */
1749Sjkh#define has_mktemp 1 /* Does mktemp() work?  */
17576512Skris#define has_mkstemp 1 /* Does mkstemp() work?  */
1769Sjkh#define has_NFS 1 /* Might NFS be used?  */
17711894Speter#define has_psiginfo 0 /* Does psiginfo() work?  */
17811894Speter#define has_psignal 1 /* Does psignal() work?  */
17911894Speter/* #define has_si_errno ? */ /* Does siginfo_t have si_errno?  */
18011894Speter/* #define has_sys_siglist ? */ /* Does sys_siglist[] work?  */
1819Sjkh/* #define strchr index */ /* Use old-fashioned name for strchr()?  */
1829Sjkh/* #define strrchr rindex */ /* Use old-fashioned name for strrchr()?  */
1839Sjkh#define bad_unlink 0 /* Does unlink() fail on unwritable files?  */
1841880Swollman#define has_vfork 1 /* Does vfork() work?  */
1859Sjkh#define has_fork 1 /* Does fork() work?  */
1869Sjkh#define has_spawn 0 /* Does spawn*() work?  */
1871880Swollman#define has_waitpid 1 /* Does waitpid() work?  */
18811894Speter#define bad_wait_if_SIGCHLD_ignored 0 /* Does ignoring SIGCHLD break wait()?  */
1899Sjkh#define RCS_SHELL "/bin/sh" /* shell to run RCS subprograms */
19011894Speter#define has_printf_dot 1 /* Does "%.2d" print leading 0?  */
1919Sjkh#define has_vfprintf 1 /* Does vfprintf() work?  */
19211894Speter#define has_attribute_format_printf 1 /* Does __attribute__((format(printf,N,N+1))) work?  */
19311894Speter#if has_attribute_format_printf
19411894Speter#	define printf_string(m, n) __attribute__((format(printf, m, n)))
19511894Speter#else
19611894Speter#	define printf_string(m, n)
19711894Speter#endif
19811894Speter#if has_attribute_format_printf && has_attribute_noreturn
19911894Speter	/* Work around a bug in GCC 2.5.x.  */
20011894Speter#	define printf_string_exiting(m, n) __attribute__((format(printf, m, n), noreturn))
20111894Speter#else
20211894Speter#	define printf_string_exiting(m, n) printf_string(m, n) exiting
20311894Speter#endif
2049Sjkh/* #define has__doprintf ? */ /* Does _doprintf() work?  */
2059Sjkh/* #define has__doprnt ? */ /* Does _doprnt() work?  */
2069Sjkh/* #undef EXIT_FAILURE */ /* Uncomment this if EXIT_FAILURE is broken.  */
2071880Swollman#define large_memory 1 /* Can main memory hold entire RCS files?  */
20811894Speter#ifndef LONG_MAX
20911894Speter#define LONG_MAX 2147483647L /* long maximum */
21011894Speter#endif
21111894Speter/* Do struct stat s and t describe the same file?  Answer d if unknown.  */
21211894Speter#define same_file(s,t,d) ((s).st_ino==(t).st_ino && (s).st_dev==(t).st_dev)
21311894Speter#define has_utimbuf 1 /* Does struct utimbuf work?  */
21411904Speter#define CO "/usr/bin/co" /* name of 'co' program */
2159Sjkh#define COMPAT2 0 /* Are version 2 files supported?  */
2169Sjkh#define DIFF "/usr/bin/diff" /* name of 'diff' program */
2179Sjkh#define DIFF3 "/usr/bin/diff3" /* name of 'diff3' program */
2189Sjkh#define DIFF3_BIN 1 /* Is diff3 user-visible (not the /usr/lib auxiliary)?  */
21911894Speter#define DIFFFLAGS "-an" /* Make diff output suitable for RCS.  */
22011894Speter#define DIFF_L 1 /* Does diff -L work?  */
2219Sjkh#define DIFF_SUCCESS 0 /* DIFF status if no differences are found */
2229Sjkh#define DIFF_FAILURE 1 /* DIFF status if differences are found */
2239Sjkh#define DIFF_TROUBLE 2 /* DIFF status if trouble */
2249Sjkh#define ED "/bin/ed" /* name of 'ed' program (used only if !DIFF3_BIN) */
22511904Speter#define MERGE "/usr/bin/merge" /* name of 'merge' program */
2269Sjkh#define TMPDIR "/tmp" /* default directory for temporary files */
22711894Speter#define SLASH '/' /* principal filename separator */
22811894Speter#define SLASHes '/' /* `case SLASHes:' labels all filename separators */
22911894Speter#define isSLASH(c) ((c) == SLASH) /* Is arg a filename separator?  */
2309Sjkh#define ROOTPATH(p) isSLASH((p)[0]) /* Is p an absolute pathname?  */
2319Sjkh#define X_DEFAULT ",v/" /* default value for -x option */
23211894Speter#define SLASHSLASH_is_SLASH 1 /* Are // and / the same directory?  */
23311894Speter#define ALL_ABSOLUTE 1 /* Do all subprograms satisfy ROOTPATH?  */
2349Sjkh#define DIFF_ABSOLUTE 1 /* Is ROOTPATH(DIFF) true?  */
23511894Speter#define SENDMAIL "/usr/sbin/sendmail" /* how to send mail */
2369Sjkh#define TZ_must_be_set 0 /* Must TZ be set for gmtime() to work?  */
2379Sjkh
2389Sjkh
2399Sjkh
2409Sjkh/* Adjust the following declarations as needed.  */
2419Sjkh
2429Sjkh
24311894Speter/* The rest is for the benefit of non-standard, traditional hosts.  */
24411894Speter/* Don't bother to declare functions that in traditional hosts do not appear, */
24511894Speter/* or are declared in .h files, or return int or void.  */
2469Sjkh
2479Sjkh
24811894Speter/* traditional BSD */
24911894Speter
25011894Speter#if has_sys_siglist && !defined(sys_siglist)
25111894Speter	extern char const * const sys_siglist[];
2529Sjkh#endif
2539Sjkh
2549Sjkh
2559Sjkh/* Posix (ISO/IEC 9945-1: 1990 / IEEE Std 1003.1-1990) */
2569Sjkh
2579Sjkh/* <fcntl.h> */
2589Sjkh#ifdef O_CREAT
2599Sjkh#	define open_can_creat 1
2609Sjkh#else
2619Sjkh#	define open_can_creat 0
2629Sjkh#	define O_RDONLY 0
2639Sjkh#	define O_WRONLY 1
2649Sjkh#	define O_RDWR 2
2659Sjkh#	define O_CREAT 01000
2669Sjkh#	define O_TRUNC 02000
2679Sjkh#endif
2689Sjkh#ifndef O_EXCL
26911894Speter#define O_EXCL 0
2709Sjkh#endif
2719Sjkh
2729Sjkh/* <sys/stat.h> */
2739Sjkh#ifndef S_IRUSR
2749Sjkh#	ifdef S_IREAD
2759Sjkh#		define S_IRUSR S_IREAD
2769Sjkh#	else
2779Sjkh#		define S_IRUSR 0400
2789Sjkh#	endif
2799Sjkh#	ifdef S_IWRITE
2809Sjkh#		define S_IWUSR S_IWRITE
2819Sjkh#	else
2829Sjkh#		define S_IWUSR (S_IRUSR/2)
2839Sjkh#	endif
2849Sjkh#endif
2859Sjkh#ifndef S_IRGRP
2869Sjkh#	if has_getuid
2879Sjkh#		define S_IRGRP (S_IRUSR / 0010)
2889Sjkh#		define S_IWGRP (S_IWUSR / 0010)
2899Sjkh#		define S_IROTH (S_IRUSR / 0100)
2909Sjkh#		define S_IWOTH (S_IWUSR / 0100)
2919Sjkh#	else
2929Sjkh		/* single user OS -- not Posix or Unix */
2939Sjkh#		define S_IRGRP 0
2949Sjkh#		define S_IWGRP 0
2959Sjkh#		define S_IROTH 0
2969Sjkh#		define S_IWOTH 0
2979Sjkh#	endif
2989Sjkh#endif
2999Sjkh#ifndef S_ISREG
30011894Speter#define S_ISREG(n) (((n) & S_IFMT) == S_IFREG)
3019Sjkh#endif
3029Sjkh
3039Sjkh/* <sys/wait.h> */
3049Sjkh#ifndef WEXITSTATUS
30511894Speter#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
30611894Speter#undef WIFEXITED /* Avoid 4.3BSD incompatibility with Posix.  */
3079Sjkh#endif
3089Sjkh#ifndef WIFEXITED
30911894Speter#define WIFEXITED(stat_val) (((stat_val)  &  0377) == 0)
3109Sjkh#endif
31111894Speter#ifndef WTERMSIG
31211894Speter#define WTERMSIG(stat_val) ((stat_val) & 0177)
31311894Speter#undef WIFSIGNALED /* Avoid 4.3BSD incompatibility with Posix.  */
31411894Speter#endif
31511894Speter#ifndef WIFSIGNALED
31611894Speter#define WIFSIGNALED(stat_val) ((unsigned)(stat_val) - 1  <  0377)
31711894Speter#endif
3189Sjkh
3199Sjkh/* <unistd.h> */
3209Sjkhchar *getlogin P((void));
3219Sjkh#ifndef STDIN_FILENO
3229Sjkh#	define STDIN_FILENO 0
3239Sjkh#	define STDOUT_FILENO 1
3249Sjkh#	define STDERR_FILENO 2
3259Sjkh#endif
32611894Speter#if has_fork && !has_vfork
32711894Speter#	undef vfork
32811894Speter#	define vfork fork
3299Sjkh#endif
3309Sjkh#if has_getcwd || !has_getwd
3319Sjkh	char *getcwd P((char*,size_t));
3329Sjkh#else
3339Sjkh	char *getwd P((char*));
3349Sjkh#endif
33511894Speter#if has_setuid && !has_seteuid
33611894Speter#	undef seteuid
33711894Speter#	define seteuid setuid
3389Sjkh#endif
3399Sjkh#if has_spawn
3409Sjkh#	if ALL_ABSOLUTE
3419Sjkh#		define spawn_RCS spawnv
3429Sjkh#	else
3439Sjkh#		define spawn_RCS spawnvp
3449Sjkh#	endif
3459Sjkh#else
3469Sjkh#	if ALL_ABSOLUTE
3479Sjkh#		define exec_RCS execv
3489Sjkh#	else
3499Sjkh#		define exec_RCS execvp
3509Sjkh#	endif
3519Sjkh#endif
3529Sjkh
3539Sjkh/* utime.h */
35411894Speter#if !has_utimbuf
35511894Speter	struct utimbuf { time_t actime, modtime; };
35611894Speter#endif
3579Sjkh
3589Sjkh
3599Sjkh/* Standard C library */
3609Sjkh
3619Sjkh/* <stdio.h> */
3629Sjkh#ifndef L_tmpnam
36311894Speter#define L_tmpnam 32 /* power of 2 > sizeof("/usr/tmp/xxxxxxxxxxxxxxx") */
3649Sjkh#endif
3659Sjkh#ifndef SEEK_SET
36611894Speter#define SEEK_SET 0
3679Sjkh#endif
36811894Speter#ifndef SEEK_CUR
36911894Speter#define SEEK_CUR 1
37011894Speter#endif
3719Sjkh#if has_mktemp
3729Sjkh	char *mktemp P((char*)); /* traditional */
3739Sjkh#else
3749Sjkh	char *tmpnam P((char*));
3759Sjkh#endif
3769Sjkh
3779Sjkh/* <stdlib.h> */
3789Sjkhchar *getenv P((char const*));
37911894Spetervoid _exit P((int)) exiting;
38011894Spetervoid exit P((int)) exiting;
3819Sjkhmalloc_type malloc P((size_t));
3829Sjkhmalloc_type realloc P((malloc_type,size_t));
3839Sjkh#ifndef EXIT_FAILURE
38411894Speter#define EXIT_FAILURE 1
3859Sjkh#endif
3869Sjkh#ifndef EXIT_SUCCESS
38711894Speter#define EXIT_SUCCESS 0
3889Sjkh#endif
3899Sjkh
3909Sjkh/* <string.h> */
3919Sjkhchar *strcpy P((char*,char const*));
3929Sjkhchar *strchr P((char const*,int));
3939Sjkhchar *strrchr P((char const*,int));
3949Sjkhvoid *memcpy P((void*,void const*,size_t));
3959Sjkh#if has_memmove
3969Sjkh	void *memmove P((void*,void const*,size_t));
3979Sjkh#endif
3989Sjkh
3999Sjkh/* <time.h> */
4009Sjkhtime_t time P((time_t*));
401