Updated Branches: refs/heads/master 92961cf37 -> f34c62b42
TS-2128: Don't link libGeoIP.so.1 into binaries AC_SEARCH_LIBS always updates $LIBS, but AC_CHECK_LIB doesn't search properly. So we have to introduce a wrapper around AC_SEARCH_LIBS that preserves $LIBS so that we can properly test for libraries without linking them into everything. Apply the new TS_SEARCH_LIBRARY macro to the geoip_acl plugin so that libGeoIP is not linked into every binary. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/f34c62b4 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/f34c62b4 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/f34c62b4 Branch: refs/heads/master Commit: f34c62b42bbeb62e78ccd47eebe8ae0888e5e184 Parents: 92961cf Author: James Peach <[email protected]> Authored: Sat Aug 10 15:51:19 2013 -0700 Committer: James Peach <[email protected]> Committed: Sat Aug 10 15:51:19 2013 -0700 ---------------------------------------------------------------------- CHANGES | 2 ++ build/common.m4 | 25 +++++++++++++++++++++++- configure.ac | 14 ++++++------- lib/ts/ink_config.h.in | 1 - plugins/experimental/geoip_acl/Makefile.am | 1 + plugins/experimental/geoip_acl/acl.cc | 8 -------- plugins/experimental/geoip_acl/acl.h | 4 ++-- plugins/experimental/geoip_acl/geoip_acl.cc | 2 -- 8 files changed, 35 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f34c62b4/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index cb686e6..0c70a39 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,8 @@ Changes with Apache Traffic Server 3.5.0 + *) [TS-2128] Don't link libGeoIP.so.1 into binaries + *) [TS-2122] Enlarge the 64KB limitation of log buffer size. *) [TS-2061] LogFile::write_ascii_logbuffer3() can silently drop log http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f34c62b4/build/common.m4 ---------------------------------------------------------------------- diff --git a/build/common.m4 b/build/common.m4 index bf01eed..5e58945 100644 --- a/build/common.m4 +++ b/build/common.m4 @@ -513,7 +513,7 @@ done ])dnl -dnl TS_FLAG_HEADERS(HEADER-FILE ... ) +dnl TS_FLAG_HEADERS(header-file, [action-if-found], [action-if-not-found], [includes]) dnl AC_DEFUN([TS_FLAG_HEADERS], [ AC_CHECK_HEADERS([$1], [$2], [$3], [$4]) @@ -560,3 +560,26 @@ AC_DEFUN([TS_ARG_ENABLE_VAR],[ ) ]) +dnl +dnl TS_SEARCH_LIBRARY(function, search-libs, [action-if-found], [action-if-not-found]) +dnl This macro works like AC_SEARCH_LIBS, except that $LIBS is not modified. If the library +dnl is found, it is cached in the ts_cv_lib_${function} variable. +dnl +AC_DEFUN([TS_SEARCH_LIBRARY], [ + __saved_LIBS="$LIBS" + + AC_SEARCH_LIBS($1, $2, [ + dnl action-if-found + case $ac_cv_search_$1 in + "none required"|"no") ts_cv_search_$1="" ;; + *) ts_cv_search_$1=$ac_cv_search_$1 ;; + esac + m4_ifval($3, [$3], [true]) + ], [ + dnl action-if-not-found + m4_ifval($4, [$4], [true]) + ]) + + LIBS="$__saved_LIBS" + unset __saved_LIBS +]) http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f34c62b4/configure.ac ---------------------------------------------------------------------- diff --git a/configure.ac b/configure.ac index 6cf6c58..e689872 100644 --- a/configure.ac +++ b/configure.ac @@ -1308,16 +1308,14 @@ AC_SUBST(use_hwloc) # GeoIP as a "helper" plugin, which other plugins can then use. Such a plugin could # then manage which libraries to use via explicit dlopen()'s. # -use_maxmind_geoip=0 -AC_SEARCH_LIBS([GeoIP_id_by_code], [GeoIP], [use_maxmind_geoip=1], [use_maxmind_geoip=0]) -AS_IF([test 1 -eq $use_maxmind_geoip], [ - TS_FLAG_HEADERS([GeoIP.h], [], [ - AC_MSG_ERROR([Can not locate GeoIP.h, perhaps install GeoIP-devel package?]) - ]) +enable_maxmind_geoip=no +TS_SEARCH_LIBRARY([GeoIP_id_by_code], [GeoIP], [ + GEOIP_LIBS=$ts_cv_search_GeoIP_id_by_code + TS_FLAG_HEADERS([GeoIP.h], [ enable_maxmind_geoip=yes ]) ]) -AC_SUBST(use_maxmind_geoip) -AM_CONDITIONAL([BUILD_GEOIP_PLUGIN], [ test 0 -ne $use_maxmind_geoip ]) +AC_SUBST(GEOIP_LIBS) +AM_CONDITIONAL([BUILD_GEOIP_PLUGIN], [ test "x${enable_maxmind_geoip}" = x"yes" ]) # Right now, the healthcheck plugins requires inotify_init (and friends) AM_CONDITIONAL([BUILD_HEALTHCHECK_PLUGIN], [ test "$ac_cv_func_inotify_init" = "yes" ]) http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f34c62b4/lib/ts/ink_config.h.in ---------------------------------------------------------------------- diff --git a/lib/ts/ink_config.h.in b/lib/ts/ink_config.h.in index 784702d..9dfb46a 100644 --- a/lib/ts/ink_config.h.in +++ b/lib/ts/ink_config.h.in @@ -69,7 +69,6 @@ #define TS_USE_TLS_SNI @use_tls_sni@ #define TS_USE_LINUX_NATIVE_AIO @use_linux_native_aio@ #define TS_USE_COP_DEBUG @use_cop_debug@ -#define TS_USE_MAXMIND_GEOIP @use_maxmind_geoip@ #define TS_USE_INTERIM_CACHE @has_interim_cache@ http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f34c62b4/plugins/experimental/geoip_acl/Makefile.am ---------------------------------------------------------------------- diff --git a/plugins/experimental/geoip_acl/Makefile.am b/plugins/experimental/geoip_acl/Makefile.am index cf9ffcf..0b4e4ff 100644 --- a/plugins/experimental/geoip_acl/Makefile.am +++ b/plugins/experimental/geoip_acl/Makefile.am @@ -21,5 +21,6 @@ if BUILD_GEOIP_PLUGIN pkglib_LTLIBRARIES = geoip_acl.la geoip_acl_la_SOURCES = acl.cc geoip_acl.cc geoip_acl_la_LDFLAGS = $(TS_PLUGIN_LDFLAGS) +geoip_acl_la_LIBADD = $(GEOIP_LIBS) endif http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f34c62b4/plugins/experimental/geoip_acl/acl.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/geoip_acl/acl.cc b/plugins/experimental/geoip_acl/acl.cc index ad917d5..90bbe79 100644 --- a/plugins/experimental/geoip_acl/acl.cc +++ b/plugins/experimental/geoip_acl/acl.cc @@ -24,12 +24,8 @@ #include "acl.h" #include "lulu.h" - // Global GeoIP object. -#if TS_USE_MAXMIND_GEOIP -#include <GeoIP.h> GeoIP* gGI; -#endif // Implementation of the ACL base class. void @@ -140,9 +136,7 @@ CountryAcl::add_token(const std::string& str) int iso = -1; Acl::add_token(str); -#if TS_USE_MAXMIND_GEOIP iso = GeoIP_id_by_code(str.c_str()); -#endif if (iso > 0 && iso < NUM_ISO_CODES) { _iso_country_codes[iso] = true; @@ -215,14 +209,12 @@ CountryAcl::eval(TSRemapRequestInfo *rri, TSHttpTxn txnp) const { uint32_t ip = ntohl(reinterpret_cast<const struct sockaddr_in *>(addr)->sin_addr.s_addr); -#if TS_USE_MAXMIND_GEOIP iso = GeoIP_id_by_ipnum(gGI, ip); if (TSIsDebugTagSet(PLUGIN_NAME)) { const char* c = GeoIP_country_code_by_ipnum(gGI, ip); TSDebug(PLUGIN_NAME, "eval(): IP=%u seems to come from ISO=%d / %s", ip, iso, c); } } -#endif break; case AF_INET6: return true; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f34c62b4/plugins/experimental/geoip_acl/acl.h ---------------------------------------------------------------------- diff --git a/plugins/experimental/geoip_acl/acl.h b/plugins/experimental/geoip_acl/acl.h index 08c1a7a..adc91b9 100644 --- a/plugins/experimental/geoip_acl/acl.h +++ b/plugins/experimental/geoip_acl/acl.h @@ -27,11 +27,11 @@ #include "lulu.h" -#if TS_USE_MAXMIND_GEOIP +#if HAVE_GEOIP_H #include <GeoIP.h> -extern GeoIP* gGI; #endif +extern GeoIP* gGI; // See http://www.iso.org/iso/english_country_names_and_code_elements // Maxmind allocates 253 country codes,even though there are only 248 according to the above http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f34c62b4/plugins/experimental/geoip_acl/geoip_acl.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/geoip_acl/geoip_acl.cc b/plugins/experimental/geoip_acl/geoip_acl.cc index 3249ea4..87e4d03 100644 --- a/plugins/experimental/geoip_acl/geoip_acl.cc +++ b/plugins/experimental/geoip_acl/geoip_acl.cc @@ -47,10 +47,8 @@ TSRemapInit(TSRemapInterface* api_info, char *errbuf, int errbuf_size) return TS_ERROR; } -#if TS_USE_MAXMIND_GEOIP //gGI = GeoIP_new(GEOIP_STANDARD); // This seems to break on threaded apps gGI = GeoIP_new(GEOIP_MMAP_CACHE); -#endif TSDebug(PLUGIN_NAME, "remap plugin is successfully initialized"); return TS_SUCCESS; /* success */
