summaryrefslogtreecommitdiffstats
path: root/modules/cache/config.m4
blob: 4fa414b70b97ad9a97e32b2bb7e858fe5f6731ec (plain)
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
dnl modules enabled in this directory by default

dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])

APACHE_MODPATH_INIT(cache)

APACHE_MODULE(file_cache, File cache, , , most)

dnl #  list of object files for mod_cache
cache_objs="dnl
mod_cache.lo dnl
cache_storage.lo dnl
cache_util.lo dnl
"
cache_disk_objs="mod_cache_disk.lo"
cache_socache_objs="mod_cache_socache.lo"

case "$host" in
  *os2*)
    # OS/2 DLLs must resolve all symbols at build time
    # and we need some from main cache module
    cache_disk_objs="$cache_disk_objs mod_cache.la"
    cache_socache_objs="$cache_socache_objs mod_cache.la"
    ;;
esac

APACHE_MODULE(cache, dynamic file caching.  At least one storage management module (e.g. mod_cache_disk) is also necessary., $cache_objs, , most)
APACHE_MODULE(cache_disk, disk caching module, $cache_disk_objs, , most, , cache)
APACHE_MODULE(cache_socache, shared object caching module, $cache_socache_objs, , most)

dnl
dnl APACHE_CHECK_DISTCACHE
dnl
dnl Configure for the detected distcache installation, giving
dnl preference to "--with-distcache=<path>" if it was specified.
dnl
AC_DEFUN([APACHE_CHECK_DISTCACHE],[
if test "x$ap_distcache_configured" = "x"; then
  dnl initialise the variables we use
  ap_distcache_found=""
  ap_distcache_base=""
  ap_distcache_libs=""
  ap_distcache_ldflags=""
  ap_distcache_with=""

  dnl Determine the distcache base directory, if any
  AC_MSG_CHECKING([for user-provided distcache base])
  AC_ARG_WITH(distcache, APACHE_HELP_STRING(--with-distcache=PATH, Distcache installation directory), [
    dnl If --with-distcache specifies a directory, we use that directory or fail
    if test "x$withval" != "xyes" -a "x$withval" != "x"; then
      dnl This ensures $withval is actually a directory and that it is absolute
      ap_distcache_with="yes"
      ap_distcache_base="`cd $withval ; pwd`"
    fi
  ])
  if test "x$ap_distcache_base" = "x"; then
    AC_MSG_RESULT(none)
  else
    AC_MSG_RESULT($ap_distcache_base)
  fi

  dnl Run header and version checks
  saved_CPPFLAGS="$CPPFLAGS"
  saved_LIBS="$LIBS"
  saved_LDFLAGS="$LDFLAGS"

  if test "x$ap_distcache_base" != "x"; then
    APR_ADDTO(CPPFLAGS, [-I$ap_distcache_base/include])
    APR_ADDTO(MOD_INCLUDES, [-I$ap_distcache_base/include])
    APR_ADDTO(LDFLAGS, [-L$ap_distcache_base/lib])
    APR_ADDTO(ap_distcache_ldflags, [-L$ap_distcache_base/lib])
    if test "x$ap_platform_runtime_link_flag" != "x"; then
      APR_ADDTO(LDFLAGS, [$ap_platform_runtime_link_flag$ap_distcache_base/lib])
      APR_ADDTO(ap_distcache_ldflags, [$ap_platform_runtime_link_flag$ap_distcache_base/lib])
    fi
  fi
  dnl First check for mandatory headers
  AC_CHECK_HEADERS([distcache/dc_client.h], [ap_distcache_found="yes"], [])
  if test "$ap_distcache_found" = "yes"; then
    dnl test for a good version
    AC_MSG_CHECKING(for distcache version)
    AC_TRY_COMPILE([#include <distcache/dc_client.h>],[
#if DISTCACHE_CLIENT_API != 0x0001
#error "distcache API version is unrecognised"
#endif],
      [],
      [ap_distcache_found="no"])
    AC_MSG_RESULT($ap_distcache_found)
  fi
  if test "$ap_distcache_found" != "yes"; then
    if test "x$ap_distcache_with" = "x"; then
      AC_MSG_WARN([...No distcache detected])
    else
      AC_MSG_ERROR([...No distcache detected])
    fi
  else
    dnl Run library and function checks
    AC_MSG_CHECKING(for distcache libraries)
    ap_distcache_libs="-ldistcache -lnal"
    APR_ADDTO(LIBS, [$ap_distcache_libs])

    AC_TRY_LINK(
      [#include <distcache/dc_client.h>],
      [DC_CTX *foo = DC_CTX_new((const char *)0,0);],
      [],
      [ap_distcache_found="no"])
    AC_MSG_RESULT($ap_distcache_found)
    if test "$ap_distcache_found" != "yes"; then
      if test "x$ap_distcache_base" = "x"; then
        AC_MSG_WARN([... Error, distcache libraries were missing or unusable])
      else
        AC_MSG_ERROR([... Error, distcache libraries were missing or unusable])
      fi
    fi
  fi

  dnl restore
  CPPFLAGS="$saved_CPPFLAGS"
  LIBS="$saved_LIBS"
  LDFLAGS="$saved_LDFLAGS"

  dnl Adjust apache's configuration based on what we found above.
  if test "$ap_distcache_found" = "yes"; then
    APR_ADDTO(MOD_SOCACHE_DC_LDADD, [$ap_distcache_ldflags $ap_distcache_libs])
    AC_DEFINE(HAVE_DISTCACHE, 1, [Define if distcache support is enabled])
  else
    enable_socache_dc=no
  fi
  ap_distcache_configured="yes"
fi
])

APACHE_MODULE(socache_shmcb,  shmcb small object cache provider, , , most)
APACHE_MODULE(socache_dbm, dbm small object cache provider, , , most)
APACHE_MODULE(socache_memcache, memcache small object cache provider, , , most)
APACHE_MODULE(socache_redis, redis small object cache provider, , , most)
APACHE_MODULE(socache_dc, distcache small object cache provider, , , no, [
    APACHE_CHECK_DISTCACHE
])

APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current])

APACHE_MODPATH_FINISH