From b98cbcdfa0c86e900bd21fc2739056f667dac450 Mon Sep 17 00:00:00 2001 From: Alexander Bokovoy Date: Sat, 25 Apr 2015 09:23:07 +0300 Subject: [PATCH] Fix build with systemd libraries systemd-related fixes did not land in Samba 4.2.1 release, they are in v4-2-test branch _past_ 4.2.1 release. We need to keep going with a local patch until 4.2.2 release. --- ...l-fix-detection-of-systemd-libraries.patch | 236 ++++++++++++++++++ samba.spec | 7 +- 2 files changed, 242 insertions(+), 1 deletion(-) create mode 100644 samba-4.2.2-lib-util-fix-detection-of-systemd-libraries.patch diff --git a/samba-4.2.2-lib-util-fix-detection-of-systemd-libraries.patch b/samba-4.2.2-lib-util-fix-detection-of-systemd-libraries.patch new file mode 100644 index 0000000..deb25bf --- /dev/null +++ b/samba-4.2.2-lib-util-fix-detection-of-systemd-libraries.patch @@ -0,0 +1,236 @@ +From 9cad09f8df8e080189fe274a6032c8fa70f0c2aa Mon Sep 17 00:00:00 2001 +From: Christof Schmitt +Date: Fri, 20 Mar 2015 12:13:14 -0700 +Subject: [PATCH 1/2] build: Move systemd checks to lib/util + +Only lib/util uses the systemd library, so it makes sense to have the +checks there. This also removes the need for the ctdb build script to +specify an empty tag for the systemd library. + +Signed-off-by: Christof Schmitt +Reviewed-by: Amitay Isaacs + +(cherry picked from commit 0509790ec3696e09f6d5e6db969e46e8fd975efb) +--- + ctdb/wscript | 2 -- + lib/util/wscript | 8 ++++++++ + lib/util/wscript_configure | 14 ++++++++++++++ + wscript | 22 ---------------------- + 4 files changed, 22 insertions(+), 24 deletions(-) + +diff --git a/ctdb/wscript b/ctdb/wscript +index 3e2a992..6f5f469 100755 +--- a/ctdb/wscript ++++ b/ctdb/wscript +@@ -212,8 +212,6 @@ def configure(conf): + conf.ADD_EXTRA_INCLUDES('#ctdb') + conf.ADD_EXTRA_INCLUDES('#lib #lib/replace') + +- conf.SET_TARGET_TYPE('systemd-daemon', 'EMPTY') +- + del(conf.env.defines['PYTHONDIR']) + del(conf.env.defines['PYTHONARCHDIR']) + +diff --git a/lib/util/wscript b/lib/util/wscript +index d296e75..2371689 100644 +--- a/lib/util/wscript ++++ b/lib/util/wscript +@@ -1,3 +1,11 @@ + def set_options(opt): + ''' This is a bit strange, but disable is the flag, not enable. ''' + opt.add_option('--disable-fault-handling', action='store_true', dest='disable_fault_handling', help=('disable the fault handlers'), default=False) ++ ++ opt.add_option('--with-systemd', ++ help=("Enable systemd integration"), ++ action='store_true', dest='enable_systemd') ++ ++ opt.add_option('--without-systemd', ++ help=("Disable systemd integration"), ++ action='store_false', dest='enable_systemd') +diff --git a/lib/util/wscript_configure b/lib/util/wscript_configure +index 1270ab3..1cfba3e 100644 +--- a/lib/util/wscript_configure ++++ b/lib/util/wscript_configure +@@ -99,3 +99,17 @@ conf.CHECK_CODE('struct statvfs buf; buf.f_flags = 0', + headers='sys/statvfs.h', + local_include=False, + execute=False) ++ ++if Options.options.enable_systemd != False: ++ conf.CHECK_CFG(package='libsystemd-daemon', args='--cflags --libs', ++ msg='Checking for libsystemd-daemon', uselib_store="SYSTEMD-DAEMON") ++ conf.CHECK_HEADERS('systemd/sd-daemon.h', lib='systemd-daemon') ++ conf.CHECK_LIB('systemd-daemon', shlib=True) ++ ++if (conf.CONFIG_SET('HAVE_SYSTEMD_SD_DAEMON_H') and ++ conf.CONFIG_SET('HAVE_LIBSYSTEMD_DAEMON')): ++ conf.DEFINE('HAVE_SYSTEMD', '1') ++ conf.env['ENABLE_SYSTEMD'] = True ++else: ++ conf.SET_TARGET_TYPE('systemd-daemon', 'EMPTY') ++ conf.undefine('HAVE_SYSTEMD') +diff --git a/wscript b/wscript +index ad2e2a8..f4241f1 100644 +--- a/wscript ++++ b/wscript +@@ -70,14 +70,6 @@ def set_options(opt): + help=("Disable RELRO builds"), + action="store_false", dest='enable_relro') + +- opt.add_option('--with-systemd', +- help=("Enable systemd integration"), +- action='store_true', dest='enable_systemd') +- +- opt.add_option('--without-systemd', +- help=("Disable systemd integration"), +- action='store_false', dest='enable_systemd') +- + gr = opt.option_group('developer options') + + opt.tool_options('python') # options for disabling pyc or pyo compilation +@@ -214,20 +206,6 @@ def configure(conf): + msg="Checking compiler for full RELRO support"): + conf.env['ENABLE_RELRO'] = True + +- if Options.options.enable_systemd != False: +- conf.check_cfg(package='libsystemd-daemon', args='--cflags --libs', +- msg='Checking for libsystemd-daemon', uselib_store="SYSTEMD-DAEMON") +- conf.CHECK_HEADERS('systemd/sd-daemon.h', lib='systemd-daemon') +- conf.CHECK_LIB('systemd-daemon', shlib=True) +- +- if (conf.CONFIG_SET('HAVE_SYSTEMD_SD_DAEMON_H') and +- conf.CONFIG_SET('HAVE_LIBSYSTEMD_DAEMON')): +- conf.DEFINE('HAVE_SYSTEMD', '1') +- conf.env['ENABLE_SYSTEMD'] = True +- else: +- conf.SET_TARGET_TYPE('systemd-daemon', 'EMPTY') +- conf.undefine('HAVE_SYSTEMD') +- + conf.SAMBA_CONFIG_H('include/config.h') + + def etags(ctx): +-- +2.3.5 + + +From 42e03b23cf8850cfb6df383a6b69627ffe1ce369 Mon Sep 17 00:00:00 2001 +From: Andreas Schneider +Date: Tue, 7 Apr 2015 16:30:30 +0200 +Subject: [PATCH 2/2] waf: Fix systemd detection + +https://bugzilla.samba.org/show_bug.cgi?id=11200 + +Signed-off-by: Andreas Schneider +Reviewed-by: Alexander Bokovoy + +(cherry picked from commit 5ee27b4ead57c15db7168d80f6fdf821663c44fc) +--- + lib/util/become_daemon.c | 12 ++++++------ + lib/util/wscript_build | 2 +- + lib/util/wscript_configure | 27 +++++++++++++++------------ + 3 files changed, 22 insertions(+), 19 deletions(-) + +diff --git a/lib/util/become_daemon.c b/lib/util/become_daemon.c +index 78bebfc..4622971 100644 +--- a/lib/util/become_daemon.c ++++ b/lib/util/become_daemon.c +@@ -24,7 +24,7 @@ + #include "includes.h" + #include "system/filesys.h" + #include "system/locale.h" +-#if HAVE_SYSTEMD ++#if HAVE_LIBSYSTEMD_DAEMON + #include + #endif + #include "lib/util/close_low_fd.h" +@@ -69,9 +69,9 @@ _PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout + if (do_fork) { + newpid = fork(); + if (newpid) { +-#if HAVE_SYSTEMD ++#if HAVE_LIBSYSTEMD_DAEMON + sd_notifyf(0, "READY=0\nSTATUS=Starting process...\nMAINPID=%lu", (unsigned long) newpid); +-#endif /* HAVE_SYSTEMD */ ++#endif /* HAVE_LIBSYSTEMD_DAEMON */ + _exit(0); + } + } +@@ -98,7 +98,7 @@ _PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout + + _PUBLIC_ void exit_daemon(const char *msg, int error) + { +-#ifdef HAVE_SYSTEMD ++#ifdef HAVE_LIBSYSTEMD_DAEMON + if (msg == NULL) { + msg = strerror(error); + } +@@ -117,7 +117,7 @@ _PUBLIC_ void daemon_ready(const char *name) + if (name == NULL) { + name = "Samba"; + } +-#ifdef HAVE_SYSTEMD ++#ifdef HAVE_LIBSYSTEMD_DAEMON + sd_notifyf(0, "READY=1\nSTATUS=%s: ready to serve connections...", name); + #endif + DEBUG(0, ("STATUS=daemon '%s' finished starting up and ready to serve " +@@ -129,7 +129,7 @@ _PUBLIC_ void daemon_status(const char *name, const char *msg) + if (name == NULL) { + name = "Samba"; + } +-#ifdef HAVE_SYSTEMD ++#ifdef HAVE_LIBSYSTEMD_DAEMON + sd_notifyf(0, "\nSTATUS=%s: %s", name, msg); + #endif + DEBUG(0, ("STATUS=daemon '%s' : %s", name, msg)); +diff --git a/lib/util/wscript_build b/lib/util/wscript_build +index 5db7e35..cb9e8e5 100755 +--- a/lib/util/wscript_build ++++ b/lib/util/wscript_build +@@ -54,7 +54,7 @@ if not bld.env.SAMBA_UTIL_CORE_ONLY: + tevent_debug.c util_process.c memcache.c''', + deps='samba-util-core DYNCONFIG close-low-fd tini tiniparser', + +- public_deps='talloc tevent execinfo pthread LIBCRYPTO charset util_setid systemd-daemon', ++ public_deps='talloc tevent execinfo pthread LIBCRYPTO charset util_setid systemd systemd-daemon', + public_headers='debug.h attr.h byteorder.h data_blob.h memory.h safe_string.h time.h talloc_stack.h xfile.h dlinklist.h samba_util.h string_wrappers.h idtree.h idtree_random.h blocking.h signal.h substitute.h fault.h', + header_path= [ ('dlinklist.h samba_util.h', '.'), ('*', 'util') ], + local_include=False, +diff --git a/lib/util/wscript_configure b/lib/util/wscript_configure +index 1cfba3e..8d8dc87 100644 +--- a/lib/util/wscript_configure ++++ b/lib/util/wscript_configure +@@ -100,16 +100,19 @@ conf.CHECK_CODE('struct statvfs buf; buf.f_flags = 0', + local_include=False, + execute=False) + ++# ++# systemd removed the libsystemd-daemon and libsystemd-journal libraries. In newer ++# versions it is only libsystemd. As waf pkg-config handling does not provide ++# targets which could be used as a dependency based on the package name we need ++# to look for them on our own. This enabled one of the library targets based on ++# which version we detect. ++# ++conf.SET_TARGET_TYPE('systemd-daemon', 'EMPTY') ++conf.SET_TARGET_TYPE('systemd-journal', 'EMPTY') ++conf.SET_TARGET_TYPE('systemd', 'EMPTY') ++ + if Options.options.enable_systemd != False: +- conf.CHECK_CFG(package='libsystemd-daemon', args='--cflags --libs', +- msg='Checking for libsystemd-daemon', uselib_store="SYSTEMD-DAEMON") +- conf.CHECK_HEADERS('systemd/sd-daemon.h', lib='systemd-daemon') +- conf.CHECK_LIB('systemd-daemon', shlib=True) +- +-if (conf.CONFIG_SET('HAVE_SYSTEMD_SD_DAEMON_H') and +- conf.CONFIG_SET('HAVE_LIBSYSTEMD_DAEMON')): +- conf.DEFINE('HAVE_SYSTEMD', '1') +- conf.env['ENABLE_SYSTEMD'] = True +-else: +- conf.SET_TARGET_TYPE('systemd-daemon', 'EMPTY') +- conf.undefine('HAVE_SYSTEMD') ++ conf.check_cfg(package='libsystemd-daemon', args='--cflags --libs', ++ msg='Checking for libsystemd-daemon') ++ if not conf.CHECK_LIB('systemd-daemon', shlib=True): ++ conf.CHECK_LIB('systemd', shlib=True) +-- +2.3.5 + diff --git a/samba.spec b/samba.spec index d2a4fda..3c11e09 100644 --- a/samba.spec +++ b/samba.spec @@ -6,7 +6,7 @@ # ctdb is enabled by default, you can disable it with: --without clustering %bcond_without clustering -%define main_release 3 +%define main_release 4 %define samba_version 4.2.1 %define talloc_version 2.1.2 @@ -93,6 +93,7 @@ URL: http://www.samba.org/ Source0: samba-%{version}%{pre_release}.tar.xz Patch0: samba-4.2.2-fix_debug_macro.patch +Patch1: samba-4.2.2-lib-util-fix-detection-of-systemd-libraries.patch # Red Hat specific replacement-files Source1: samba.log @@ -642,6 +643,7 @@ and use CTDB instead. %setup -q -n samba-%{version}%{pre_release} %patch0 -p1 -b .samba-4.2.2-fix_debug_macro.patch +%patch1 -p1 -b .samba-4.2.2-lib-util-fix-detection-of-systemd-libraries.patch %build %global _talloc_lib ,talloc,pytalloc,pytalloc-util @@ -1930,6 +1932,9 @@ rm -rf %{buildroot} %endif # with_clustering_support %changelog +* Sat Apr 25 2015 Alexander Bokovoy - 4.2.1-4 +- Fix systemd library detection (incomplete patch upstream) + * Fri Apr 24 2015 Andreas Schneider - 4.2.1-3 - resolves: #1214973 - Fix libwbclient alternatives link.