apr.h.in revision 266735
1251875Speter/* Licensed to the Apache Software Foundation (ASF) under one or more
2251875Speter * contributor license agreements.  See the NOTICE file distributed with
3251875Speter * this work for additional information regarding copyright ownership.
4251875Speter * The ASF licenses this file to You under the Apache License, Version 2.0
5251875Speter * (the "License"); you may not use this file except in compliance with
6251875Speter * the License.  You may obtain a copy of the License at
7251875Speter *
8251875Speter *     http://www.apache.org/licenses/LICENSE-2.0
9251875Speter *
10251875Speter * Unless required by applicable law or agreed to in writing, software
11251875Speter * distributed under the License is distributed on an "AS IS" BASIS,
12251875Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13251875Speter * See the License for the specific language governing permissions and
14251875Speter * limitations under the License.
15251875Speter */
16251875Speter
17251875Speter
18251875Speter#ifndef APR_H
19251875Speter#define APR_H
20251875Speter
21251875Speter/* GENERATED FILE WARNING!  DO NOT EDIT apr.h
22251875Speter *
23251875Speter * You must modify apr.h.in instead.
24251875Speter *
25251875Speter * And please, make an effort to stub apr.hw and apr.hnw in the process.
26251875Speter */
27251875Speter
28251875Speter/**
29251875Speter * @file apr.h
30251875Speter * @brief APR Platform Definitions
31251875Speter * @remark This is a generated header generated from include/apr.h.in by
32251875Speter * ./configure, or copied from include/apr.hw or include/apr.hnw 
33251875Speter * for Win32 or Netware by those build environments, respectively.
34251875Speter */
35251875Speter
36251875Speter/**
37251875Speter * @defgroup APR Apache Portability Runtime library
38251875Speter * @{
39251875Speter */
40251875Speter/**
41251875Speter * @defgroup apr_platform Platform Definitions
42251875Speter * @{
43251875Speter * @warning
44251875Speter * <strong><em>The actual values of macros and typedefs on this page<br>
45251875Speter * are platform specific and should NOT be relied upon!</em></strong>
46251875Speter */
47251875Speter
48251875Speter/* So that we can use inline on some critical functions, and use
49251875Speter * GNUC attributes (such as to get -Wall warnings for printf-like
50251875Speter * functions).  Only do this in gcc 2.7 or later ... it may work
51251875Speter * on earlier stuff, but why chance it.
52251875Speter *
53251875Speter * We've since discovered that the gcc shipped with NeXT systems
54251875Speter * as "cc" is completely broken.  It claims to be __GNUC__ and so
55251875Speter * on, but it doesn't implement half of the things that __GNUC__
56251875Speter * means.  In particular it's missing inline and the __attribute__
57251875Speter * stuff.  So we hack around it.  PR#1613. -djg
58251875Speter */
59251875Speter#if !defined(__GNUC__) || __GNUC__ < 2 || \
60251875Speter    (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\
61251875Speter    defined(NEXT)
62251875Speter#ifndef __attribute__
63251875Speter#define __attribute__(__x)
64251875Speter#endif
65251875Speter#define APR_INLINE
66251875Speter#define APR_HAS_INLINE           0
67251875Speter#else
68251875Speter#define APR_INLINE __inline__
69251875Speter#define APR_HAS_INLINE           1
70251875Speter#endif
71251875Speter
72251875Speter#define APR_HAVE_ARPA_INET_H     @arpa_ineth@
73251875Speter#define APR_HAVE_CONIO_H         @conioh@
74251875Speter#define APR_HAVE_CRYPT_H         @crypth@
75251875Speter#define APR_HAVE_CTYPE_H         @ctypeh@
76251875Speter#define APR_HAVE_DIRENT_H        @direnth@
77251875Speter#define APR_HAVE_ERRNO_H         @errnoh@
78251875Speter#define APR_HAVE_FCNTL_H         @fcntlh@
79251875Speter#define APR_HAVE_IO_H            @ioh@
80251875Speter#define APR_HAVE_LIMITS_H        @limitsh@
81251875Speter#define APR_HAVE_NETDB_H         @netdbh@
82251875Speter#define APR_HAVE_NETINET_IN_H    @netinet_inh@
83251875Speter#define APR_HAVE_NETINET_SCTP_H  @netinet_sctph@
84251875Speter#define APR_HAVE_NETINET_SCTP_UIO_H @netinet_sctp_uioh@
85251875Speter#define APR_HAVE_NETINET_TCP_H   @netinet_tcph@
86251875Speter#define APR_HAVE_PROCESS_H       @processh@
87251875Speter#define APR_HAVE_PTHREAD_H       @pthreadh@
88251875Speter#define APR_HAVE_SEMAPHORE_H     @semaphoreh@
89251875Speter#define APR_HAVE_SIGNAL_H        @signalh@
90251875Speter#define APR_HAVE_STDARG_H        @stdargh@
91251875Speter#define APR_HAVE_STDINT_H        @stdint@
92251875Speter#define APR_HAVE_STDIO_H         @stdioh@
93251875Speter#define APR_HAVE_STDLIB_H        @stdlibh@
94251875Speter#define APR_HAVE_STRING_H        @stringh@
95251875Speter#define APR_HAVE_STRINGS_H       @stringsh@
96251875Speter#define APR_HAVE_SYS_IOCTL_H     @sys_ioctlh@
97251875Speter#define APR_HAVE_SYS_SENDFILE_H  @sys_sendfileh@
98251875Speter#define APR_HAVE_SYS_SIGNAL_H    @sys_signalh@
99251875Speter#define APR_HAVE_SYS_SOCKET_H    @sys_socketh@
100251875Speter#define APR_HAVE_SYS_SOCKIO_H    @sys_sockioh@
101251875Speter#define APR_HAVE_SYS_SYSLIMITS_H @sys_syslimitsh@
102251875Speter#define APR_HAVE_SYS_TIME_H      @sys_timeh@
103251875Speter#define APR_HAVE_SYS_TYPES_H     @sys_typesh@
104251875Speter#define APR_HAVE_SYS_UIO_H       @sys_uioh@
105251875Speter#define APR_HAVE_SYS_UN_H        @sys_unh@
106251875Speter#define APR_HAVE_SYS_WAIT_H      @sys_waith@
107251875Speter#define APR_HAVE_TIME_H          @timeh@
108251875Speter#define APR_HAVE_UNISTD_H        @unistdh@
109251875Speter#define APR_HAVE_WINDOWS_H       @windowsh@
110251875Speter#define APR_HAVE_WINSOCK2_H      @winsock2h@
111251875Speter
112251875Speter/** @} */
113251875Speter/** @} */
114251875Speter
115251875Speter/* We don't include our conditional headers within the doxyblocks 
116251875Speter * or the extern "C" namespace 
117251875Speter */
118251875Speter
119266735Speter#if APR_HAVE_WINDOWS_H && defined(WIN32)
120251875Speter/* If windows.h was already included, our preferences don't matter.
121251875Speter * If not, include a restricted set of windows headers to our tastes.
122251875Speter */
123251875Speter#ifndef _WINDOWS_
124251875Speter
125251875Speter#ifndef WIN32_LEAN_AND_MEAN
126251875Speter#define WIN32_LEAN_AND_MEAN
127251875Speter#endif
128251875Speter
129251875Speter#ifndef _WIN32_WINNT
130251875Speter/* Restrict the server to a subset of Windows XP header files by default
131251875Speter */
132251875Speter#define _WIN32_WINNT 0x0501
133251875Speter#endif
134251875Speter
135251875Speter#ifndef NOUSER
136251875Speter#define NOUSER
137251875Speter#endif
138251875Speter#ifndef NOMCX
139251875Speter#define NOMCX
140251875Speter#endif
141251875Speter#ifndef NOIME
142251875Speter#define NOIME
143251875Speter#endif
144251875Speter
145251875Speter#include <windows.h>
146251875Speter/* 
147251875Speter * Add a _very_few_ declarations missing from the restricted set of headers
148251875Speter * (If this list becomes extensive, re-enable the required headers above!)
149251875Speter * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
150251875Speter */
151251875Speter#define SW_HIDE             0
152251875Speter#ifndef _WIN32_WCE
153251875Speter#include <winsock2.h>
154251875Speter#include <ws2tcpip.h>
155251875Speter#include <mswsock.h>
156251875Speter#else
157251875Speter#include <winsock.h>
158251875Speter#endif
159251875Speter
160251875Speter#endif /* ndef _WINDOWS_ */
161251875Speter#endif /* APR_HAVE_WINDOWS_H */
162251875Speter
163251875Speter#if APR_HAVE_SYS_TYPES_H
164251875Speter#include <sys/types.h>
165251875Speter#endif
166251875Speter
167251875Speter#if APR_HAVE_SYS_SOCKET_H
168251875Speter#include <sys/socket.h>
169251875Speter#endif
170251875Speter
171251875Speter#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS)
172251875Speter/* C99 7.18.4 requires that stdint.h only exposes INT64_C 
173251875Speter * and UINT64_C for C++ implementations if this is defined: */
174251875Speter#define __STDC_CONSTANT_MACROS
175251875Speter#endif
176251875Speter
177251875Speter#if APR_HAVE_STDINT_H
178251875Speter#include <stdint.h>
179251875Speter#endif
180251875Speter
181251875Speter#if APR_HAVE_SYS_WAIT_H
182251875Speter#include <sys/wait.h>
183251875Speter#endif
184251875Speter
185251875Speter#ifdef OS2
186251875Speter#define INCL_DOS
187251875Speter#define INCL_DOSERRORS
188251875Speter#include <os2.h>
189251875Speter#endif
190251875Speter
191251875Speter/* header files for PATH_MAX, _POSIX_PATH_MAX */
192251875Speter#if APR_HAVE_LIMITS_H
193251875Speter#include <limits.h>
194251875Speter#else
195251875Speter#if APR_HAVE_SYS_SYSLIMITS_H
196251875Speter#include <sys/syslimits.h>
197251875Speter#endif
198251875Speter#endif
199251875Speter
200251875Speter
201251875Speter#ifdef __cplusplus
202251875Speterextern "C" {
203251875Speter#endif
204251875Speter
205251875Speter/**
206251875Speter * @addtogroup apr_platform
207251875Speter * @ingroup APR 
208251875Speter * @{
209251875Speter */
210251875Speter
211251875Speter#define APR_HAVE_SHMEM_MMAP_TMP     @havemmaptmp@
212251875Speter#define APR_HAVE_SHMEM_MMAP_SHM     @havemmapshm@
213251875Speter#define APR_HAVE_SHMEM_MMAP_ZERO    @havemmapzero@
214251875Speter#define APR_HAVE_SHMEM_SHMGET_ANON  @haveshmgetanon@
215251875Speter#define APR_HAVE_SHMEM_SHMGET       @haveshmget@
216251875Speter#define APR_HAVE_SHMEM_MMAP_ANON    @havemmapanon@
217251875Speter#define APR_HAVE_SHMEM_BEOS         @havebeosarea@
218251875Speter
219251875Speter#define APR_USE_SHMEM_MMAP_TMP     @usemmaptmp@
220251875Speter#define APR_USE_SHMEM_MMAP_SHM     @usemmapshm@
221251875Speter#define APR_USE_SHMEM_MMAP_ZERO    @usemmapzero@
222251875Speter#define APR_USE_SHMEM_SHMGET_ANON  @useshmgetanon@
223251875Speter#define APR_USE_SHMEM_SHMGET       @useshmget@
224251875Speter#define APR_USE_SHMEM_MMAP_ANON    @usemmapanon@
225251875Speter#define APR_USE_SHMEM_BEOS         @usebeosarea@
226251875Speter
227251875Speter#define APR_USE_FLOCK_SERIALIZE           @flockser@ 
228251875Speter#define APR_USE_SYSVSEM_SERIALIZE         @sysvser@
229251875Speter#define APR_USE_POSIXSEM_SERIALIZE        @posixser@
230251875Speter#define APR_USE_FCNTL_SERIALIZE           @fcntlser@
231251875Speter#define APR_USE_PROC_PTHREAD_SERIALIZE    @procpthreadser@ 
232251875Speter#define APR_USE_PTHREAD_SERIALIZE         @pthreadser@ 
233251875Speter
234251875Speter#define APR_HAS_FLOCK_SERIALIZE           @hasflockser@
235251875Speter#define APR_HAS_SYSVSEM_SERIALIZE         @hassysvser@
236251875Speter#define APR_HAS_POSIXSEM_SERIALIZE        @hasposixser@
237251875Speter#define APR_HAS_FCNTL_SERIALIZE           @hasfcntlser@
238251875Speter#define APR_HAS_PROC_PTHREAD_SERIALIZE    @hasprocpthreadser@
239251875Speter
240251875Speter#define APR_PROCESS_LOCK_IS_GLOBAL        @proclockglobal@
241251875Speter
242251875Speter#define APR_HAVE_CORKABLE_TCP   @have_corkable_tcp@ 
243251875Speter#define APR_HAVE_GETRLIMIT      @have_getrlimit@
244251875Speter#define APR_HAVE_IN_ADDR        @have_in_addr@
245251875Speter#define APR_HAVE_INET_ADDR      @have_inet_addr@
246251875Speter#define APR_HAVE_INET_NETWORK   @have_inet_network@
247251875Speter#define APR_HAVE_IPV6           @have_ipv6@
248251875Speter#define APR_HAVE_MEMMOVE        @have_memmove@
249251875Speter#define APR_HAVE_SETRLIMIT      @have_setrlimit@
250251875Speter#define APR_HAVE_SIGACTION      @have_sigaction@
251251875Speter#define APR_HAVE_SIGSUSPEND     @have_sigsuspend@
252251875Speter#define APR_HAVE_SIGWAIT        @have_sigwait@
253251875Speter#define APR_HAVE_SA_STORAGE     @have_sa_storage@
254251875Speter#define APR_HAVE_STRCASECMP     @have_strcasecmp@
255251875Speter#define APR_HAVE_STRDUP         @have_strdup@
256251875Speter#define APR_HAVE_STRICMP        @have_stricmp@
257251875Speter#define APR_HAVE_STRNCASECMP    @have_strncasecmp@
258251875Speter#define APR_HAVE_STRNICMP       @have_strnicmp@
259251875Speter#define APR_HAVE_STRSTR         @have_strstr@
260251875Speter#define APR_HAVE_MEMCHR         @have_memchr@
261251875Speter#define APR_HAVE_STRUCT_RLIMIT  @struct_rlimit@
262251875Speter#define APR_HAVE_UNION_SEMUN    @have_union_semun@
263251875Speter#define APR_HAVE_SCTP           @have_sctp@
264251875Speter#define APR_HAVE_IOVEC          @have_iovec@
265251875Speter
266251875Speter/*  APR Feature Macros */
267251875Speter#define APR_HAS_SHARED_MEMORY     @sharedmem@
268251875Speter#define APR_HAS_THREADS           @threads@
269251875Speter#define APR_HAS_SENDFILE          @sendfile@
270251875Speter#define APR_HAS_MMAP              @mmap@
271251875Speter#define APR_HAS_FORK              @fork@
272251875Speter#define APR_HAS_RANDOM            @rand@
273251875Speter#define APR_HAS_OTHER_CHILD       @oc@
274251875Speter#define APR_HAS_DSO               @aprdso@
275251875Speter#define APR_HAS_SO_ACCEPTFILTER   @acceptfilter@
276251875Speter#define APR_HAS_UNICODE_FS        @have_unicode_fs@
277251875Speter#define APR_HAS_PROC_INVOKED      @have_proc_invoked@
278251875Speter#define APR_HAS_USER              @apr_has_user@
279251875Speter#define APR_HAS_LARGE_FILES       @aprlfs@
280251875Speter#define APR_HAS_XTHREAD_FILES     @apr_has_xthread_files@
281251875Speter#define APR_HAS_OS_UUID           @osuuid@
282251875Speter
283251875Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD @apr_procattr_user_set_requires_password@
284251875Speter
285251875Speter/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
286251875Speter * to poll on files/pipes.
287251875Speter */
288251875Speter#define APR_FILES_AS_SOCKETS      @file_as_socket@
289251875Speter
290251875Speter/* This macro indicates whether or not EBCDIC is the native character set.
291251875Speter */
292251875Speter#define APR_CHARSET_EBCDIC        @apr_charset_ebcdic@
293251875Speter
294251875Speter/* If we have a TCP implementation that can be "corked", what flag
295251875Speter * do we use?
296251875Speter */
297251875Speter#define APR_TCP_NOPUSH_FLAG       @apr_tcp_nopush_flag@
298251875Speter
299251875Speter/* Is the TCP_NODELAY socket option inherited from listening sockets?
300251875Speter*/
301251875Speter#define APR_TCP_NODELAY_INHERITED @tcp_nodelay_inherited@
302251875Speter
303251875Speter/* Is the O_NONBLOCK flag inherited from listening sockets?
304251875Speter*/
305251875Speter#define APR_O_NONBLOCK_INHERITED @o_nonblock_inherited@
306251875Speter
307251875Speter/* Typedefs that APR needs. */
308251875Speter
309251875Spetertypedef  unsigned char           apr_byte_t;
310251875Speter
311251875Spetertypedef  @short_value@           apr_int16_t;
312251875Spetertypedef  unsigned @short_value@  apr_uint16_t;
313251875Speter
314251875Spetertypedef  @int_value@             apr_int32_t;
315251875Spetertypedef  unsigned @int_value@    apr_uint32_t;
316251875Speter
317251875Speter#define APR_SIZEOF_VOIDP @voidp_size@
318251875Speter
319251875Speter/*
320251875Speter * Darwin 10's default compiler (gcc42) builds for both 64 and
321251875Speter * 32 bit architectures unless specifically told not to.
322251875Speter * In those cases, we need to override types depending on how
323251875Speter * we're being built at compile time.
324251875Speter * NOTE: This is an ugly work-around for Darwin's
325251875Speter * concept of universal binaries, a single package
326251875Speter * (executable, lib, etc...) which contains both 32
327251875Speter * and 64 bit versions. The issue is that if APR is
328251875Speter * built universally, if something else is compiled
329251875Speter * against it, some bit sizes will depend on whether
330251875Speter * it is 32 or 64 bit. This is determined by the __LP64__
331251875Speter * flag. Since we need to support both, we have to
332251875Speter * handle OS X unqiuely.
333251875Speter */
334251875Speter#ifdef DARWIN_10
335251875Speter#undef APR_SIZEOF_VOIDP
336251875Speter#undef INT64_C
337251875Speter#undef UINT64_C
338251875Speter#ifdef __LP64__
339251875Speter typedef  long            apr_int64_t;
340251875Speter typedef  unsigned long   apr_uint64_t;
341251875Speter #define APR_SIZEOF_VOIDP     8
342251875Speter #define INT64_C(v)   (v ## L)
343251875Speter #define UINT64_C(v)  (v ## UL)
344251875Speter#else
345251875Speter typedef  long long            apr_int64_t;
346251875Speter typedef  unsigned long long   apr_uint64_t;
347251875Speter #define APR_SIZEOF_VOIDP     4
348251875Speter #define INT64_C(v)   (v ## LL)
349251875Speter #define UINT64_C(v)  (v ## ULL)
350251875Speter#endif
351251875Speter#else
352251875Speter typedef  @long_value@            apr_int64_t;
353251875Speter typedef  unsigned @long_value@   apr_uint64_t;
354251875Speter#endif
355251875Speter
356251875Spetertypedef  @size_t_value@          apr_size_t;
357251875Spetertypedef  @ssize_t_value@         apr_ssize_t;
358251875Spetertypedef  @off_t_value@           apr_off_t;
359251875Spetertypedef  @socklen_t_value@       apr_socklen_t;
360251875Spetertypedef  @ino_t_value@           apr_ino_t;
361251875Speter
362251875Speter#if APR_SIZEOF_VOIDP == 8
363251875Spetertypedef  apr_uint64_t            apr_uintptr_t;
364251875Speter#else
365251875Spetertypedef  apr_uint32_t            apr_uintptr_t;
366251875Speter#endif
367251875Speter
368251875Speter/* Are we big endian? */
369251875Speter#define APR_IS_BIGENDIAN	@bigendian@
370251875Speter
371251875Speter/* Mechanisms to properly type numeric literals */
372251875Speter@int64_literal@
373251875Speter@uint64_literal@
374251875Speter
375251875Speter#ifdef INT16_MIN
376251875Speter#define APR_INT16_MIN   INT16_MIN
377251875Speter#else
378251875Speter#define APR_INT16_MIN   (-0x7fff - 1)
379251875Speter#endif
380251875Speter
381251875Speter#ifdef INT16_MAX
382251875Speter#define APR_INT16_MAX  INT16_MAX
383251875Speter#else
384251875Speter#define APR_INT16_MAX   (0x7fff)
385251875Speter#endif
386251875Speter
387251875Speter#ifdef UINT16_MAX
388251875Speter#define APR_UINT16_MAX  UINT16_MAX
389251875Speter#else
390251875Speter#define APR_UINT16_MAX  (0xffff)
391251875Speter#endif
392251875Speter
393251875Speter#ifdef INT32_MIN
394251875Speter#define APR_INT32_MIN   INT32_MIN
395251875Speter#else
396251875Speter#define APR_INT32_MIN   (-0x7fffffff - 1)
397251875Speter#endif
398251875Speter
399251875Speter#ifdef INT32_MAX
400251875Speter#define APR_INT32_MAX  INT32_MAX
401251875Speter#else
402251875Speter#define APR_INT32_MAX  0x7fffffff
403251875Speter#endif
404251875Speter
405251875Speter#ifdef UINT32_MAX
406251875Speter#define APR_UINT32_MAX  UINT32_MAX
407251875Speter#else
408251875Speter#define APR_UINT32_MAX  (0xffffffffU)
409251875Speter#endif
410251875Speter
411251875Speter#ifdef INT64_MIN
412251875Speter#define APR_INT64_MIN   INT64_MIN
413251875Speter#else
414251875Speter#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
415251875Speter#endif
416251875Speter
417251875Speter#ifdef INT64_MAX
418251875Speter#define APR_INT64_MAX   INT64_MAX
419251875Speter#else
420251875Speter#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
421251875Speter#endif
422251875Speter
423251875Speter#ifdef UINT64_MAX
424251875Speter#define APR_UINT64_MAX  UINT64_MAX
425251875Speter#else
426251875Speter#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
427251875Speter#endif
428251875Speter
429251875Speter#define APR_SIZE_MAX    (~((apr_size_t)0))
430251875Speter
431251875Speter
432251875Speter/* Definitions that APR programs need to work properly. */
433251875Speter
434251875Speter/**
435251875Speter * APR public API wrap for C++ compilers.
436251875Speter */
437251875Speter#ifdef __cplusplus
438251875Speter#define APR_BEGIN_DECLS     extern "C" {
439251875Speter#define APR_END_DECLS       }
440251875Speter#else
441251875Speter#define APR_BEGIN_DECLS
442251875Speter#define APR_END_DECLS
443251875Speter#endif
444251875Speter
445251875Speter/** 
446251875Speter * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, 
447251875Speter * so that they follow the platform's calling convention.
448251875Speter * <PRE>
449251875Speter *
450251875Speter * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
451251875Speter *
452251875Speter * </PRE>
453251875Speter */
454251875Speter#define APR_THREAD_FUNC       @apr_thread_func@
455251875Speter
456266735Speter#if defined(DOXYGEN) || !defined(WIN32)
457266735Speter
458251875Speter/**
459251875Speter * The public APR functions are declared with APR_DECLARE(), so they may
460251875Speter * use the most appropriate calling convention.  Public APR functions with 
461251875Speter * variable arguments must use APR_DECLARE_NONSTD().
462251875Speter *
463251875Speter * @remark Both the declaration and implementations must use the same macro.
464251875Speter *
465251875Speter * <PRE>
466251875Speter * APR_DECLARE(rettype) apr_func(args)
467251875Speter * </PRE>
468251875Speter * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
469251875Speter * @remark Note that when APR compiles the library itself, it passes the 
470251875Speter * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) 
471251875Speter * to export public symbols from the dynamic library build.\n
472251875Speter * The user must define the APR_DECLARE_STATIC when compiling to target
473251875Speter * the static APR library on some platforms (e.g. Win32.)  The public symbols 
474251875Speter * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
475251875Speter * By default, compiling an application and including the APR public
476251875Speter * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
477251875Speter * linked to the dynamic library.
478251875Speter */
479251875Speter#define APR_DECLARE(type)            type 
480251875Speter
481251875Speter/**
482251875Speter * The public APR functions using variable arguments are declared with 
483251875Speter * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
484251875Speter * @see APR_DECLARE @see APR_DECLARE_DATA
485251875Speter * @remark Both the declaration and implementations must use the same macro.
486251875Speter * <PRE>
487251875Speter *
488251875Speter * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
489251875Speter *
490251875Speter * </PRE>
491251875Speter */
492251875Speter#define APR_DECLARE_NONSTD(type)     type
493251875Speter
494251875Speter/**
495251875Speter * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
496251875Speter * This assures the appropriate indirection is invoked at compile time.
497251875Speter * @see APR_DECLARE @see APR_DECLARE_NONSTD
498251875Speter * @remark Note that the declaration and implementations use different forms,
499251875Speter * but both must include the macro.
500251875Speter * 
501251875Speter * <PRE>
502251875Speter *
503251875Speter * extern APR_DECLARE_DATA type apr_variable;\n
504251875Speter * APR_DECLARE_DATA type apr_variable = value;
505251875Speter *
506251875Speter * </PRE>
507251875Speter */
508251875Speter#define APR_DECLARE_DATA
509251875Speter
510266735Speter#elif defined(APR_DECLARE_STATIC)
511266735Speter#define APR_DECLARE(type)            type __stdcall
512266735Speter#define APR_DECLARE_NONSTD(type)     type __cdecl
513266735Speter#define APR_DECLARE_DATA
514266735Speter#elif defined(APR_DECLARE_EXPORT)
515266735Speter#define APR_DECLARE(type)            __declspec(dllexport) type __stdcall
516266735Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
517266735Speter#define APR_DECLARE_DATA             __declspec(dllexport)
518266735Speter#else
519266735Speter#define APR_DECLARE(type)            __declspec(dllimport) type __stdcall
520266735Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
521266735Speter#define APR_DECLARE_DATA             __declspec(dllimport)
522266735Speter#endif
523266735Speter
524251875Speter/* Define APR_SSIZE_T_FMT.  
525251875Speter * If ssize_t is an integer we define it to be "d",
526251875Speter * if ssize_t is a long int we define it to be "ld",
527251875Speter * if ssize_t is neither we declare an error here.
528251875Speter * I looked for a better way to define this here, but couldn't find one, so
529251875Speter * to find the logic for this definition search for "ssize_t_fmt" in
530251875Speter * configure.in.
531251875Speter */
532251875Speter
533251875Speter@ssize_t_fmt@
534251875Speter
535251875Speter/* And APR_SIZE_T_FMT */
536251875Speter@size_t_fmt@
537251875Speter
538251875Speter/* And APR_OFF_T_FMT */
539251875Speter@off_t_fmt@
540251875Speter
541251875Speter/* And APR_PID_T_FMT */
542251875Speter@pid_t_fmt@
543251875Speter
544251875Speter/* And APR_INT64_T_FMT */
545251875Speter@int64_t_fmt@
546251875Speter
547251875Speter/* And APR_UINT64_T_FMT */
548251875Speter@uint64_t_fmt@
549251875Speter
550251875Speter/* And APR_UINT64_T_HEX_FMT */
551251875Speter@uint64_t_hex_fmt@
552251875Speter
553251875Speter/*
554251875Speter * Ensure we work with universal binaries on Darwin
555251875Speter */
556251875Speter#ifdef DARWIN_10
557251875Speter
558251875Speter#undef APR_HAS_LARGE_FILES
559251875Speter#undef APR_SIZEOF_VOIDP
560251875Speter#undef APR_INT64_T_FMT
561251875Speter#undef APR_UINT64_T_FMT
562251875Speter#undef APR_UINT64_T_HEX_FMT
563251875Speter
564251875Speter#ifdef __LP64__
565251875Speter #define APR_HAS_LARGE_FILES  0
566251875Speter #define APR_SIZEOF_VOIDP     8
567251875Speter #define APR_INT64_T_FMT      "ld"
568251875Speter #define APR_UINT64_T_FMT     "lu"
569251875Speter #define APR_UINT64_T_HEX_FMT "lx"
570251875Speter#else
571251875Speter #define APR_HAS_LARGE_FILES  1
572251875Speter #define APR_SIZEOF_VOIDP     4
573251875Speter #define APR_INT64_T_FMT      "lld"
574251875Speter #define APR_UINT64_T_FMT     "llu"
575251875Speter #define APR_UINT64_T_HEX_FMT "llx"
576251875Speter#endif
577251875Speter
578251875Speter#undef APR_IS_BIGENDIAN
579251875Speter#ifdef __BIG_ENDIAN__
580251875Speter #define APR_IS_BIGENDIAN	1
581251875Speter#else
582251875Speter #define APR_IS_BIGENDIAN	0
583251875Speter#endif
584251875Speter
585251875Speter#undef APR_OFF_T_FMT
586251875Speter#define APR_OFF_T_FMT "lld"
587251875Speter
588251875Speter#endif /* DARWIN_10 */
589251875Speter
590251875Speter/* Does the proc mutex lock threads too */
591251875Speter#define APR_PROC_MUTEX_IS_GLOBAL      @proc_mutex_is_global@
592251875Speter
593251875Speter/* Local machine definition for console and log output. */
594251875Speter#define APR_EOL_STR              "@eolstr@"
595251875Speter
596251875Speter#if APR_HAVE_SYS_WAIT_H
597251875Speter#ifdef WEXITSTATUS
598251875Speter#define apr_wait_t       int
599251875Speter#else
600251875Speter#define apr_wait_t       union wait
601251875Speter#define WEXITSTATUS(status)    (int)((status).w_retcode)
602251875Speter#define WTERMSIG(status)       (int)((status).w_termsig)
603251875Speter#endif /* !WEXITSTATUS */
604251875Speter#elif defined(__MINGW32__)
605251875Spetertypedef int apr_wait_t;
606251875Speter#endif /* HAVE_SYS_WAIT_H */
607251875Speter
608251875Speter#if defined(PATH_MAX)
609251875Speter#define APR_PATH_MAX       PATH_MAX
610251875Speter#elif defined(_POSIX_PATH_MAX)
611251875Speter#define APR_PATH_MAX       _POSIX_PATH_MAX
612251875Speter#else
613251875Speter#error no decision has been made on APR_PATH_MAX for your platform
614251875Speter#endif
615251875Speter
616251875Speter#define APR_DSOPATH "@shlibpath_var@"
617251875Speter
618251875Speter/** @} */
619251875Speter
620251875Speter/* Definitions that only Win32 programs need to compile properly. */
621251875Speter
622251875Speter/* XXX These simply don't belong here, perhaps in apr_portable.h
623251875Speter * based on some APR_HAVE_PID/GID/UID?
624251875Speter */
625251875Speter#ifdef __MINGW32__
626251875Speter#ifndef __GNUC__
627251875Spetertypedef  int         pid_t;
628251875Speter#endif
629251875Spetertypedef  int         uid_t;
630251875Spetertypedef  int         gid_t;
631251875Speter#endif
632251875Speter
633251875Speter#ifdef __cplusplus
634251875Speter}
635251875Speter#endif
636251875Speter
637251875Speter#endif /* APR_H */
638