Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 80abc7d524
Fetching contributors…

Cannot retrieve contributors at this time

file 252 lines (227 sloc) 8.505 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/**
* @file ap_config.h
* @brief Symbol export macros and hook functions
*/

#ifndef AP_CONFIG_H
#define AP_CONFIG_H

#include "ap_hooks.h"

/* Although this file doesn't declare any hooks, declare the exports group here */
/**
* @defgroup exports Apache exports
* @ingroup APACHE_CORE
*/

#ifdef DOXYGEN
/* define these just so doxygen documents them */

/**
* AP_DECLARE_STATIC is defined when including Apache's Core headers,
* to provide static linkage when the dynamic library may be unavailable.
*
* @see AP_DECLARE_EXPORT
*
* AP_DECLARE_STATIC and AP_DECLARE_EXPORT are left undefined when
* including Apache's Core headers, to import and link the symbols from the
* dynamic Apache Core library and assure appropriate indirection and calling
* conventions at compile time.
*/
# define AP_DECLARE_STATIC
/**
* AP_DECLARE_EXPORT is defined when building the Apache Core dynamic
* library, so that all public symbols are exported.
*
* @see AP_DECLARE_STATIC
*/
# define AP_DECLARE_EXPORT

#endif /* def DOXYGEN */

#if !defined(WIN32)
/**
* Apache Core dso functions are declared with AP_DECLARE(), so they may
* use the most appropriate calling convention. Hook functions and other
* Core functions with variable arguments must use AP_DECLARE_NONSTD().
* @code
* AP_DECLARE(rettype) ap_func(args)
* @endcode
*/
#define AP_DECLARE(type) type

/**
* Apache Core dso variable argument and hook functions are declared with
* AP_DECLARE_NONSTD(), as they must use the C language calling convention.
* @see AP_DECLARE
* @code
* AP_DECLARE_NONSTD(rettype) ap_func(args [...])
* @endcode
*/
#define AP_DECLARE_NONSTD(type) type

/**
* Apache Core dso variables are declared with AP_MODULE_DECLARE_DATA.
* This assures the appropriate indirection is invoked at compile time.
*
* @note AP_DECLARE_DATA extern type apr_variable; syntax is required for
* declarations within headers to properly import the variable.
* @code
* AP_DECLARE_DATA type apr_variable
* @endcode
*/
#define AP_DECLARE_DATA

#elif defined(AP_DECLARE_STATIC)
#define AP_DECLARE(type) type __stdcall
#define AP_DECLARE_NONSTD(type) type
#define AP_DECLARE_DATA
#elif defined(AP_DECLARE_EXPORT)
#define AP_DECLARE(type) __declspec(dllexport) type __stdcall
#define AP_DECLARE_NONSTD(type) __declspec(dllexport) type
#define AP_DECLARE_DATA __declspec(dllexport)
#else
#define AP_DECLARE(type) __declspec(dllimport) type __stdcall
#define AP_DECLARE_NONSTD(type) __declspec(dllimport) type
#define AP_DECLARE_DATA __declspec(dllimport)
#endif

#if !defined(WIN32)
/**
* The public APREQ functions are declared with APREQ_DECLARE(), so they may
* use the most appropriate calling convention. Public APR functions with
* variable arguments must use APR_DECLARE_NONSTD().
*
* @remark Both the declaration and implementations must use the same macro.
*/
/** APREQ_DECLARE(rettype) apeq_func(args)
*/
#define APREQ_DECLARE(d) APR_DECLARE(d)
/**
* The public APEQ functions using variable arguments are declared with
* APEQ_DECLARE_NONSTD(), as they must follow the C language calling convention.
* @see APEQ_DECLARE @see APEQ_DECLARE_DATA
* @remark Both the declaration and implementations must use the same macro.
* @example
*/
/** APEQ_DECLARE_NONSTD(rettype) apr_func(args, ...);
*/
#define APREQ_DECLARE_NONSTD(d) APR_DECLARE_NONSTD(d)
/**
* The public APREQ variables are declared with APREQ_DECLARE_DATA.
* This assures the appropriate indirection is invoked at compile time.
* @see APREQ_DECLARE @see APREQ_DECLARE_NONSTD
* @remark Note that the declaration and implementations use different forms,
* but both must include the macro.
*/
/** extern APREQ_DECLARE_DATA type apr_variable;\n
* APREQ_DECLARE_DATA type apr_variable = value;
*/
#define APREQ_DECLARE_DATA
#elif defined (APREQ_DECLARE_STATIC)
#define APREQ_DECLARE(type) type __stdcall
#define APREQ_DECLARE_NONSTD(type) type
#define APREQ_DECLARE_DATA
#elif defined (APREQ_DECLARE_EXPORT)
#define APREQ_DECLARE(type) __declspec(dllexport) type __stdcall
#define APREQ_DECLARE_NONSTD(type) __declspec(dllexport) type
#define APREQ_DECLARE_DATA __declspec(dllexport)
#else
#define APREQ_DECLARE(type) __declspec(dllimport) type __stdcall
#define APREQ_DECLARE_NONSTD(type) __declspec(dllimport) type
#define APREQ_DECLARE_DATA __declspec(dllimport)
#endif

#if !defined(WIN32) || defined(AP_MODULE_DECLARE_STATIC)
/**
* Declare a dso module's exported module structure as AP_MODULE_DECLARE_DATA.
*
* Unless AP_MODULE_DECLARE_STATIC is defined at compile time, symbols
* declared with AP_MODULE_DECLARE_DATA are always exported.
* @code
* module AP_MODULE_DECLARE_DATA mod_tag
* @endcode
*/
#if defined(WIN32)
#define AP_MODULE_DECLARE(type) type __stdcall
#else
#define AP_MODULE_DECLARE(type) type
#endif
#define AP_MODULE_DECLARE_NONSTD(type) type
#define AP_MODULE_DECLARE_DATA
#else
/**
* AP_MODULE_DECLARE_EXPORT is a no-op. Unless contradicted by the
* AP_MODULE_DECLARE_STATIC compile-time symbol, it is assumed and defined.
*
* The old SHARED_MODULE compile-time symbol is now the default behavior,
* so it is no longer referenced anywhere with Apache 2.0.
*/
#define AP_MODULE_DECLARE_EXPORT
#define AP_MODULE_DECLARE(type) __declspec(dllexport) type __stdcall
#define AP_MODULE_DECLARE_NONSTD(type) __declspec(dllexport) type
#define AP_MODULE_DECLARE_DATA __declspec(dllexport)
#endif

#include "os.h"
#if (!defined(WIN32) && !defined(NETWARE)) || defined(__MINGW32__)
#include "ap_config_auto.h"
#endif
#include "ap_config_layout.h"

/* Where the main/parent process's pid is logged */
#ifndef DEFAULT_PIDLOG
#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
#endif

#if defined(NETWARE)
#define AP_NONBLOCK_WHEN_MULTI_LISTEN 1
#endif

#if defined(AP_ENABLE_DTRACE) && HAVE_SYS_SDT_H
#include <sys/sdt.h>
#else
#undef _DTRACE_VERSION
#endif

#ifdef _DTRACE_VERSION
#include "apache_probes.h"
#else
#include "apache_noprobes.h"
#endif

/* If APR has OTHER_CHILD logic, use reliable piped logs. */
#if APR_HAS_OTHER_CHILD
#define AP_HAVE_RELIABLE_PIPED_LOGS TRUE
#endif

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define AP_HAVE_C99
#endif

/* Presume that the compiler supports C99-style designated
* initializers if using GCC (but not G++), or for any other compiler
* which claims C99 support. */
#if (defined(__GNUC__) && !defined(__cplusplus)) || defined(AP_HAVE_C99)
#define AP_HAVE_DESIGNATED_INITIALIZER
#endif

#ifndef __has_attribute /* check for supported attributes on clang */
#define __has_attribute(x) 0
#endif
#if (defined(__GNUC__) && __GNUC__ >= 4) || __has_attribute(sentinel)
#define AP_FN_ATTR_SENTINEL __attribute__((sentinel))
#else
#define AP_FN_ATTR_SENTINEL
#endif

#if ( defined(__GNUC__) && \
(__GNUC__ >= 4 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4))) \
|| __has_attribute(warn_unused_result)
#define AP_FN_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
#define AP_FN_ATTR_WARN_UNUSED_RESULT
#endif

#if ( defined(__GNUC__) && \
(__GNUC__ >= 4 && __GNUC_MINOR__ >= 3)) \
|| __has_attribute(alloc_size)
#define AP_FN_ATTR_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
#define AP_FN_ATTR_ALLOC_SIZE2(x,y) __attribute__((alloc_size(x,y)))
#else
#define AP_FN_ATTR_ALLOC_SIZE(x)
#define AP_FN_ATTR_ALLOC_SIZE2(x,y)
#endif

#endif /* AP_CONFIG_H */
Something went wrong with that request. Please try again.