From 70cb50ea9a7aa0554c3874862192b5ca3b1283d5 Mon Sep 17 00:00:00 2001 From: Ruben Kerkhof Date: Sat, 23 Apr 2016 17:35:39 +0200 Subject: [PATCH] rrdtool plugin: fix thread-safety detection librrd 1.6.0 is now threadsafe and librrd_th is gone. Since there doesn't seem to be a way to detect that librrd is threadsafe, use pkg-config to check for 1.6.0 or newer instead. The logic is now as follows: Check for librrd >= 1.6.0 with pkg-config If not found, look for rrd_update_r in librrd_th. If not found, look for rrd_update in librrd and assume librrd is not thread safe. (cherry picked from commit ef43260cd901847220c2a9de400579ff903ca13e) Conflicts: src/Makefile.am --- configure.ac | 122 ++++++++++++++++++++++++++++++++++++-------------------- src/Makefile.am | 8 ++-- 2 files changed, 82 insertions(+), 48 deletions(-) diff --git a/configure.ac b/configure.ac index f4d7873f..b78dd11b 100644 --- a/configure.ac +++ b/configure.ac @@ -3806,68 +3806,102 @@ AM_CONDITIONAL(BUILD_WITH_LIBROUTEROS, test "x$with_librouteros" = "xyes") # }}} # --with-librrd {{{ -# AC_ARG_WITH (package, help-string, [action-if-given], [action-if-not-given]) librrd_cflags="" librrd_ldflags="" -librrd_threadsafe="yes" +librrd_threadsafe="no" librrd_rrdc_update="no" -AC_ARG_WITH(librrd, [AS_HELP_STRING([--with-librrd@<:@=PREFIX@:>@], [Path to rrdtool.])], -[ if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - librrd_cflags="-I$withval/include" - librrd_ldflags="-L$withval/lib" - with_librrd="yes" - else - with_librrd="$withval" - fi -], [with_librrd="yes"]) +AC_ARG_WITH(librrd, + [AS_HELP_STRING([--with-librrd@<:@=PREFIX@:>@], [Path to rrdtool.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes" + then + librrd_cflags="-I$withval/include" + librrd_ldflags="-L$withval/lib" + with_librrd="yes" + else + with_librrd="$withval" + fi + ], + [with_librrd="yes"] +) + if test "x$with_librrd" = "xyes" then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $librrd_cflags" + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $librrd_ldflags" + PKG_CHECK_MODULES([RRD], [librrd >= 1.6.0], + [ + AC_CHECK_LIB([rrd], [rrd_update_r], + [librrd_threadsafe="yes"], + [:] + ) + AC_CHECK_LIB([rrd], [rrdc_update], + [librrd_rrdc_update="yes"], + [:] + ) + ],[:] + ) + LDFLAGS="$SAVE_LDFLAGS" - AC_CHECK_HEADERS(rrd.h,, [with_librrd="no (rrd.h not found)"]) + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $RRD_CFLAGS $librrd_cflags" - CPPFLAGS="$SAVE_CPPFLAGS" + AC_CHECK_HEADERS([rrd.h],, [with_librrd="no (rrd.h not found)"]) + + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_librrd" = "xyes" + +if test "x$with_librrd" = "xyes" && test "x$librrd_threadsafe" = "xno" then - SAVE_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $librrd_ldflags" + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $librrd_ldflags" - AC_CHECK_LIB(rrd_th, rrd_update_r, - [with_librrd="yes" - librrd_ldflags="$librrd_ldflags -lrrd_th" - ], - [librrd_threadsafe="no" - AC_CHECK_LIB(rrd, rrd_update, - [with_librrd="yes" - librrd_ldflags="$librrd_ldflags -lrrd" - ], - [with_librrd="no (symbol 'rrd_update' not found)"] - ) - ] - ) + AC_CHECK_LIB([rrd_th], [rrd_update_r], + [ + librrd_ldflags="$librrd_ldflags -lrrd_th" + librrd_threadsafe="yes" + AC_CHECK_LIB([rrd_th], [rrdc_update], + [librrd_rrdc_update="yes"], + [:], + ) + ], + [:] + ) + LDFLAGS="$SAVE_LDFLAGS" +fi - if test "x$librrd_threadsafe" = "xyes" - then - AC_CHECK_LIB(rrd_th, rrdc_update, [librrd_rrdc_update="yes"], [librrd_rrdc_update="no"]) - else - AC_CHECK_LIB(rrd, rrdc_update, [librrd_rrdc_update="yes"], [librrd_rrdc_update="no"]) - fi +if test "x$with_librrd" = "xyes" && test "x$librrd_threadsafe" = "xno" +then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $librrd_ldflags" - LDFLAGS="$SAVE_LDFLAGS" + AC_CHECK_LIB([rrd], [rrd_update], + [ + librrd_ldflags="$librrd_ldflags -lrrd" + AC_CHECK_LIB([rrd], [rrdc_update], + [librrd_rrdc_update="yes"], + [:] + ) + ], + [with_librrd="no (symbol 'rrd_update' not found)"] + ) + LDFLAGS="$SAVE_LDFLAGS" fi + if test "x$with_librrd" = "xyes" then - BUILD_WITH_LIBRRD_CFLAGS="$librrd_cflags" - BUILD_WITH_LIBRRD_LDFLAGS="$librrd_ldflags" - AC_SUBST(BUILD_WITH_LIBRRD_CFLAGS) - AC_SUBST(BUILD_WITH_LIBRRD_LDFLAGS) + BUILD_WITH_LIBRRD_CFLAGS="$RRD_CFLAGS $librrd_cflags" + BUILD_WITH_LIBRRD_LDFLAGS="$librrd_ldflags" + BUILD_WITH_LIBRRD_LIBS="$RRD_LIBS" + AC_SUBST(BUILD_WITH_LIBRRD_CFLAGS) + AC_SUBST(BUILD_WITH_LIBRRD_LDFLAGS) + AC_SUBST(BUILD_WITH_LIBRRD_LIBS) fi if test "x$librrd_threadsafe" = "xyes" then - AC_DEFINE(HAVE_THREADSAFE_LIBRRD, 1, [Define to 1 if you have the threadsafe rrd library (-lrrd_th).]) + AC_DEFINE([HAVE_THREADSAFE_LIBRRD], [1], + [Define to 1 if the rrd library is thread-safe] + ) fi # }}} diff --git a/src/Makefile.am b/src/Makefile.am index ad8de2b2..7f2c8862 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1032,9 +1032,9 @@ endif if BUILD_PLUGIN_RRDCACHED pkglib_LTLIBRARIES += rrdcached.la rrdcached_la_SOURCES = rrdcached.c utils_rrdcreate.c utils_rrdcreate.h -rrdcached_la_LDFLAGS = -module -avoid-version +rrdcached_la_LDFLAGS = -module -avoid-version $(BUILD_WITH_LIBRRD_LDFLAGS) rrdcached_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBRRD_CFLAGS) -rrdcached_la_LIBADD = $(BUILD_WITH_LIBRRD_LDFLAGS) +rrdcached_la_LIBADD = $(BUILD_WITH_LIBRRD_LIBS) collectd_LDADD += "-dlopen" rrdcached.la collectd_DEPENDENCIES += rrdcached.la endif @@ -1042,9 +1042,9 @@ endif if BUILD_PLUGIN_RRDTOOL pkglib_LTLIBRARIES += rrdtool.la rrdtool_la_SOURCES = rrdtool.c utils_rrdcreate.c utils_rrdcreate.h -rrdtool_la_LDFLAGS = -module -avoid-version +rrdtool_la_LDFLAGS = -module -avoid-version $(BUILD_WITH_LIBRRD_LDFLAGS) rrdtool_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBRRD_CFLAGS) -rrdtool_la_LIBADD = $(BUILD_WITH_LIBRRD_LDFLAGS) +rrdtool_la_LIBADD = $(BUILD_WITH_LIBRRD_LIBS) collectd_LDADD += "-dlopen" rrdtool.la collectd_DEPENDENCIES += rrdtool.la endif -- 2.11.0