Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / afsweb / apache_includes / 1.3.1 / ap_config.h
CommitLineData
805e021f
CE
1/* ====================================================================
2 * Copyright (c) 1995-1998 The Apache Group. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. All advertising materials mentioning features or use of this
17 * software must display the following acknowledgment:
18 * "This product includes software developed by the Apache Group
19 * for use in the Apache HTTP server project (http://www.apache.org/)."
20 *
21 * 4. The names "Apache Server" and "Apache Group" must not be used to
22 * endorse or promote products derived from this software without
23 * prior written permission. For written permission, please contact
24 * apache@apache.org.
25 *
26 * 5. Products derived from this software may not be called "Apache"
27 * nor may "Apache" appear in their names without prior written
28 * permission of the Apache Group.
29 *
30 * 6. Redistributions of any form whatsoever must retain the following
31 * acknowledgment:
32 * "This product includes software developed by the Apache Group
33 * for use in the Apache HTTP server project (http://www.apache.org/)."
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46 * OF THE POSSIBILITY OF SUCH DAMAGE.
47 * ====================================================================
48 *
49 * This software consists of voluntary contributions made by many
50 * individuals on behalf of the Apache Group and was originally based
51 * on public domain software written at the National Center for
52 * Supercomputing Applications, University of Illinois, Urbana-Champaign.
53 * For more information on the Apache Group and the Apache HTTP server
54 * project, please see <http://www.apache.org/>.
55 *
56 */
57
58#ifndef AP_CONFIG_H
59#define AP_CONFIG_H
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
65/*
66 * ap_config.h: system-dependant #defines and includes...
67 * See PORTING for a listing of what they mean
68 */
69
70/*
71 * Support for platform dependent autogenerated defines
72 */
73#ifndef WIN32
74#include "ap_config_auto.h"
75#else
76/* not available under WIN32, so provide important entries manually */
77#undef HAVE_UNISTD_H
78#endif
79
80/* Have to include sys/stat.h before ../os/win32/os.h so we can override
81stat() properly */
82#include <sys/types.h>
83#include <sys/stat.h>
84
85#ifdef WIN32
86/* include process.h first so we can override spawn[lv]e* properly */
87#include <process.h>
88#include "os/win32/os.h"
89#else
90#include "os.h"
91#endif
92
93#if !defined(QNX) && !defined(MPE) && !defined(WIN32)
94#include <sys/param.h>
95#endif
96
97/* Define one of these according to your system. */
98#if defined(MINT)
99 typedef int rlim_t;
100#define JMP_BUF sigjmp_buf
101#define NO_LONG_DOUBLE
102#define USE_FLOCK_SERIALIZED_ACCEPT
103#define _BSD_SOURCE
104#define EAGAIN EWOULDBLOCK
105 int initgroups(char *, int);
106 char *crypt(const char *pw, const char *salt);
107 int gethostname(char *name, int namelen);
108
109#elif defined(MPE)
110#include <sys/times.h>
111#define NO_SETSID
112#define NO_KILLPG
113#define NO_WRITEV
114#define HAVE_SHMGET 1
115#define USE_SHMGET_SCOREBOARD
116#define SHM_R 0400 /* Read permission */
117#define SHM_W 0200 /* Write permission */
118#define NEED_INITGROUPS
119#define NEED_STRCASECMP
120#define NEED_STRDUP
121#define NEED_STRNCASECMP
122 extern void GETPRIVMODE();
123 extern void GETUSERMODE();
124 extern char *inet_ntoa();
125#define NO_SLACK
126#define NO_GETTIMEOFDAY
127#define S_IEXEC S_IXUSR
128#define S_IREAD S_IRUSR
129#define S_IWRITE S_IWUSR
130#define PF_INET AF_INET
131
132#elif defined(SUNOS4)
133#define HAVE_GMTOFF 1
134#undef NO_KILLPG
135#undef NO_SETSID
136 char *crypt(const char *pw, const char *salt);
137 char *mktemp(char *template);
138#define HAVE_MMAP 1
139#define USE_MMAP_SCOREBOARD
140#define USE_MMAP_FILES
141#include <sys/time.h>
142#define NEED_STRERROR
143 typedef int rlim_t;
144#ifndef HAVE_MEMMOVE
145#define memmove(a,b,c) memcpy(a, b, c)
146#endif
147#define NO_LINGCLOSE
148#define USE_FLOCK_SERIALIZED_ACCEPT
149#define NEED_DIFFTIME
150#define HAVE_SYSLOG 1
151
152#elif defined(SOLARIS2)
153#undef HAVE_GMTOFF
154#define NO_KILLPG
155#undef NO_SETSID
156#if !defined(USE_SYSVSEM_SERIALIZED_ACCEPT) && \
157 !defined(USE_PTHREAD_SERIALIZED_ACCEPT)
158#define USE_FCNTL_SERIALIZED_ACCEPT
159#endif
160#define NEED_UNION_SEMUN
161#define HAVE_MMAP 1
162#define USE_MMAP_SCOREBOARD
163#define USE_MMAP_FILES
164
165/* AFS Websecure tweak to compile on Linux */
166#if ! defined(AIX) && ! defined(HAVE_UNISTD_H)
167 int gethostname(char *name, int namelen);
168#endif /* ! defined(AIX) && ! defined(HAVE_UNISTD_H) */
169
170#define HAVE_SYSLOG 1
171#define SYS_SIGLIST _sys_siglist
172
173#elif defined(IRIX)
174#undef HAVE_GMTOFF
175/* IRIX has killpg, but it's only in _BSD_COMPAT, so don't use it in case
176 * there's some weird conflict with non-BSD signals */
177#define NO_KILLPG
178#undef NO_SETSID
179#if !defined(USE_FCNTL_SERIALIZED_ACCEPT) && !defined(USE_USLOCK_SERIALIZED_ACCEPT)
180#define USE_SYSVSEM_SERIALIZED_ACCEPT
181#endif
182#define HAVE_SHMGET 1
183#define USE_SHMGET_SCOREBOARD
184#define HAVE_MMAP 1
185#define USE_MMAP_FILES
186#define NO_LONG_DOUBLE
187#define NO_LINGCLOSE
188#define HAVE_SYSLOG 1
189
190#elif defined(HIUX)
191#undef HAVE_GMTOFF
192#define NO_KILLPG
193#undef NO_SETSID
194#ifndef _HIUX_SOURCE
195#define _HIUX_SOURCE
196#endif
197#define HAVE_SHMGET 1
198#define USE_SHMGET_SCOREBOARD
199#define SELECT_NEEDS_CAST
200#define HAVE_SYSLOG 1
201
202#elif defined(HPUX) || defined(HPUX10)
203#undef HAVE_GMTOFF
204#define NO_KILLPG
205#undef NO_SETSID
206#define USE_FCNTL_SERIALIZED_ACCEPT
207#ifndef _HPUX_SOURCE
208#define _HPUX_SOURCE
209#endif
210#define HAVE_SHMGET 1
211#define USE_SHMGET_SCOREBOARD
212#define HAVE_SYSLOG 1
213#ifndef HPUX10
214#define SELECT_NEEDS_CAST
215 typedef int rlim_t;
216#endif
217
218#elif defined(HPUX11)
219#ifndef _HPUX_SOURCE
220#define _HPUX_SOURCE
221#endif
222#define HAVE_SHMGET
223#define USE_SHMGET_SCOREBOARD
224#undef HAVE_GMTOFF
225#define USE_FCNTL_SERIALIZED_ACCEPT
226/* feeling brave? want to try using POSIX mutexes? */
227/* #define HAVE_MMAP */
228/* #define USE_MMAP_SCOREBOARD */
229/* #define USE_MMAP_FILES */
230/* #define USE_PTHREAD_SERIALIZED_ACCEPT */
231#define NO_KILLPG
232#undef NO_SETSID
233#define HAVE_SYSLOG
234
235#elif defined(AIX)
236#undef HAVE_GMTOFF
237#undef NO_KILLPG
238#undef NO_SETSID
239#ifndef __ps2__
240#define HAVE_MMAP 1
241#define USE_MMAP_SCOREBOARD
242#define USE_MMAP_FILES
243#define HAVE_SYSLOG 1
244#ifndef DEFAULT_GROUP
245#define DEFAULT_GROUP "nobody"
246#endif
247#endif
248#ifndef DEFAULT_USER
249#define DEFAULT_USER "nobody"
250#endif
251#ifdef NEED_RLIM_T
252 typedef int rlim_t;
253#endif
254#define USE_FCNTL_SERIALIZED_ACCEPT
255#ifdef USEBCOPY
256#define memmove(a,b,c) memcpy(a, b, c)
257#endif
258#if AIX >= 42
259#define NET_SIZE_T size_t
260#endif
261
262#elif defined(ULTRIX)
263#define HAVE_GMTOFF 1
264#undef NO_KILLPG
265#undef NO_SETSID
266#define ULTRIX_BRAIN_DEATH
267#define NEED_STRDUP
268/* If you have Ultrix 4.3, and are using cc, const is broken */
269#ifndef __ultrix__ /* Hack to check for pre-Ultrix 4.4 cc */
270#define const /* Not implemented */
271#endif
272
273#elif defined(OSF1)
274#define HAVE_GMTOFF 1
275#undef NO_KILLPG
276#undef NO_SETSID
277#define HAVE_MMAP 1
278#define USE_MMAP_SCOREBOARD
279#define USE_MMAP_FILES
280#define NO_LONG_DOUBLE
281#define HAVE_SYSLOG 1
282#define USE_FLOCK_SERIALIZED_ACCEPT
283#define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
284
285#elif defined(PARAGON)
286#define HAVE_GMTOFF 1
287#undef NO_KILLPG
288#undef NO_SETSID
289#define HAVE_MMAP 1
290#define USE_MMAP_SCOREBOARD
291#define USE_MMAP_FILES
292#define NO_LONG_DOUBLE
293#define HAVE_SYSLOG 1
294 typedef int rlim_t;
295
296#elif defined(SEQUENT)
297#define HAVE_GMTOFF 1
298#undef NO_KILLPG
299#define NO_SETSID
300#define NEED_STRDUP
301#define HAVE_SYSLOG 1
302
303#elif defined(NEXT)
304 typedef unsigned short mode_t;
305#define HAVE_GMTOFF 1
306#undef NO_KILLPG
307#define NO_SETSID
308#define NEED_STRDUP
309#define NO_LINGCLOSE
310#undef _POSIX_SOURCE
311#ifndef FD_CLOEXEC
312#define FD_CLOEXEC 1
313#endif
314#ifndef S_ISDIR
315#define S_ISDIR(m) (((m)&(S_IFMT)) == (S_IFDIR))
316#endif
317#ifndef S_ISREG
318#define S_ISREG(m) (((m)&(S_IFMT)) == (S_IFREG))
319#endif
320#ifndef S_IXUSR
321#define S_IXUSR 00100
322#endif
323#ifndef S_IRGRP
324#define S_IRGRP 00040
325#endif
326#ifndef S_IXGRP
327#define S_IXGRP 00010
328#endif
329#ifndef S_IROTH
330#define S_IROTH 00004
331#endif
332#ifndef S_IXOTH
333#define S_IXOTH 00001
334#endif
335#ifndef S_IRUSR
336#define S_IRUSR S_IREAD
337#endif
338#ifndef S_IWUSR
339#define S_IWUSR S_IWRITE
340#endif
341#ifndef S_IWGRP
342#define S_IWGRP 000020
343#endif
344#ifndef S_IWOTH
345#define S_IWOTH 000002
346#ifndef rlim_t
347 typedef int rlim_t;
348#endif
349 typedef u_long n_long;
350#endif
351
352#define STDIN_FILENO 0
353#define STDOUT_FILENO 1
354#define STDERR_FILENO 2
355
356/* PR#2293 fix */
357#define ap_wait_t union wait
358#define waitpid(a,b,c) wait4((a) == -1 ? 0 : (a),(union wait *)(b),c,NULL)
359#define WEXITSTATUS(status) (int)( WIFEXITED(status) ? ( (status).w_retcode ) : -1)
360#define WTERMSIG(status) (int)( (status).w_termsig )
361
362 typedef int pid_t;
363#define USE_LONGJMP
364#define NO_USE_SIGACTION
365#define HAVE_SYSLOG 1
366
367#elif defined(LINUX)
368
369#if LINUX > 1
370#include <features.h>
371
372/* libc4 systems probably still work, it probably doesn't define
373 * __GNU_LIBRARY__
374 * libc5 systems define __GNU_LIBRARY__ == 1, but don't define __GLIBC__
375 * glibc 2.x and later systems define __GNU_LIBRARY__ == 6, but list it as
376 * "deprecated in favour of __GLIBC__"; the value 6 will never be changed.
377 * glibc 1.x systems (i.e. redhat 4.x on sparc/alpha) should have
378 * __GLIBC__ < 2
379 * all glibc based systems need crypt.h
380 */
381#if defined(__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
382#include <crypt.h>
383#endif
384
385/* glibc 2.0.0 through 2.0.4 need size_t * here, where 2.0.5 needs socklen_t *
386 * there's no way to discern between these two libraries. But using int should
387 * be portable because otherwise these libs would be hopelessly broken with
388 * reams of existing networking code. We'll use socklen_t * for 2.1.x and
389 * later.
390 *
391 * int works for all the earlier libs, and is picked up by default later.
392 */
393#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 0))
394#define NET_SIZE_T socklen_t
395#endif
396
397#define HAVE_SHMGET 1
398#define USE_SHMGET_SCOREBOARD
399#define HAVE_MMAP 1
400#define USE_MMAP_FILES
401
402/* glibc 2.1 and later finally define rlim_t */
403#if !defined(__GLIBC__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1)
404 typedef int rlim_t;
405#endif
406
407/* flock is faster ... but hasn't been tested on 1.x systems */
408#define USE_FLOCK_SERIALIZED_ACCEPT
409
410#define SYS_SIGLIST _sys_siglist
411
412#else
413#define USE_FCNTL_SERIALIZED_ACCEPT
414#endif
415
416#undef HAVE_GMTOFF
417#undef NO_KILLPG
418#undef NO_SETSID
419#undef NEED_STRDUP
420#include <sys/time.h>
421#define HAVE_SYSLOG 1
422
423#elif defined(SCO)
424#undef HAVE_GMTOFF
425#undef NO_KILLPG
426#undef NO_SETSID
427#define NEED_INITGROUPS
428#define NO_WRITEV
429#include <sys/time.h>
430#define HAVE_SYSLOG 1
431
432#elif defined(SCO5)
433
434#define USE_FCNTL_SERIALIZED_ACCEPT
435#define HAVE_MMAP 1
436#define USE_MMAP_SCOREBOARD
437#define USE_MMAP_FILES
438#define SecureWare
439#define HAVE_SYSLOG 1
440
441/* Although SCO 5 defines these in <strings.h> (note the "s") they don't have
442 consts. Sigh. */
443 extern int strcasecmp(const char *, const char *);
444 extern int strncasecmp(const char *, const char *, unsigned);
445
446#elif defined(AUX3)
447/* These are to let -Wall compile more cleanly */
448 extern int strcasecmp(const char *, const char *);
449 extern int strncasecmp(const char *, const char *, unsigned);
450 extern int set42sig(), getopt(), getpeername();
451 extern int listen(), bind(), socket(), getsockname();
452 extern int accept(), gethostname(), connect(), lstat();
453 extern int select(), killpg(), shutdown();
454 extern int initgroups(), setsockopt();
455 extern char *shmat();
456 extern int shmctl();
457 extern int shmget();
458 extern char *sbrk();
459 extern char *crypt();
460#include <sys/time.h>
461#undef HAVE_GMTOFF
462#undef NO_KILLPG
463#undef NO_SETSID
464#define NEED_STRDUP
465/* fcntl() locking is expensive with NFS */
466#define USE_FLOCK_SERIALIZED_ACCEPT
467#define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
468#define HAVE_SHMGET 1
469#define USE_SHMGET_SCOREBOARD
470/*
471 * NOTE: If when you run Apache under A/UX and you get a warning
472 * that httpd couldn't move break, then the below value for
473 * MOVEBREAK (64megs) is too large for your setup. Try reducing
474 * to 0x2000000 which is still PLENTY of space. I doubt if
475 * even on heavy systems sbrk() would be called at all...
476 */
477#define MOVEBREAK 0x4000000
478#define NO_LINGCLOSE
479#define NO_SLACK
480#define HAVE_SYSLOG 1
481#undef HAVE_SYS_RESOURCE_H /* exists but does not provide *rlimit funcs */
482
483#elif defined(SVR4)
484#define NO_KILLPG
485#undef NO_SETSID
486#undef NEED_STRDUP
487#ifndef MPRAS
488#define NEED_STRCASECMP
489#ifndef ENCORE
490#define NEED_STRNCASECMP
491#endif /* ENCORE */
492#endif /* MPRAS */
493/* A lot of SVR4 systems need this */
494#ifndef USE_SYSVSEM_SERIALIZED_ACCEPT
495#define USE_FCNTL_SERIALIZED_ACCEPT
496#endif
497#define HAVE_SYSLOG 1
498#define NET_SIZE_T size_t
499#define HAVE_SHMGET 1
500#define USE_SHMGET_SCOREBOARD
501#ifdef _OSD_POSIX /* BS2000-POSIX mainframe needs initgroups */
502#define NEED_INITGROUPS
503#define NEED_HASHBANG_EMUL /* execve() doesn't start shell scripts by default */
504#undef HAVE_SHMGET
505#undef USE_SHMGET_SCOREBOARD
506#undef bzero
507#endif /*_OSD_POSIX*/
508
509#elif defined(UW)
510#define NO_LINGCLOSE
511#define NO_KILLPG
512#undef NO_SETSID
513#undef NEED_STRDUP
514#define NEED_STRCASECMP
515#define NEED_STRNCASECMP
516#define HAVE_MMAP 1
517#define USE_MMAP_SCOREBOARD
518#define USE_MMAP_FILES
519#define HAVE_SHMGET 1
520#undef USE_SHMGET_SCOREBOARD /* force use of mmap() scoreboard */
521#include <sys/time.h>
522#if UW >= 200
523#define _POSIX_SOURCE
524#endif
525#define NET_SIZE_T size_t
526#define HAVE_SYSLOG 1
527#define USE_FCNTL_SERIALIZED_ACCEPT
528
529#elif defined(DGUX)
530#define NO_KILLPG
531#undef NO_SETSID
532#undef NEED_STRDUP
533#define NEED_STRCASECMP
534#define NEED_STRNCASECMP
535/* A lot of SVR4 systems need this */
536#define USE_FCNTL_SERIALIZED_ACCEPT
537#define ap_inet_addr inet_network
538#define HAVE_SYSLOG 1
539
540#elif defined(__NetBSD__) || defined(__OpenBSD__) || defined(NETBSD)
541#define HAVE_GMTOFF 1
542#undef NO_KILLPG
543#undef NO_SETSID
544#define HAVE_SYSLOG 1
545#ifndef DEFAULT_USER
546#define DEFAULT_USER "nobody"
547#endif
548#ifndef DEFAULT_GROUP
549#define DEFAULT_GROUP "nogroup"
550#define HAVE_SHMGET 1
551#define HAVE_MMAP 1
552#define USE_MMAP_SCOREBOARD
553#define USE_MMAP_FILES
554#endif
555
556#elif defined(UTS21)
557#undef HAVE_GMTOFF
558#undef NO_KILLPG
559#define NO_SETSID
560#define NEED_WAITPID
561#define STDIN_FILENO 0
562#define STDOUT_FILENO 1
563#define STDERR_FILENO 2
564#define HAVE_SYSLOG 1
565#define USE_LONGJMP
566#define JMP_BUF jmp_buf
567#define NO_USE_SIGACTION
568#define NEED_STRERROR
569#define NEED_STRSTR
570#define NEED_HASHBANG_EMUL
571#define NDELAY_PIPE_RETURNS_ZERO
572#define NO_DATA NO_ADDRESS
573#define ap_wait_t union wait
574#define WEXITSTATUS(status) (int)((status).w_retcode)
575#define WTERMSIG(status) (int)((status).w_termsig)
576#define strftime(buf,bufsize,fmt,tm) ascftime(buf,fmt,tm)
577#include <sys/types.h>
578#include <sys/time.h>
579
580#elif defined(APOLLO)
581#undef HAVE_GMTOFF
582#undef NO_KILLPG
583#undef NO_SETSID
584#define HAVE_SYSLOG 1
585
586#elif defined(__FreeBSD__) || defined(__bsdi__)
587#if defined(__FreeBSD__)
588#include <osreldate.h>
589#endif
590#define HAVE_GMTOFF 1
591#undef NO_KILLPG
592#undef NO_SETSID
593#define HAVE_MMAP 1
594#define USE_MMAP_SCOREBOARD
595#define USE_MMAP_FILES
596#ifndef DEFAULT_USER
597#define DEFAULT_USER "nobody"
598#endif
599#ifndef DEFAULT_GROUP
600#define DEFAULT_GROUP "nogroup"
601#endif
602#if defined(__bsdi__) || \
603(defined(__FreeBSD_version) && (__FreeBSD_version < 220000))
604 typedef quad_t rlim_t;
605#endif
606#define USE_FLOCK_SERIALIZED_ACCEPT
607#define HAVE_SYSLOG 1
608#define SYS_SIGLIST sys_siglist
609
610#elif defined(QNX)
611#ifndef crypt
612 char *crypt(const char *pw, const char *salt);
613#endif
614#ifndef initgroups
615 int initgroups(char *, int);
616#endif
617#ifndef strncasecmp
618#define strncasecmp strnicmp
619#endif
620#undef NO_KILLPG
621#undef NO_SETSID
622#define NEED_INITGROUPS
623#define NEED_SELECT_H
624#define NEED_PROCESS_H
625#include <unix.h>
626#define HAVE_MMAP 1
627#define USE_POSIX_SCOREBOARD
628#define USE_FLOCK_SERIALIZED_ACCEPT
629#define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
630#define HAVE_SYSLOG 1
631
632#elif defined(LYNXOS)
633#undef HAVE_GMTOFF
634#undef USE_MMAP_SCOREBOARD
635#undef USE_SHMGET_SCOREBOARD
636#undef USE_FCNTL_SERIALIZED_ACCEPT
637#undef USE_FLOCK_SERIALIZED_ACCEPT
638#define USE_LONGJMP
639#undef NO_KILLPG
640#undef NO_SETSID
641#undef NO_USE_SIGACTION
642#undef NO_LINGCLOSE
643 extern char *crypt(char *pw, char *salt);
644 typedef int rlim_t;
645#define HAVE_SYSLOG 1
646
647#elif defined(UXPDS)
648#undef NEED_STRCASECMP
649#undef NEED_STRNCASECMP
650#undef NEED_STRDUP
651#undef HAVE_GMTOFF
652#define NO_KILLPG
653#undef NO_SETSID
654#define USE_FCNTL_SERIALIZED_ACCEPT
655#define HAVE_MMAP 1
656#define USE_MMAP_SCOREBOARD
657#define USE_MMAP_FILES
658#define HAVE_SYSLOG 1
659
660#elif defined(__EMX__)
661/* Defines required for EMX OS/2 port. */
662#define NO_KILLPG
663#define NEED_STRCASECMP
664#define NEED_STRNCASECMP
665#define NO_SETSID
666#define NO_TIMES
667/* ap_config_auto.h gets this wrong, force sys/select.h to be included */
668#define HAVE_SYS_SELECT_H
669#define CASE_BLIND_FILESYSTEM
670/* Add some drive name support */
671#define chdir _chdir2
672#include <sys/time.h>
673#define MAXSOCKETS 4096
674#define USE_OS2_SCOREBOARD
675#define NO_RELIABLE_PIPED_LOGS
676
677#elif defined(__MACHTEN__)
678 typedef int rlim_t;
679#undef NO_KILLPG
680#define NO_SETSID
681#define HAVE_GMTOFF 1
682#ifndef __MACHTEN_PPC__
683#ifndef __MACHTEN_68K__
684#define __MACHTEN_68K__
685#endif
686#define USE_FLOCK_SERIALIZED_ACCEPT
687#define NO_USE_SIGACTION
688#define JMP_BUF sigjmp_buf
689#define USE_LONGJMP
690#undef NEED_STRDUP
691#else
692#define HAVE_SHMGET 1
693#define USE_SHMGET_SCOREBOARD
694#define USE_FCNTL_SERIALIZED_ACCEPT
695#endif
696
697/* Convex OS v11 */
698#elif defined(CONVEXOS11)
699#undef HAVE_GMTOFF
700#undef NO_KILLPG
701#undef NO_SETSID
702#undef NEED_STRDUP
703#define HAVE_MMAP 1
704#define USE_MMAP_SCOREBOARD
705#define USE_MMAP_FILES
706#define HAVE_SYSLOG 1
707
708#define NO_TIMEZONE
709#include <stdio.h>
710#include <sys/types.h>
711 typedef int rlim_t;
712
713#elif defined(ISC)
714#include <net/errno.h>
715#define NO_KILLPG
716#undef NO_SETSID
717#define HAVE_SHMGET 1
718#define USE_SHMGET_SCOREBOARD
719#define USE_FCNTL_SERIALIZED_ACCEPT
720#define HAVE_SYSLOG 1
721
722#elif defined(NEWSOS)
723#define HAVE_SHMGET 1
724#define USE_SHMGET_SCOREBOARD
725#define USE_LONGJMP
726#define NO_SETSID
727#define NO_USE_SIGACTION
728#define NEED_WAITPID
729#define NO_OTHER_CHILD
730#define HAVE_SYSLOG 1
731#include <sys/time.h>
732#include <stdlib.h>
733#include <sys/types.h>
734 typedef int pid_t;
735 typedef int rlim_t;
736 typedef int mode_t;
737
738#elif defined(RISCIX)
739#include <sys/time.h>
740 typedef int rlim_t;
741#define NO_USE_SIGACTION
742#define USE_LONGJMP
743#define NEED_STRCASECMP
744#define NEED_STRNCASECMP
745#define NEED_STRDUP
746
747#elif defined(BEOS)
748#include <stddef.h>
749
750#define NO_WRITEV
751#define NO_KILLPG
752#define NEED_INITGROUPS
753
754#elif defined(WIN32)
755
756/* All windows stuff is now in os/win32/os.h */
757
758#else
759/* Unknown system - Edit these to match */
760#ifdef BSD
761#define HAVE_GMTOFF 1
762#else
763#undef HAVE_GMTOFF
764#endif
765/* NO_KILLPG is set on systems that don't have killpg */
766#undef NO_KILLPG
767/* NO_SETSID is set on systems that don't have setsid */
768#undef NO_SETSID
769/* NEED_STRDUP is set on stupid systems that don't have strdup. */
770#undef NEED_STRDUP
771#endif
772
773/* stuff marked API_EXPORT is part of the API, and intended for use
774 * by modules
775 */
776#ifndef API_EXPORT
777#define API_EXPORT(type) type
778#endif
779
780/* Stuff marked API_EXPORT_NONSTD is part of the API, and intended for
781 * use by modules. The difference between API_EXPORT and
782 * API_EXPORT_NONSTD is that the latter is required for any functions
783 * which use varargs or are used via indirect function call. This
784 * is to accomodate the two calling conventions in windows dlls.
785 */
786#ifndef API_EXPORT_NONSTD
787#define API_EXPORT_NONSTD(type) type
788#endif
789
790#ifndef MODULE_VAR_EXPORT
791#define MODULE_VAR_EXPORT
792#endif
793#ifndef API_VAR_EXPORT
794#define API_VAR_EXPORT
795#endif
796
797/* modules should not used functions marked CORE_EXPORT
798 * or CORE_EXPORT_NONSTD */
799#ifndef CORE_EXPORT
800#define CORE_EXPORT API_EXPORT
801#endif
802#ifndef CORE_EXPORT_NONSTD
803#define CORE_EXPORT_NONSTD API_EXPORT_NONSTD
804#endif
805
806/* So that we can use inline on some critical functions, and use
807 * GNUC attributes (such as to get -Wall warnings for printf-like
808 * functions). Only do this in gcc 2.7 or later ... it may work
809 * on earlier stuff, but why chance it.
810 *
811 * We've since discovered that the gcc shipped with NeXT systems
812 * as "cc" is completely broken. It claims to be __GNUC__ and so
813 * on, but it doesn't implement half of the things that __GNUC__
814 * means. In particular it's missing inline and the __attribute__
815 * stuff. So we hack around it. PR#1613. -djg
816 */
817#if !defined(__GNUC__) || __GNUC__ < 2 || __GNUC_MINOR__ < 7 || defined(NEXT)
818#define ap_inline
819#define __attribute__(__x)
820#define ENUM_BITFIELD(e,n,w) signed int n : w
821#else
822#define ap_inline __inline__
823#define USE_GNU_INLINE
824#define ENUM_BITFIELD(e,n,w) e n : w
825#endif
826
827/*
828 * The particular directory style your system supports. If you have dirent.h
829 * in /usr/include (POSIX) or /usr/include/sys (SYSV), #include
830 * that file and define DIR_TYPE to be dirent. Otherwise, if you have
831 * /usr/include/sys/dir.h, define DIR_TYPE to be direct and include that
832 * file. If you have neither, I'm confused.
833 */
834
835#include <sys/types.h>
836#include <stdarg.h>
837
838#if !defined(NEXT) && !defined(WIN32)
839#include <dirent.h>
840#define DIR_TYPE dirent
841#elif !defined(WIN32)
842#include <sys/dir.h>
843#define DIR_TYPE direct
844#else
845#define DIR_TYPE dirent
846#endif
847
848#include <stdio.h>
849#include <stdlib.h>
850#include <string.h>
851#include "ap_ctype.h"
852#if !defined(MPE) && !defined(WIN32)
853#include <sys/file.h>
854#endif
855#ifndef WIN32
856#include <sys/socket.h>
857#ifdef HAVE_SYS_SELECT_H
858#include <sys/select.h>
859#endif /* HAVE_SYS_SELECT_H */
860#include <netinet/in.h>
861#include <netdb.h>
862#include <sys/ioctl.h>
863#if !defined(MPE) && !defined(BEOS)
864#include <arpa/inet.h> /* for inet_ntoa */
865#endif
866#include <sys/wait.h>
867#include <pwd.h>
868#include <grp.h>
869#include <fcntl.h>
870#include <limits.h>
871#define closesocket(s) close(s)
872#ifndef O_BINARY
873#define O_BINARY (0)
874#endif
875
876#else /* WIN32 */
877#include <winsock.h>
878#include <malloc.h>
879#include <io.h>
880#include <fcntl.h>
881#endif /* ndef WIN32 */
882
883#include <time.h> /* for ctime */
884#include <signal.h>
885#include <errno.h>
886#if !defined(QNX) && !defined(CONVEXOS11) && !defined(NEXT)
887#include <memory.h>
888#endif
889
890#ifdef NEED_PROCESS_H
891#include <process.h>
892#endif
893
894#ifdef WIN32
895#include "include/hsregex.h"
896#elif defined(USE_HSREGEX)
897#include "hsregex.h"
898#else
899#include <regex.h>
900#endif
901
902#ifdef HAVE_SYS_RESOURCE_H
903#include <sys/resource.h>
904#ifdef SUNOS4
905 int getrlimit(int, struct rlimit *);
906 int setrlimit(int, struct rlimit *);
907#endif
908#endif
909#ifdef USE_MMAP_SCOREBOARD
910#if !defined(__EMX__) && !defined(WIN32)
911/* This file is not needed for OS/2 */
912#include <sys/mman.h>
913#endif
914#endif
915#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS)
916#define MAP_ANON MAP_ANONYMOUS
917#endif
918
919#if defined(USE_MMAP_FILES) && (defined(NO_MMAP) || !defined(HAVE_MMAP))
920#undef USE_MMAP_FILES
921#endif
922
923#if defined(USE_MMAP_SCOREBOARD) && (defined(NO_MMAP) || !defined(HAVE_MMAP))
924#undef USE_MMAP_SCOREBOARD
925#endif
926
927#if defined(USE_SHMGET_SCOREBOARD) && (defined(NO_SHMGET) || !defined(HAVE_SHMGET))
928#undef USE_SHMGET_SCOREBOARD
929#endif
930
931#ifndef LOGNAME_MAX
932#define LOGNAME_MAX 25
933#endif
934
935#ifdef HAVE_UNISTD_H
936#include <unistd.h>
937#endif
938
939#ifdef ultrix
940#define ULTRIX_BRAIN_DEATH
941#endif
942
943#ifndef S_ISLNK
944#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
945#endif
946
947#ifndef INADDR_NONE
948#define INADDR_NONE ((unsigned long) -1)
949#endif
950
951/*
952 * Replace signal function with sigaction equivalent
953 */
954#ifndef NO_USE_SIGACTION
955 typedef void Sigfunc(int);
956
957#if defined(SIG_IGN) && !defined(SIG_ERR)
958#define SIG_ERR ((Sigfunc *)-1)
959#endif
960
961/*
962 * For some strange reason, QNX defines signal to signal. Eliminate it.
963 */
964#ifdef signal
965#undef signal
966#endif
967#define signal(s,f) ap_signal(s,f)
968 Sigfunc *signal(int signo, Sigfunc * func);
969#endif
970
971#include <setjmp.h>
972
973#if defined(USE_LONGJMP)
974#define ap_longjmp(x, y) longjmp((x), (y))
975#define ap_setjmp(x) setjmp(x)
976#ifndef JMP_BUF
977#define JMP_BUF jmp_buf
978#endif
979#else
980#define ap_longjmp(x, y) siglongjmp((x), (y))
981#define ap_setjmp(x) sigsetjmp((x), 1)
982#ifndef JMP_BUF
983#define JMP_BUF sigjmp_buf
984#endif
985#endif
986
987#ifdef SELECT_NEEDS_CAST
988#define ap_select(_a, _b, _c, _d, _e) \
989 select((_a), (int *)(_b), (int *)(_c), (int *)(_d), (_e))
990#else
991#define ap_select select
992#endif
993
994#ifdef ULTRIX_BRAIN_DEATH
995#define ap_fdopen(d,m) fdopen((d), (char *)(m))
996#else
997#define ap_fdopen(d,m) fdopen((d), (m))
998#endif
999
1000#ifndef ap_inet_addr
1001#define ap_inet_addr inet_addr
1002#endif
1003
1004#ifdef NO_OTHER_CHILD
1005#define NO_RELIABLE_PIPED_LOGS
1006#endif
1007
1008/* When the underlying OS doesn't support exec() of scripts which start
1009 * with a HASHBANG (#!) followed by interpreter name and args, define this.
1010 */
1011#ifdef NEED_HASHBANG_EMUL
1012 extern int ap_execle(const char *filename, const char *arg, ...);
1013 extern int ap_execve(const char *filename, const char *argv[],
1014 const char *envp[]);
1015/* ap_execle() is a wrapper function around ap_execve(). */
1016#define execle ap_execle
1017#define execve(path,argv,envp) ap_execve(path,argv,envp)
1018#endif
1019
1020/* Finding offsets of elements within structures.
1021 * Taken from the X code... they've sweated portability of this stuff
1022 * so we don't have to. Sigh...
1023 */
1024
1025#if defined(CRAY) || (defined(__arm) && !defined(LINUX))
1026#ifdef __STDC__
1027#define XtOffset(p_type,field) _Offsetof(p_type,field)
1028#else
1029#ifdef CRAY2
1030#define XtOffset(p_type,field) \
1031 (sizeof(int)*((unsigned int)&(((p_type)NULL)->field)))
1032
1033#else /* !CRAY2 */
1034
1035#define XtOffset(p_type,field) ((unsigned int)&(((p_type)NULL)->field))
1036
1037#endif /* !CRAY2 */
1038#endif /* __STDC__ */
1039#else /* ! (CRAY || __arm) */
1040
1041#define XtOffset(p_type,field) \
1042 ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))
1043
1044#endif /* !CRAY */
1045
1046#ifdef offsetof
1047#define XtOffsetOf(s_type,field) offsetof(s_type,field)
1048#else
1049#define XtOffsetOf(s_type,field) XtOffset(s_type*,field)
1050#endif
1051
1052/*
1053 * NET_SIZE_T exists because of shortsightedness on the POSIX committee. BSD
1054 * systems used "int *" as the parameter to accept(), getsockname(),
1055 * getpeername() et al. Consequently many unixes took an int * for that
1056 * parameter. The POSIX committee decided that "int" was just too generic and
1057 * had to be replaced with size_t almost everywhere. There's no problem with
1058 * that when you're passing by value. But when you're passing by reference
1059 * this creates a gross source incompatibility with existing programs. On
1060 * 32-bit architectures it creates only a warning. On 64-bit architectures it
1061 * creates broken code -- because "int *" is a pointer to a 64-bit quantity and
1062 * "size_t *" is frequently a pointer to a 32-bit quantity.
1063 *
1064 * Some Unixes adopted "size_t *" for the sake of POSIX compliance. Others
1065 * ignored it because it was such a broken interface. Chaos ensued. POSIX
1066 * finally woke up and decided that it was wrong and created a new type
1067 * socklen_t. The only useful value for socklen_t is int, and that's how
1068 * everyone who has a clue implements it. It is almost always the case that
1069 * NET_SIZE_T should be defined to be an int, unless the system being compiled
1070 * for was created in the window of POSIX madness.
1071 */
1072#ifndef NET_SIZE_T
1073#define NET_SIZE_T int
1074#endif
1075
1076/* Linux defines __WCOREDUMP, but doesn't define WCOREDUMP unless __USE_BSD
1077 * is in use... we'd prefer to just use WCOREDUMP everywhere.
1078 */
1079#if defined(__WCOREDUMP) && !defined(WCOREDUMP)
1080#define WCOREDUMP __WCOREDUMP
1081#endif
1082
1083#ifdef SUNOS_LIB_PROTOTYPES
1084/* Prototypes needed to get a clean compile with gcc -Wall.
1085 * Believe it or not, these do have to be declared, at least on SunOS,
1086 * because they aren't mentioned in the relevant system headers.
1087 * Sun Quality Software. Gotta love it. This section is not
1088 * currently (13Nov97) used.
1089 */
1090
1091 int getopt(int, char **, char *);
1092
1093 int strcasecmp(const char *, const char *);
1094 int strncasecmp(const char *, const char *, int);
1095 int toupper(int);
1096 int tolower(int);
1097
1098 int printf(char *, ...);
1099 int fprintf(FILE *, char *, ...);
1100 int fputs(char *, FILE *);
1101 int fread(char *, int, int, FILE *);
1102 int fwrite(char *, int, int, FILE *);
1103 int fgetc(FILE *);
1104 char *fgets(char *s, int, FILE *);
1105 int fflush(FILE *);
1106 int fclose(FILE *);
1107 int ungetc(int, FILE *);
1108 int _filbuf(FILE *); /* !!! */
1109 int _flsbuf(unsigned char, FILE *); /* !!! */
1110 int sscanf(char *, char *, ...);
1111 void setbuf(FILE *, char *);
1112 void perror(char *);
1113
1114 time_t time(time_t *);
1115 int strftime(char *, int, const char *, struct tm *);
1116
1117 int initgroups(char *, int);
1118 int wait3(int *, int, void *); /* Close enough for us... */
1119 int lstat(const char *, struct stat *);
1120 int stat(const char *, struct stat *);
1121 int flock(int, int);
1122#ifndef NO_KILLPG
1123 int killpg(int, int);
1124#endif
1125 int socket(int, int, int);
1126 int setsockopt(int, int, int, const char *, int);
1127 int listen(int, int);
1128 int bind(int, struct sockaddr *, int);
1129 int connect(int, struct sockaddr *, int);
1130 int accept(int, struct sockaddr *, int *);
1131 int shutdown(int, int);
1132
1133 int getsockname(int s, struct sockaddr *name, int *namelen);
1134 int getpeername(int s, struct sockaddr *name, int *namelen);
1135 int gethostname(char *name, int namelen);
1136 void syslog(int, char *, ...);
1137 char *mktemp(char *);
1138
1139 long vfprintf(FILE *, const char *, va_list);
1140
1141#endif /* SUNOS_LIB_PROTOTYPES */
1142
1143/* The assumption is that when the functions are missing,
1144 * then there's no matching prototype available either.
1145 * Declare what is needed exactly as the replacement routines implement it.
1146 */
1147#ifdef NEED_STRDUP
1148 extern char *strdup(const char *str);
1149#endif
1150#ifdef NEED_STRCASECMP
1151 extern int strcasecmp(const char *a, const char *b);
1152#endif
1153#ifdef NEED_STRNCASECMP
1154 extern int strncasecmp(const char *a, const char *b, int n);
1155#endif
1156#ifdef NEED_INITGROUPS
1157 extern int initgroups(const char *name, gid_t basegid);
1158#endif
1159#ifdef NEED_WAITPID
1160 extern int waitpid(pid_t pid, int *statusp, int options);
1161#endif
1162#ifdef NEED_STRERROR
1163 extern char *strerror(int err);
1164#endif
1165#ifdef NEED_DIFFTIME
1166 extern double difftime(time_t time1, time_t time0);
1167#endif
1168
1169#ifndef ap_wait_t
1170#define ap_wait_t int
1171#endif
1172
1173#ifdef __cplusplus
1174}
1175#endif
1176#endif /* !AP_CONFIG_H */