From cd8c7245e4f50269ec62b36cb56ef21e659c7578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= Date: Wed, 24 Feb 2016 02:12:34 +0100 Subject: [PATCH 3/6] Feature: alternative range2random provider: glib Also check if cl_rand_from_interval is actually defined in (not the case with older glue/plumb lib). --- booth.spec | 2 ++ configure.ac | 24 ++++++++++++++++++++++++ src/Makefile.am | 8 ++++++++ src/alt/range2random_glib.c | 33 +++++++++++++++++++++++++++++++++ src/alt/range2random_glib.h | 22 ++++++++++++++++++++++ src/ticket.c | 6 +++++- 6 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 src/alt/range2random_glib.c create mode 100644 src/alt/range2random_glib.h diff --git a/booth.spec b/booth.spec index cc73af2..b88ff4c 100644 --- a/booth.spec +++ b/booth.spec @@ -69,6 +69,8 @@ BuildRequires: libglue-devel %else # logging provider BuildRequires: pkgconfig(libqb) +# random2range provider +BuildRequires: pkgconfig(glib-2.0) %endif BuildRequires: libxml2-devel BuildRequires: zlib-devel diff --git a/configure.ac b/configure.ac index 32a7dd1..10e131d 100644 --- a/configure.ac +++ b/configure.ac @@ -245,6 +245,29 @@ libqb) esac AM_CONDITIONAL([LOGGING_LIBQB], [test "x$logging_provider" = "xlibqb"]) +# figure out range2random provider +range2random_provider="" +if test "x$range2random_provider" = "x" && test "x$with_glue" = "xyes"; then + AC_CHECK_LIB([plumb], [get_next_random], [range2random_provider="libplumb"]) + AC_CHECK_DECL([cl_rand_from_interval], [], [range2random_provider=""], + [#include ]) +fi +if test "x$range2random_provider" = "x" && test "x$with_glue" = "xno"; then + AC_CHECK_LIB([glib-2.0], [g_random_int_range], [range2random_provider="glib"]) +fi +case "$range2random_provider" in +libplumb) + ;; +glib) + PKG_CHECK_MODULES([GLIB], [glib-2.0]) + AC_DEFINE([RANGE2RANDOM_GLIB], [], [use glib as a range2random provider]) + ;; +*) + AC_MSG_ERROR([range2random provider required (libplumb, or glib when --without-glue)]) + ;; +esac +AM_CONDITIONAL([RANGE2RANDOM_GLIB], [test "x$range2random_provider" = "xglib"]) + # OS detection # THIS SECTION MUST DIE! CP=cp @@ -474,6 +497,7 @@ AC_MSG_RESULT([ booth config dir = ${BOOTHSYSCONFDIR}]) AC_MSG_RESULT([ SOCKETDIR = ${SOCKETDIR}]) AC_MSG_RESULT([ Features = ${PACKAGE_FEATURES}]) AC_MSG_RESULT([ Logging provider = ${logging_provider}]) +AC_MSG_RESULT([ Range2random provider = ${range2random_provider}]) AC_MSG_RESULT([]) AC_MSG_RESULT([$PACKAGE build info:]) AC_MSG_RESULT([ Library SONAME = ${SONAME}]) diff --git a/src/Makefile.am b/src/Makefile.am index 49c3ac4..317710e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -33,5 +33,13 @@ boothd_SOURCES += alt/logging_libqb.c noinst_HEADERS += alt/logging_libqb.h endif +if !RANGE2RANDOM_GLIB +boothd_LDADD += -lplumb +else +boothd_LDADD += $(GLIB_LIBS) +boothd_SOURCES += alt/range2random_glib.c +noinst_HEADERS += alt/range2random_glib.h +endif + lint: -splint $(INCLUDES) $(LINT_FLAGS) $(CFLAGS) *.c diff --git a/src/alt/range2random_glib.c b/src/alt/range2random_glib.c new file mode 100644 index 0000000..8363559 --- /dev/null +++ b/src/alt/range2random_glib.c @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2016 Jan Pokorny + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include + +#include "range2random_glib.h" +#include "ticket.h" + +int +alt_glib_rand_from_interval(int from, int to) +{ + assert(from >= 0 && from < to); + assert(sizeof(to) <= sizeof(gint32) || (to < 0x7fffffff)); + return (int) g_random_int_range(from, to); +} diff --git a/src/alt/range2random_glib.h b/src/alt/range2random_glib.h new file mode 100644 index 0000000..4b87c46 --- /dev/null +++ b/src/alt/range2random_glib.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2016 Jan Pokorny + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +int alt_glib_rand_from_interval(int from, int to); + +#define cl_rand_from_interval(from, to) \ + alt_glib_rand_from_interval(from, to) diff --git a/src/ticket.c b/src/ticket.c index 09743f7..8d4cc12 100644 --- a/src/ticket.c +++ b/src/ticket.c @@ -25,8 +25,12 @@ #include #include #include -#include #include "b_config.h" +#ifndef RANGE2RANDOM_GLIB +#include +#else +#include "alt/range2random_glib.h" +#endif #include "ticket.h" #include "config.h" #include "pacemaker.h" -- 2.4.11