From 1904e2fc786dbc037039d284b371730777277fc5 Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Wed, 18 May 2016 16:03:34 +0300 Subject: [PATCH] Make libbsd optional Also use setproctitle properly if libbsd is indeed used. --- m4/arc4random.m4 | 30 ++++++++++++++++++++++-------- src/lib-master/master-service.c | 2 +- src/lib/process-title.c | 9 ++++++++- src/lib/process-title.h | 2 +- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/m4/arc4random.m4 b/m4/arc4random.m4 index a4540c6ec1..56471f025e 100644 --- a/m4/arc4random.m4 +++ b/m4/arc4random.m4 @@ -1,11 +1,25 @@ +AC_ARG_WITH( + [libbsd], + AS_HELP_STRING( + [--with-libbsd], + [Use libbsd (default is no)] + ), + [want_libbsd=yes], + [want_libbsd=no] +) + AC_DEFUN([DOVECOT_ARC4RANDOM], [ - AC_CHECK_FUNC([arc4random], [ - AC_DEFINE([HAVE_ARC4RANDOM], [1], [Define this if you arc4random()]) - ], [ - AC_CHECK_LIB([bsd], [arc4random], [ - LIBS="$LIBS -lbsd" - AC_DEFINE([HAVE_ARC4RANDOM], [1], [Define this if you arc4random()]) - AC_DEFINE([HAVE_LIBBSD], [1], [Define this if you have libbsd]) - ]) + AC_ARG_WITH([libbsd], AS_HELP_STRING( + [--with-libbsd], + [Use libbsd (default is no)] + ), [want_libbsd=$withval], [want_libbsd=no]) + AC_CHECK_FUNC([arc4random], AC_DEFINE([HAVE_ARC4RANDOM], [1], [Define this if you arc4random()]), [ + if test "$want_libbsd" = yes; then + AC_CHECK_LIB([bsd], [arc4random], [ + LIBS="$LIBS -lbsd" + AC_DEFINE([HAVE_ARC4RANDOM], [1], [Define this if you arc4random()]) + AC_DEFINE([HAVE_LIBBSD], [1], [Define this if you have libbsd]) + ]) + fi ]) ]) diff --git a/src/lib-master/master-service.c b/src/lib-master/master-service.c index 76cf50ed08..f0e5ffc1b9 100644 --- a/src/lib-master/master-service.c +++ b/src/lib-master/master-service.c @@ -190,7 +190,7 @@ master_service_init(const char *name, enum master_service_flags flags, if (getenv(MASTER_UID_ENV) == NULL) flags |= MASTER_SERVICE_FLAG_STANDALONE; - process_title_init(argv); + process_title_init(*argc, argv); service = i_new(struct master_service, 1); service->argc = *argc; diff --git a/src/lib/process-title.c b/src/lib/process-title.c index 14d203e8d1..5636944f5c 100644 --- a/src/lib/process-title.c +++ b/src/lib/process-title.c @@ -4,7 +4,11 @@ #include "env-util.h" #include "process-title.h" +#ifdef HAVE_LIBBSD +#include +#else #include /* FreeBSD */ +#endif static char *process_name = NULL; @@ -114,7 +118,7 @@ static void proctitle_hack_set(const char *title) #endif -void process_title_init(char **argv[]) +void process_title_init(int argc, char **argv[]) { #ifdef PROCTITLE_HACK char ***environ_p = env_get_environ_p(); @@ -124,6 +128,9 @@ void process_title_init(char **argv[]) *argv = argv_dup(orig_argv, &argv_memblock); *environ_p = argv_dup(orig_environ, &environ_memblock); proctitle_hack_init(orig_argv, orig_environ); +#endif +#ifdef HAVE_LIBBSD + setproctitle_init(argc, *argv, *env_get_environ_p()); #endif process_name = (*argv)[0]; } diff --git a/src/lib/process-title.h b/src/lib/process-title.h index 94f95a32d9..833a79eace 100644 --- a/src/lib/process-title.h +++ b/src/lib/process-title.h @@ -2,7 +2,7 @@ #define PROCESS_TITLE_H /* Initialize title changing. */ -void process_title_init(char **argv[]); +void process_title_init(int argc, char **argv[]); /* Change the process title if possible. */ void process_title_set(const char *title); -- 2.47.3