[systemd-commits] Makefile.am src/compat-libs src/libsystemd src/libsystemd-daemon src/systemd

Kay Sievers kay at kemper.freedesktop.org
Wed Feb 19 01:09:23 CET 2014


 Makefile.am                                   |  171 ++-----
 src/compat-libs/libsystemd-daemon.pc.in       |   19 
 src/compat-libs/libsystemd-daemon.sym         |   32 +
 src/libsystemd-daemon/.gitignore              |    1 
 src/libsystemd-daemon/Makefile                |    1 
 src/libsystemd-daemon/libsystemd-daemon.pc.in |   19 
 src/libsystemd-daemon/libsystemd-daemon.sym   |   32 -
 src/libsystemd-daemon/sd-daemon.c             |  587 --------------------------
 src/libsystemd/libsystemd.sym                 |   15 
 src/libsystemd/sd-daemon/sd-daemon.c          |  537 +++++++++++++++++++++++
 src/systemd/sd-daemon.h                       |   42 -
 src/systemd/sd-readahead.h                    |    2 
 12 files changed, 655 insertions(+), 803 deletions(-)

New commits:
commit 0ebee8818404adb95a0b8a01416aad3a16f64ae1
Author: Kay Sievers <kay at vrfy.org>
Date:   Tue Feb 18 18:50:11 2014 +0100

    build-sys: merge libsystemd-daemon into libsystemd

diff --git a/Makefile.am b/Makefile.am
index e9fca3f..9135326 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -48,7 +48,7 @@ LIBSYSTEMD_LOGIN_REVISION=2
 LIBSYSTEMD_LOGIN_AGE=9
 
 LIBSYSTEMD_DAEMON_CURRENT=0
-LIBSYSTEMD_DAEMON_REVISION=10
+LIBSYSTEMD_DAEMON_REVISION=11
 LIBSYSTEMD_DAEMON_AGE=0
 
 LIBSYSTEMD_ID128_CURRENT=0
@@ -1022,7 +1022,6 @@ libsystemd_core_la_LIBADD = \
 	libsystemd-capability.la \
 	libsystemd-units.la \
 	libsystemd-label.la \
-	libsystemd-daemon-internal.la \
 	libudev-internal.la \
 	libsystemd-shared.la \
 	libsystemd-internal.la \
@@ -1342,7 +1341,7 @@ test_daemon_SOURCES = \
 	src/test/test-daemon.c
 
 test_daemon_LDADD = \
-	libsystemd-daemon-internal.la \
+	libsystemd-internal.la \
 	libsystemd-shared.la
 
 test_cgroup_SOURCES = \
@@ -1368,7 +1367,7 @@ test_cgroup_util_SOURCES = \
 
 test_cgroup_util_LDADD = \
 	libsystemd-label.la \
-	libsystemd-daemon-internal.la \
+	libsystemd-internal.la \
 	libsystemd-shared.la
 
 test_env_replace_SOURCES = \
@@ -1473,7 +1472,6 @@ systemd_analyze_SOURCES = \
 
 systemd_analyze_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
@@ -1482,7 +1480,6 @@ systemd_initctl_SOURCES = \
 
 systemd_initctl_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
@@ -1495,7 +1492,6 @@ systemd_update_utmp_CFLAGS = \
 
 systemd_update_utmp_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	$(AUDIT_LIBS)
 
@@ -1505,7 +1501,7 @@ systemd_shutdownd_SOURCES = \
 
 systemd_shutdownd_LDADD = \
 	libsystemd-label.la \
-	libsystemd-daemon-internal.la \
+	libsystemd-internal.la \
 	libsystemd-shared.la
 
 dist_doc_DATA += \
@@ -1646,7 +1642,6 @@ systemd_fsck_SOURCES = \
 
 systemd_fsck_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libudev-internal.la \
 	libsystemd-shared.la
 
@@ -1725,8 +1720,7 @@ bootctl_SOURCES = \
 
 bootctl_LDADD = \
 	libsystemd-shared.la \
-	libsystemd-internal.la \
-	libsystemd-daemon-internal.la
+	libsystemd-internal.la
 
 bin_PROGRAMS += \
 	bootctl
@@ -1804,7 +1798,6 @@ systemd_cgroups_agent_SOURCES = \
 
 systemd_cgroups_agent_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
@@ -1817,7 +1810,6 @@ systemctl_LDADD = \
 	libsystemd-internal.la \
 	libsystemd-logs.la \
 	libsystemd-journal-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
@@ -1826,7 +1818,7 @@ systemd_notify_SOURCES = \
 	src/readahead/sd-readahead.c
 
 systemd_notify_LDADD = \
-	libsystemd-daemon-internal.la \
+	libsystemd-internal.la \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
@@ -1874,7 +1866,6 @@ systemd_nspawn_LDADD = \
 	libsystemd-label.la \
 	libsystemd-capability.la \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libudev-internal.la \
 	libsystemd-shared.la \
 	libsystemd-seccomp.la \
@@ -1888,7 +1879,6 @@ systemd_run_LDADD = \
 	libsystemd-label.la \
 	libsystemd-capability.la \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
@@ -1897,7 +1887,6 @@ systemd_bus_proxyd_SOURCES = \
 
 systemd_bus_proxyd_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 bus-proxyd-install-hook:
@@ -1934,56 +1923,6 @@ systemd_tty_ask_password_agent_LDADD = \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
-libsystemd_daemon_la_SOURCES = \
-	src/libsystemd-daemon/libsystemd-daemon.sym \
-	src/libsystemd-daemon/sd-daemon.c
-
-libsystemd_daemon_internal_la_SOURCES = \
-	$(libsystemd_daemon_la_SOURCES)
-
-libsystemd_daemon_internal_la_CPPFLAGS = \
-	$(AM_CPPFLAGS) \
-	-DSD_DAEMON_DISABLE_MQ
-
-libsystemd_daemon_la_CFLAGS = \
-	$(AM_CFLAGS) \
-	-fvisibility=hidden \
-	-DSD_EXPORT_SYMBOLS
-
-libsystemd_daemon_la_LDFLAGS = \
-	$(AM_LDFLAGS) \
-	-version-info $(LIBSYSTEMD_DAEMON_CURRENT):$(LIBSYSTEMD_DAEMON_REVISION):$(LIBSYSTEMD_DAEMON_AGE) \
-	-Wl,--version-script=$(top_srcdir)/src/libsystemd-daemon/libsystemd-daemon.sym
-
-libsystemd_daemon_la_LIBADD =  \
-	$(RT_LIBS)
-
-pkginclude_HEADERS += \
-	src/systemd/sd-daemon.h
-
-# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
-libsystemd-daemon-install-hook:
-	libname=libsystemd-daemon.so && $(move-to-rootlibdir)
-
-libsystemd-daemon-uninstall-hook:
-	rm -f $(DESTDIR)$(rootlibdir)/libsystemd-daemon.so*
-
-INSTALL_EXEC_HOOKS += libsystemd-daemon-install-hook
-UNINSTALL_EXEC_HOOKS += libsystemd-daemon-uninstall-hook
-
-lib_LTLIBRARIES += \
-	libsystemd-daemon.la
-
-noinst_LTLIBRARIES += \
-	libsystemd-daemon-internal.la
-
-pkgconfiglib_DATA += \
-	src/libsystemd-daemon/libsystemd-daemon.pc
-
-EXTRA_DIST += \
-	src/libsystemd-daemon/libsystemd-daemon.pc.in
-
-# ------------------------------------------------------------------------------
 libsystemd_la_SOURCES = \
 	src/libsystemd/libsystemd.sym \
 	src/systemd/sd-bus.h \
@@ -1996,6 +1935,7 @@ libsystemd_la_SOURCES = \
 	src/systemd/sd-resolve.h \
 	src/systemd/sd-login.h \
 	src/systemd/sd-id128.h \
+	src/systemd/sd-daemon.h \
 	src/libsystemd/sd-bus/sd-bus.c \
 	src/libsystemd/sd-bus/bus-control.c \
 	src/libsystemd/sd-bus/bus-control.h \
@@ -2044,6 +1984,7 @@ libsystemd_la_SOURCES = \
 	src/libsystemd/sd-resolve/sd-resolve.c \
 	src/libsystemd/sd-resolve/resolve-util.h \
 	src/libsystemd/sd-id128/sd-id128.c \
+	src/libsystemd/sd-daemon/sd-daemon.c \
 	src/login/sd-login.c \
 	src/login/login-shared.c \
 	src/login/login-shared.h
@@ -2052,8 +1993,8 @@ nodist_libsystemd_la_SOURCES = \
 	src/libsystemd/sd-bus/bus-error-mapping.c
 
 libsystemd_la_LIBADD = \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
+	$(RT_LIBS)
 	-lresolv
 
 libsystemd_la_CFLAGS = \
@@ -2136,7 +2077,6 @@ test_bus_marshal_SOURCES = \
 
 test_bus_marshal_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	libsystemd-dump.la \
 	libsystemd-capability.la \
@@ -2166,7 +2106,6 @@ test_bus_chat_CFLAGS = \
 
 test_bus_chat_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_bus_cleanup_SOURCES = \
@@ -2174,7 +2113,6 @@ test_bus_cleanup_SOURCES = \
 
 test_bus_cleanup_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_bus_server_SOURCES = \
@@ -2186,7 +2124,6 @@ test_bus_server_CFLAGS = \
 
 test_bus_server_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_bus_objects_SOURCES = \
@@ -2199,7 +2136,6 @@ test_bus_objects_CFLAGS = \
 
 test_bus_objects_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	libsystemd-dump.la \
 	libsystemd-capability.la \
@@ -2210,7 +2146,6 @@ test_bus_error_SOURCES = \
 
 test_bus_error_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_bus_gvariant_SOURCES = \
@@ -2218,7 +2153,6 @@ test_bus_gvariant_SOURCES = \
 
 test_bus_gvariant_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	libsystemd-dump.la \
 	libsystemd-capability.la \
@@ -2235,7 +2169,6 @@ test_bus_creds_SOURCES = \
 
 test_bus_creds_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	libsystemd-dump.la \
 	libsystemd-capability.la
@@ -2245,7 +2178,6 @@ test_bus_match_SOURCES = \
 
 test_bus_match_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_bus_kernel_SOURCES = \
@@ -2253,7 +2185,6 @@ test_bus_kernel_SOURCES = \
 
 test_bus_kernel_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	libsystemd-dump.la \
 	libsystemd-capability.la \
@@ -2268,7 +2199,6 @@ test_bus_kernel_bloom_SOURCES = \
 
 test_bus_kernel_bloom_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_bus_kernel_benchmark_SOURCES = \
@@ -2276,7 +2206,6 @@ test_bus_kernel_benchmark_SOURCES = \
 
 test_bus_kernel_benchmark_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_bus_memfd_SOURCES = \
@@ -2291,7 +2220,6 @@ test_bus_zero_copy_SOURCES = \
 
 test_bus_zero_copy_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	libsystemd-dump.la \
 	libsystemd-capability.la \
@@ -2313,7 +2241,6 @@ test_event_SOURCES = \
 
 test_event_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_rtnl_SOURCES = \
@@ -2321,7 +2248,6 @@ test_rtnl_SOURCES = \
 
 test_rtnl_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_resolve_SOURCES = \
@@ -2342,7 +2268,6 @@ busctl_SOURCES = \
 
 busctl_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	libsystemd-dump.la \
 	libsystemd-capability.la \
@@ -2390,7 +2315,6 @@ test_dhcp_client_SOURCES = \
 test_dhcp_client_LDADD = \
 	libsystemd-dhcp.la \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 tests += \
@@ -2436,7 +2360,7 @@ libudev_la_LDFLAGS = \
 	-Wl,--version-script=$(top_srcdir)/src/libudev/libudev.sym
 
 libudev_la_LIBADD = \
-	libsystemd-daemon-internal.la \
+	libsystemd-internal.la \
 	libsystemd-shared.la
 
 pkgconfiglib_DATA += \
@@ -2619,7 +2543,6 @@ libudev_core_la_CFLAGS = \
 libudev_core_la_LIBADD = \
 	libudev-internal.la \
 	libsystemd-label.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-internal.la \
 	libsystemd-shared.la \
 	$(BLKID_LIBS) \
@@ -2997,7 +2920,6 @@ test_id128_SOURCES = \
 
 test_id128_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 tests += \
@@ -3013,7 +2935,7 @@ systemd_activate_SOURCES = \
 
 systemd_activate_LDADD = \
 	libsystemd-label.la \
-	libsystemd-daemon-internal.la \
+	libsystemd-internal.la \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
@@ -3170,7 +3092,6 @@ libsystemd_journal_la_LDFLAGS = \
 
 libsystemd_journal_la_LIBADD = \
 	libsystemd-label.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-internal.la \
 	libsystemd-shared.la
 
@@ -3225,7 +3146,6 @@ libsystemd_journal_core_la_LIBADD = \
 	libudev-internal.la \
 	libsystemd-capability.la \
 	libsystemd-label.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-internal.la \
 	libsystemd-shared.la
 
@@ -3377,7 +3297,6 @@ systemd_journal_gatewayd_SOURCES = \
 systemd_journal_gatewayd_LDADD = \
 	libsystemd-logs.la \
 	libsystemd-journal-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-internal.la \
 	libsystemd-shared.la \
 	$(MICROHTTPD_LIBS)
@@ -3413,7 +3332,6 @@ systemd_socket_proxyd_LDADD = \
 	libsystemd-logs.la \
 	libsystemd-internal.la \
 	libsystemd-journal-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
@@ -3520,7 +3438,7 @@ systemd_readahead_SOURCES = \
 	src/readahead/readahead-common.h
 
 systemd_readahead_LDADD = \
-	libsystemd-daemon-internal.la \
+	libsystemd-internal.la \
 	libudev-internal.la \
 	libsystemd-shared.la
 
@@ -3696,7 +3614,6 @@ systemd_hostnamed_SOURCES = \
 systemd_hostnamed_LDADD = \
 	libsystemd-label.la \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 rootlibexec_PROGRAMS += \
@@ -3728,7 +3645,6 @@ hostnamectl_SOURCES = \
 
 hostnamectl_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 bin_PROGRAMS += \
@@ -3755,7 +3671,6 @@ systemd_bus_driverd_SOURCES = \
 
 systemd_bus_driverd_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 rootlibexec_PROGRAMS += \
@@ -3792,7 +3707,6 @@ systemd_localed_SOURCES = \
 systemd_localed_LDADD = \
 	libsystemd-label.la \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 nodist_systemunit_DATA += \
@@ -3833,7 +3747,6 @@ localectl_SOURCES = \
 
 localectl_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 bin_PROGRAMS += \
@@ -3863,7 +3776,6 @@ systemd_timedated_SOURCES = \
 systemd_timedated_LDADD = \
 	libsystemd-label.la \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 rootlibexec_PROGRAMS += \
@@ -3899,7 +3811,6 @@ timedatectl_SOURCES = \
 
 timedatectl_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 bin_PROGRAMS += \
@@ -3957,7 +3868,6 @@ libsystemd_machine_core_la_SOURCES = \
 
 libsystemd_machine_core_la_LIBADD = \
 	libsystemd-label.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-internal.la \
 	libudev-internal.la \
 	libsystemd-shared.la
@@ -3970,7 +3880,6 @@ machinectl_SOURCES = \
 
 machinectl_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 rootbin_PROGRAMS += \
@@ -4035,7 +3944,6 @@ nodist_systemd_networkd_SOURCES = \
 
 systemd_networkd_LDADD = \
 	libudev-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-internal.la \
 	libsystemd-dhcp.la \
 	libsystemd-label.la \
@@ -4062,7 +3970,6 @@ test_network_LDADD = \
 	libudev-internal.la \
 	libsystemd-internal.la \
 	libsystemd-dhcp.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-label.la \
 	libsystemd-shared.la
 
@@ -4118,7 +4025,6 @@ libsystemd_logind_core_la_SOURCES = \
 libsystemd_logind_core_la_LIBADD = \
 	libsystemd-label.la \
 	libsystemd-capability.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-internal.la \
 	libudev-internal.la \
 	libsystemd-shared.la
@@ -4151,8 +4057,7 @@ loginctl_SOURCES = \
 loginctl_LDADD = \
 	libsystemd-internal.la \
 	libudev-internal.la \
-	libsystemd-shared.la \
-	libsystemd-daemon-internal.la
+	libsystemd-shared.la
 
 rootbin_PROGRAMS += \
 	loginctl
@@ -4169,7 +4074,6 @@ systemd_inhibit_SOURCES = \
 
 systemd_inhibit_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 rootbin_PROGRAMS += \
@@ -4194,7 +4098,6 @@ test_inhibit_SOURCES = \
 
 test_inhibit_LDADD = \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 test_login_tables_SOURCES = \
@@ -4231,7 +4134,6 @@ pam_systemd_la_LDFLAGS = \
 pam_systemd_la_LIBADD = \
 	libsystemd-capability.la \
 	libsystemd-internal.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la \
 	$(PAM_LIBS)
 
@@ -4381,7 +4283,7 @@ _daemon_la_LDFLAGS = \
 
 _daemon_la_LIBADD = \
 	$(PYTHON_DEVEL_LIBS) \
-	libsystemd-daemon.la
+	libsystemd.la
 
 _reader_la_SOURCES = \
 	src/python-systemd/_reader.c \
@@ -4401,9 +4303,8 @@ _reader_la_LDFLAGS = \
 
 _reader_la_LIBADD = \
 	$(PYTHON_DEVEL_LIBS) \
-	libsystemd-journal.la \
 	libsystemd.la \
-	libsystemd-daemon-internal.la \
+	libsystemd-journal.la \
 	libsystemd-shared.la
 
 login_la_SOURCES = \
@@ -4424,9 +4325,7 @@ login_la_LDFLAGS = \
 
 login_la_LIBADD = \
 	$(PYTHON_DEVEL_LIBS) \
-	libsystemd-journal.la \
 	libsystemd.la \
-	libsystemd-daemon-internal.la \
 	libsystemd-shared.la
 
 dist_pkgpyexec_PYTHON = \
@@ -4512,29 +4411,49 @@ libsystemd_id128_la_LDFLAGS = \
 libsystemd_id128_la_LIBADD = \
 	libsystemd.la
 
+libsystemd_daemon_la_SOURCES = \
+	libsystemd-daemon.c \
+	src/compat-libs/libsystemd-daemon.sym
+
+libsystemd_daemon_la_CFLAGS = \
+	$(libsystemd_login_la_CFLAGS)
+
+libsystemd_daemon_la_LDFLAGS = \
+	$(AM_LDFLAGS) \
+	-version-info $(LIBSYSTEMD_DAEMON_CURRENT):$(LIBSYSTEMD_DAEMON_REVISION):$(LIBSYSTEMD_DAEMON_AGE) \
+	-Wl,--version-script=$(top_srcdir)/src/compat-libs/libsystemd-daemon.sym
+
+libsystemd_daemon_la_LIBADD = \
+	libsystemd.la
+
 BUILT_SOURCES += \
 	libsystemd-login.c \
-	libsystemd-id128.c
+	libsystemd-id128.c \
+	libsystemd-daemon.c
 
 libsystemd-%.c: src/compat-libs/libsystemd-%.sym
 	$(generate-fake-lib)
 
 lib_LTLIBRARIES += \
 	libsystemd-login.la \
-	libsystemd-id128.la
+	libsystemd-id128.la \
+	libsystemd-daemon.la
 
 pkgconfiglib_DATA += \
 	src/compat-libs/libsystemd-login.pc \
-	src/compat-libs/libsystemd-id128.pc
+	src/compat-libs/libsystemd-id128.pc \
+	src/compat-libs/libsystemd-daemon.pc
 
 # move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
 compat-lib-install-hook:
 	libname=libsystemd-login.so && $(move-to-rootlibdir)
 	libname=libsystemd-id128.so && $(move-to-rootlibdir)
+	libname=libsystemd-daemon.so && $(move-to-rootlibdir)
 
 compat-lib-uninstall-hook:
 	rm -f $(DESTDIR)$(rootlibdir)/libsystemd-login.so*
 	rm -f $(DESTDIR)$(rootlibdir)/libsystemd-id128.so*
+	rm -f $(DESTDIR)$(rootlibdir)/libsystemd-daemon.so*
 
 INSTALL_EXEC_HOOKS += compat-lib-install-hook
 UNINSTALL_EXEC_HOOKS += compat-lib-uninstall-hook
@@ -4543,7 +4462,8 @@ endif
 
 EXTRA_DIST += \
 	src/compat-libs/libsystemd-login.pc.in \
-	src/compat-libs/libsystemd-id128.pc.in
+	src/compat-libs/libsystemd-id128.pc.in \
+	src/compat-libs/libsystemd-daemon.pc.in
 
 # ------------------------------------------------------------------------------
 substitutions = \
@@ -4980,11 +4900,12 @@ test-libsystemd-sym.c: \
 	src/libsystemd/libsystemd.sym \
 	src/systemd/sd-bus.h \
 	src/systemd/sd-utf8.h \
+	src/systemd/sd-daemon.h \
 	src/systemd/sd-login.h
 	$(generate-sym-test)
 
 test-libsystemd-daemon-sym.c: \
-	src/libsystemd-daemon/libsystemd-daemon.sym \
+	src/compat-libs/libsystemd-daemon.sym \
 	src/systemd/sd-daemon.h
 	$(generate-sym-test)
 
@@ -5040,24 +4961,24 @@ test_libudev_sym_LDADD = \
 
 BUILT_SOURCES += \
 	$(test_libsystemd_sym_SOURCES) \
-	$(test_libsystemd_daemon_sym_SOURCES) \
 	$(test_libsystemd_journal_sym_SOURCES) \
 	$(test_libudev_sym_SOURCES)
 
 tests += \
 	test-libsystemd-sym \
-	test-libsystemd-daemon-sym \
 	test-libsystemd-journal-sym \
 	test-libudev-sym
 
 if ENABLE_COMPAT_LIBS
 BUILT_SOURCES += \
 	$(test_libsystemd_login_sym_SOURCES) \
-	$(test_libsystemd_id128_sym_SOURCES)
+	$(test_libsystemd_id128_sym_SOURCES) \
+	$(test_libsystemd_daemon_sym_SOURCES)
 
 tests += \
 	test-libsystemd-login-sym \
-	test-libsystemd-id128-sym
+	test-libsystemd-id128-sym \
+	test-libsystemd-daemon-sym
 endif
 
 .PHONY: cppcheck
diff --git a/src/compat-libs/libsystemd-daemon.pc.in b/src/compat-libs/libsystemd-daemon.pc.in
new file mode 100644
index 0000000..8bb3a74
--- /dev/null
+++ b/src/compat-libs/libsystemd-daemon.pc.in
@@ -0,0 +1,19 @@
+#  Permission is hereby granted, free of charge, to any person
+#  obtaining a copy of this software and associated documentation files
+#  (the "Software"), to deal in the Software without restriction,
+#  including without limitation the rights to use, copy, modify, merge,
+#  publish, distribute, sublicense, and/or sell copies of the Software,
+#  and to permit persons to whom the Software is furnished to do so,
+#  subject to the following conditions:
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: systemd
+Description: systemd Daemon Utility Library
+URL: @PACKAGE_URL@
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -lsystemd-daemon
+Cflags: -I${includedir}
diff --git a/src/compat-libs/libsystemd-daemon.sym b/src/compat-libs/libsystemd-daemon.sym
new file mode 100644
index 0000000..aa9be51
--- /dev/null
+++ b/src/compat-libs/libsystemd-daemon.sym
@@ -0,0 +1,32 @@
+/***
+  Permission is hereby granted, free of charge, to any person
+  obtaining a copy of this software and associated documentation files
+  (the "Software"), to deal in the Software without restriction,
+  including without limitation the rights to use, copy, modify, merge,
+  publish, distribute, sublicense, and/or sell copies of the Software,
+  and to permit persons to whom the Software is furnished to do so,
+  subject to the following conditions:
+***/
+
+/* Original symbols from systemd v31 */
+
+LIBSYSTEMD_DAEMON_31 {
+global:
+        sd_booted;
+        sd_is_fifo;
+        sd_is_mq;
+        sd_is_socket;
+        sd_is_socket_inet;
+        sd_is_socket_unix;
+        sd_is_special;
+        sd_listen_fds;
+        sd_notify;
+        sd_notifyf;
+local:
+        *;
+};
+
+LIBSYSTEMD_DAEMON_209 {
+global:
+        sd_watchdog_enabled;
+} LIBSYSTEMD_DAEMON_31;
diff --git a/src/libsystemd-daemon/.gitignore b/src/libsystemd-daemon/.gitignore
deleted file mode 100644
index 5184131..0000000
--- a/src/libsystemd-daemon/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/libsystemd-daemon.pc
diff --git a/src/libsystemd-daemon/Makefile b/src/libsystemd-daemon/Makefile
deleted file mode 120000
index d0b0e8e..0000000
--- a/src/libsystemd-daemon/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-../Makefile
\ No newline at end of file
diff --git a/src/libsystemd-daemon/libsystemd-daemon.pc.in b/src/libsystemd-daemon/libsystemd-daemon.pc.in
deleted file mode 100644
index 8bb3a74..0000000
--- a/src/libsystemd-daemon/libsystemd-daemon.pc.in
+++ /dev/null
@@ -1,19 +0,0 @@
-#  Permission is hereby granted, free of charge, to any person
-#  obtaining a copy of this software and associated documentation files
-#  (the "Software"), to deal in the Software without restriction,
-#  including without limitation the rights to use, copy, modify, merge,
-#  publish, distribute, sublicense, and/or sell copies of the Software,
-#  and to permit persons to whom the Software is furnished to do so,
-#  subject to the following conditions:
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: systemd
-Description: systemd Daemon Utility Library
-URL: @PACKAGE_URL@
-Version: @PACKAGE_VERSION@
-Libs: -L${libdir} -lsystemd-daemon
-Cflags: -I${includedir}
diff --git a/src/libsystemd-daemon/libsystemd-daemon.sym b/src/libsystemd-daemon/libsystemd-daemon.sym
deleted file mode 100644
index aa9be51..0000000
--- a/src/libsystemd-daemon/libsystemd-daemon.sym
+++ /dev/null
@@ -1,32 +0,0 @@
-/***
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-***/
-
-/* Original symbols from systemd v31 */
-
-LIBSYSTEMD_DAEMON_31 {
-global:
-        sd_booted;
-        sd_is_fifo;
-        sd_is_mq;
-        sd_is_socket;
-        sd_is_socket_inet;
-        sd_is_socket_unix;
-        sd_is_special;
-        sd_listen_fds;
-        sd_notify;
-        sd_notifyf;
-local:
-        *;
-};
-
-LIBSYSTEMD_DAEMON_209 {
-global:
-        sd_watchdog_enabled;
-} LIBSYSTEMD_DAEMON_31;
diff --git a/src/libsystemd-daemon/sd-daemon.c b/src/libsystemd-daemon/sd-daemon.c
deleted file mode 100644
index 1a713ef..0000000
--- a/src/libsystemd-daemon/sd-daemon.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-/***
-  Copyright 2010 Lennart Poettering
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-***/
-
-#ifndef _GNU_SOURCE
-#  define _GNU_SOURCE
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <fcntl.h>
-#include <netinet/in.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <limits.h>
-
-#if defined(__linux__) && !defined(SD_DAEMON_DISABLE_MQ)
-#  include <mqueue.h>
-#endif
-
-#include "util.h"
-#include "sd-daemon.h"
-
-#if (__GNUC__ >= 4)
-#  ifdef SD_EXPORT_SYMBOLS
-/* Export symbols */
-#    define _sd_export_ __attribute__ ((visibility("default")))
-#  else
-/* Don't export the symbols */
-#    define _sd_export_ __attribute__ ((visibility("hidden")))
-#  endif
-#else
-#  define _sd_export_
-#endif
-
-_sd_export_ int sd_listen_fds(int unset_environment) {
-
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
-        return 0;
-#else
-        int r, fd;
-        const char *e;
-        char *p = NULL;
-        unsigned long l;
-
-        e = getenv("LISTEN_PID");
-        if (!e) {
-                r = 0;
-                goto finish;
-        }
-
-        errno = 0;
-        l = strtoul(e, &p, 10);
-
-        if (errno > 0) {
-                r = -errno;
-                goto finish;
-        }
-
-        if (!p || p == e || *p || l <= 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        /* Is this for us? */
-        if (getpid() != (pid_t) l) {
-                r = 0;
-                goto finish;
-        }
-
-        e = getenv("LISTEN_FDS");
-        if (!e) {
-                r = 0;
-                goto finish;
-        }
-
-        errno = 0;
-        l = strtoul(e, &p, 10);
-
-        if (errno > 0) {
-                r = -errno;
-                goto finish;
-        }
-
-        if (!p || p == e || *p) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) {
-                int flags;
-
-                flags = fcntl(fd, F_GETFD);
-                if (flags < 0) {
-                        r = -errno;
-                        goto finish;
-                }
-
-                if (flags & FD_CLOEXEC)
-                        continue;
-
-                if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
-                        r = -errno;
-                        goto finish;
-                }
-        }
-
-        r = (int) l;
-
-finish:
-        if (unset_environment) {
-                unsetenv("LISTEN_PID");
-                unsetenv("LISTEN_FDS");
-        }
-
-        return r;
-#endif
-}
-
-_sd_export_ int sd_is_fifo(int fd, const char *path) {
-        struct stat st_fd;
-
-        if (fd < 0)
-                return -EINVAL;
-
-        if (fstat(fd, &st_fd) < 0)
-                return -errno;
-
-        if (!S_ISFIFO(st_fd.st_mode))
-                return 0;
-
-        if (path) {
-                struct stat st_path;
-
-                if (stat(path, &st_path) < 0) {
-
-                        if (errno == ENOENT || errno == ENOTDIR)
-                                return 0;
-
-                        return -errno;
-                }
-
-                return
-                        st_path.st_dev == st_fd.st_dev &&
-                        st_path.st_ino == st_fd.st_ino;
-        }
-
-        return 1;
-}
-
-_sd_export_ int sd_is_special(int fd, const char *path) {
-        struct stat st_fd;
-
-        if (fd < 0)
-                return -EINVAL;
-
-        if (fstat(fd, &st_fd) < 0)
-                return -errno;
-
-        if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode))
-                return 0;
-
-        if (path) {
-                struct stat st_path;
-
-                if (stat(path, &st_path) < 0) {
-
-                        if (errno == ENOENT || errno == ENOTDIR)
-                                return 0;
-
-                        return -errno;
-                }
-
-                if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode))
-                        return
-                                st_path.st_dev == st_fd.st_dev &&
-                                st_path.st_ino == st_fd.st_ino;
-                else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode))
-                        return st_path.st_rdev == st_fd.st_rdev;
-                else
-                        return 0;
-        }
-
-        return 1;
-}
-
-static int sd_is_socket_internal(int fd, int type, int listening) {
-        struct stat st_fd;
-
-        if (fd < 0 || type < 0)
-                return -EINVAL;
-
-        if (fstat(fd, &st_fd) < 0)
-                return -errno;
-
-        if (!S_ISSOCK(st_fd.st_mode))
-                return 0;
-
-        if (type != 0) {
-                int other_type = 0;
-                socklen_t l = sizeof(other_type);
-
-                if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0)
-                        return -errno;
-
-                if (l != sizeof(other_type))
-                        return -EINVAL;
-
-                if (other_type != type)
-                        return 0;
-        }
-
-        if (listening >= 0) {
-                int accepting = 0;
-                socklen_t l = sizeof(accepting);
-
-                if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0)
-                        return -errno;
-
-                if (l != sizeof(accepting))
-                        return -EINVAL;
-
-                if (!accepting != !listening)
-                        return 0;
-        }
-
-        return 1;
-}
-
-union sockaddr_union {
-        struct sockaddr sa;
-        struct sockaddr_in in4;
-        struct sockaddr_in6 in6;
-        struct sockaddr_un un;
-        struct sockaddr_storage storage;
-};
-
-_sd_export_ int sd_is_socket(int fd, int family, int type, int listening) {
-        int r;
-
-        if (family < 0)
-                return -EINVAL;
-
-        r = sd_is_socket_internal(fd, type, listening);
-        if (r <= 0)
-                return r;
-
-        if (family > 0) {
-                union sockaddr_union sockaddr = {};
-                socklen_t l = sizeof(sockaddr);
-
-                if (getsockname(fd, &sockaddr.sa, &l) < 0)
-                        return -errno;
-
-                if (l < sizeof(sa_family_t))
-                        return -EINVAL;
-
-                return sockaddr.sa.sa_family == family;
-        }
-
-        return 1;
-}
-
-_sd_export_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) {
-        union sockaddr_union sockaddr = {};
-        socklen_t l = sizeof(sockaddr);
-        int r;
-
-        if (family != 0 && family != AF_INET && family != AF_INET6)
-                return -EINVAL;
-
-        r = sd_is_socket_internal(fd, type, listening);
-        if (r <= 0)
-                return r;
-
-        if (getsockname(fd, &sockaddr.sa, &l) < 0)
-                return -errno;
-
-        if (l < sizeof(sa_family_t))
-                return -EINVAL;
-
-        if (sockaddr.sa.sa_family != AF_INET &&
-            sockaddr.sa.sa_family != AF_INET6)
-                return 0;
-
-        if (family > 0)
-                if (sockaddr.sa.sa_family != family)
-                        return 0;
-
-        if (port > 0) {
-                if (sockaddr.sa.sa_family == AF_INET) {
-                        if (l < sizeof(struct sockaddr_in))
-                                return -EINVAL;
-
-                        return htons(port) == sockaddr.in4.sin_port;
-                } else {
-                        if (l < sizeof(struct sockaddr_in6))
-                                return -EINVAL;
-
-                        return htons(port) == sockaddr.in6.sin6_port;
-                }
-        }
-
-        return 1;
-}
-
-_sd_export_ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) {
-        union sockaddr_union sockaddr = {};
-        socklen_t l = sizeof(sockaddr);
-        int r;
-
-        r = sd_is_socket_internal(fd, type, listening);
-        if (r <= 0)
-                return r;
-
-        if (getsockname(fd, &sockaddr.sa, &l) < 0)
-                return -errno;
-
-        if (l < sizeof(sa_family_t))
-                return -EINVAL;
-
-        if (sockaddr.sa.sa_family != AF_UNIX)
-                return 0;
-
-        if (path) {
-                if (length == 0)
-                        length = strlen(path);
-
-                if (length == 0)
-                        /* Unnamed socket */
-                        return l == offsetof(struct sockaddr_un, sun_path);
-
-                if (path[0])
-                        /* Normal path socket */
-                        return
-                                (l >= offsetof(struct sockaddr_un, sun_path) + length + 1) &&
-                                memcmp(path, sockaddr.un.sun_path, length+1) == 0;
-                else
-                        /* Abstract namespace socket */
-                        return
-                                (l == offsetof(struct sockaddr_un, sun_path) + length) &&
-                                memcmp(path, sockaddr.un.sun_path, length) == 0;
-        }
-
-        return 1;
-}
-
-_sd_export_ int sd_is_mq(int fd, const char *path) {
-#if !defined(__linux__) || defined(SD_DAEMON_DISABLE_MQ)
-        return 0;
-#else
-        struct mq_attr attr;
-
-        if (fd < 0)
-                return -EINVAL;
-
-        if (mq_getattr(fd, &attr) < 0)
-                return -errno;
-
-        if (path) {
-                char fpath[PATH_MAX];
-                struct stat a, b;
-
-                if (path[0] != '/')
-                        return -EINVAL;
-
-                if (fstat(fd, &a) < 0)
-                        return -errno;
-
-                strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12);
-                fpath[sizeof(fpath)-1] = 0;
-
-                if (stat(fpath, &b) < 0)
-                        return -errno;
-
-                if (a.st_dev != b.st_dev ||
-                    a.st_ino != b.st_ino)
-                        return 0;
-        }
-
-        return 1;
-#endif
-}
-
-_sd_export_ int sd_notify(int unset_environment, const char *state) {
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__) || !defined(SOCK_CLOEXEC)
-        return 0;
-#else
-        int fd = -1, r;
-        struct msghdr msghdr;
-        struct iovec iovec;
-        union sockaddr_union sockaddr;
-        const char *e;
-
-        if (!state) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        e = getenv("NOTIFY_SOCKET");
-        if (!e)
-                return 0;
-
-        /* Must be an abstract socket, or an absolute path */
-        if ((e[0] != '@' && e[0] != '/') || e[1] == 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
-        if (fd < 0) {
-                r = -errno;
-                goto finish;
-        }
-
-        memzero(&sockaddr, sizeof(sockaddr));
-        sockaddr.sa.sa_family = AF_UNIX;
-        strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path));
-
-        if (sockaddr.un.sun_path[0] == '@')
-                sockaddr.un.sun_path[0] = 0;
-
-        memzero(&iovec, sizeof(iovec));
-        iovec.iov_base = (char*) state;
-        iovec.iov_len = strlen(state);
-
-        memzero(&msghdr, sizeof(msghdr));
-        msghdr.msg_name = &sockaddr;
-        msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e);
-
-        if (msghdr.msg_namelen > sizeof(struct sockaddr_un))
-                msghdr.msg_namelen = sizeof(struct sockaddr_un);
-
-        msghdr.msg_iov = &iovec;
-        msghdr.msg_iovlen = 1;
-
-        if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) {
-                r = -errno;
-                goto finish;
-        }
-
-        r = 1;
-
-finish:
-        if (unset_environment)
-                unsetenv("NOTIFY_SOCKET");
-
-        if (fd >= 0)
-                close(fd);
-
-        return r;
-#endif
-}
-
-_sd_export_ int sd_notifyf(int unset_environment, const char *format, ...) {
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
-        return 0;
-#else
-        va_list ap;
-        char *p = NULL;
-        int r;
-
-        va_start(ap, format);
-        r = vasprintf(&p, format, ap);
-        va_end(ap);
-
-        if (r < 0 || !p)
-                return -ENOMEM;
-
-        r = sd_notify(unset_environment, p);
-        free(p);
-
-        return r;
-#endif
-}
-
-_sd_export_ int sd_booted(void) {
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
-        return 0;
-#else
-        struct stat st;
-
-        /* We test whether the runtime unit file directory has been
-         * created. This takes place in mount-setup.c, so is
-         * guaranteed to happen very early during boot. */
-
-        if (lstat("/run/systemd/system/", &st) < 0)
-                return 0;
-
-        return !!S_ISDIR(st.st_mode);
-#endif
-}
-
-_sd_export_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) {
-
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
-        return 0;
-#else
-        unsigned long long ll;
-        unsigned long l;
-        const char *e;
-        char *p = NULL;
-        int r;
-
-        e = getenv("WATCHDOG_PID");
-        if (!e) {
-                r = 0;
-                goto finish;
-        }
-
-        errno = 0;
-        l = strtoul(e, &p, 10);
-        if (errno > 0) {
-                r = -errno;
-                goto finish;
-        }
-        if (!p || p == e || *p || l <= 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        /* Is this for us? */
-        if (getpid() != (pid_t) l) {
-                r = 0;
-                goto finish;
-        }
-
-        e = getenv("WATCHDOG_USEC");
-        if (!e) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        errno = 0;
-        ll = strtoull(e, &p, 10);
-        if (errno > 0) {
-                r = -errno;
-                goto finish;
-        }
-        if (!p || p == e || *p || l <= 0) {
-                r = -EINVAL;
-                goto finish;
-        }
-
-        if (usec)
-                *usec = ll;
-
-        r = 1;
-
-finish:
-        if (unset_environment) {
-                unsetenv("WATCHDOG_PID");
-                unsetenv("WATCHDOG_USEC");
-        }
-
-        return r;
-#endif
-}
diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym
index b4e4af1..258c932 100644
--- a/src/libsystemd/libsystemd.sym
+++ b/src/libsystemd/libsystemd.sym
@@ -10,6 +10,21 @@
 LIBSYSTEMD_209 {
 global:
 
+        /* originally LIBSYSTEMD_DAEMON_31 */
+        sd_booted;
+        sd_is_fifo;
+        sd_is_mq;
+        sd_is_socket;
+        sd_is_socket_inet;
+        sd_is_socket_unix;
+        sd_is_special;
+        sd_listen_fds;
+        sd_notify;
+        sd_notifyf;
+
+        /* LIBSYSTEMD_DAEMON_209 */
+        sd_watchdog_enabled;
+
         /* originally LIBSYSTEMD_ID128_38 */
         sd_id128_to_string;
         sd_id128_from_string;
diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c
new file mode 100644
index 0000000..21fb346
--- /dev/null
+++ b/src/libsystemd/sd-daemon/sd-daemon.c
@@ -0,0 +1,537 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd 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
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <fcntl.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <limits.h>
+#include <mqueue.h>
+
+#include "util.h"
+#include "sd-daemon.h"
+
+_public_ int sd_listen_fds(int unset_environment) {
+        int r, fd;
+        const char *e;
+        char *p = NULL;
+        unsigned long l;
+
+        e = getenv("LISTEN_PID");
+        if (!e) {
+                r = 0;
+                goto finish;
+        }
+
+        errno = 0;
+        l = strtoul(e, &p, 10);
+
+        if (errno > 0) {
+                r = -errno;
+                goto finish;
+        }
+
+        if (!p || p == e || *p || l <= 0) {
+                r = -EINVAL;
+                goto finish;
+        }
+
+        /* Is this for us? */
+        if (getpid() != (pid_t) l) {
+                r = 0;
+                goto finish;
+        }
+
+        e = getenv("LISTEN_FDS");
+        if (!e) {
+                r = 0;
+                goto finish;
+        }
+
+        errno = 0;
+        l = strtoul(e, &p, 10);
+
+        if (errno > 0) {
+                r = -errno;
+                goto finish;
+        }
+
+        if (!p || p == e || *p) {
+                r = -EINVAL;
+                goto finish;
+        }
+
+        for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) {
+                int flags;
+
+                flags = fcntl(fd, F_GETFD);
+                if (flags < 0) {
+                        r = -errno;
+                        goto finish;
+                }
+
+                if (flags & FD_CLOEXEC)
+                        continue;
+
+                if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
+                        r = -errno;
+                        goto finish;
+                }
+        }
+
+        r = (int) l;
+
+finish:
+        if (unset_environment) {
+                unsetenv("LISTEN_PID");
+                unsetenv("LISTEN_FDS");
+        }
+
+        return r;
+}
+
+_public_ int sd_is_fifo(int fd, const char *path) {
+        struct stat st_fd;
+
+        if (fd < 0)
+                return -EINVAL;
+
+        if (fstat(fd, &st_fd) < 0)
+                return -errno;
+
+        if (!S_ISFIFO(st_fd.st_mode))
+                return 0;
+
+        if (path) {
+                struct stat st_path;
+
+                if (stat(path, &st_path) < 0) {
+
+                        if (errno == ENOENT || errno == ENOTDIR)
+                                return 0;
+
+                        return -errno;
+                }
+
+                return
+                        st_path.st_dev == st_fd.st_dev &&
+                        st_path.st_ino == st_fd.st_ino;
+        }
+
+        return 1;
+}
+
+_public_ int sd_is_special(int fd, const char *path) {
+        struct stat st_fd;
+
+        if (fd < 0)
+                return -EINVAL;
+
+        if (fstat(fd, &st_fd) < 0)
+                return -errno;
+
+        if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode))
+                return 0;
+
+        if (path) {
+                struct stat st_path;
+
+                if (stat(path, &st_path) < 0) {
+
+                        if (errno == ENOENT || errno == ENOTDIR)
+                                return 0;
+
+                        return -errno;
+                }
+
+                if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode))
+                        return
+                                st_path.st_dev == st_fd.st_dev &&
+                                st_path.st_ino == st_fd.st_ino;
+                else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode))
+                        return st_path.st_rdev == st_fd.st_rdev;
+                else
+                        return 0;
+        }
+
+        return 1;
+}
+
+static int sd_is_socket_internal(int fd, int type, int listening) {
+        struct stat st_fd;
+
+        if (fd < 0 || type < 0)
+                return -EINVAL;
+
+        if (fstat(fd, &st_fd) < 0)
+                return -errno;
+
+        if (!S_ISSOCK(st_fd.st_mode))
+                return 0;
+
+        if (type != 0) {
+                int other_type = 0;
+                socklen_t l = sizeof(other_type);
+
+                if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0)
+                        return -errno;
+
+                if (l != sizeof(other_type))
+                        return -EINVAL;
+
+                if (other_type != type)
+                        return 0;
+        }
+
+        if (listening >= 0) {
+                int accepting = 0;
+                socklen_t l = sizeof(accepting);
+
+                if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0)
+                        return -errno;
+
+                if (l != sizeof(accepting))
+                        return -EINVAL;
+
+                if (!accepting != !listening)
+                        return 0;
+        }
+
+        return 1;
+}
+
+union sockaddr_union {
+        struct sockaddr sa;
+        struct sockaddr_in in4;
+        struct sockaddr_in6 in6;
+        struct sockaddr_un un;
+        struct sockaddr_storage storage;
+};
+
+_public_ int sd_is_socket(int fd, int family, int type, int listening) {
+        int r;
+
+        if (family < 0)
+                return -EINVAL;
+
+        r = sd_is_socket_internal(fd, type, listening);
+        if (r <= 0)
+                return r;
+
+        if (family > 0) {
+                union sockaddr_union sockaddr = {};
+                socklen_t l = sizeof(sockaddr);
+
+                if (getsockname(fd, &sockaddr.sa, &l) < 0)
+                        return -errno;
+
+                if (l < sizeof(sa_family_t))
+                        return -EINVAL;
+
+                return sockaddr.sa.sa_family == family;
+        }
+
+        return 1;
+}
+
+_public_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) {
+        union sockaddr_union sockaddr = {};
+        socklen_t l = sizeof(sockaddr);
+        int r;
+
+        if (family != 0 && family != AF_INET && family != AF_INET6)
+                return -EINVAL;
+
+        r = sd_is_socket_internal(fd, type, listening);
+        if (r <= 0)
+                return r;
+
+        if (getsockname(fd, &sockaddr.sa, &l) < 0)
+                return -errno;
+
+        if (l < sizeof(sa_family_t))
+                return -EINVAL;
+
+        if (sockaddr.sa.sa_family != AF_INET &&
+            sockaddr.sa.sa_family != AF_INET6)
+                return 0;
+
+        if (family > 0)
+                if (sockaddr.sa.sa_family != family)
+                        return 0;
+
+        if (port > 0) {
+                if (sockaddr.sa.sa_family == AF_INET) {
+                        if (l < sizeof(struct sockaddr_in))
+                                return -EINVAL;
+
+                        return htons(port) == sockaddr.in4.sin_port;
+                } else {
+                        if (l < sizeof(struct sockaddr_in6))
+                                return -EINVAL;
+
+                        return htons(port) == sockaddr.in6.sin6_port;
+                }
+        }
+
+        return 1;
+}
+
+_public_ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) {
+        union sockaddr_union sockaddr = {};
+        socklen_t l = sizeof(sockaddr);
+        int r;
+
+        r = sd_is_socket_internal(fd, type, listening);
+        if (r <= 0)
+                return r;
+
+        if (getsockname(fd, &sockaddr.sa, &l) < 0)
+                return -errno;
+
+        if (l < sizeof(sa_family_t))
+                return -EINVAL;
+
+        if (sockaddr.sa.sa_family != AF_UNIX)
+                return 0;
+
+        if (path) {
+                if (length == 0)
+                        length = strlen(path);
+
+                if (length == 0)
+                        /* Unnamed socket */
+                        return l == offsetof(struct sockaddr_un, sun_path);
+
+                if (path[0])
+                        /* Normal path socket */
+                        return
+                                (l >= offsetof(struct sockaddr_un, sun_path) + length + 1) &&
+                                memcmp(path, sockaddr.un.sun_path, length+1) == 0;
+                else
+                        /* Abstract namespace socket */
+                        return
+                                (l == offsetof(struct sockaddr_un, sun_path) + length) &&
+                                memcmp(path, sockaddr.un.sun_path, length) == 0;
+        }
+
+        return 1;
+}
+
+_public_ int sd_is_mq(int fd, const char *path) {
+        struct mq_attr attr;
+
+        if (fd < 0)
+                return -EINVAL;
+
+        if (mq_getattr(fd, &attr) < 0)
+                return -errno;
+
+        if (path) {
+                char fpath[PATH_MAX];
+                struct stat a, b;
+
+                if (path[0] != '/')
+                        return -EINVAL;
+
+                if (fstat(fd, &a) < 0)
+                        return -errno;
+
+                strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12);
+                fpath[sizeof(fpath)-1] = 0;
+
+                if (stat(fpath, &b) < 0)
+                        return -errno;
+
+                if (a.st_dev != b.st_dev ||
+                    a.st_ino != b.st_ino)
+                        return 0;
+        }
+
+        return 1;
+}
+
+_public_ int sd_notify(int unset_environment, const char *state) {
+        int fd = -1, r;
+        struct msghdr msghdr;
+        struct iovec iovec;
+        union sockaddr_union sockaddr;
+        const char *e;
+
+        if (!state) {
+                r = -EINVAL;
+                goto finish;
+        }
+
+        e = getenv("NOTIFY_SOCKET");
+        if (!e)
+                return 0;
+
+        /* Must be an abstract socket, or an absolute path */
+        if ((e[0] != '@' && e[0] != '/') || e[1] == 0) {
+                r = -EINVAL;
+                goto finish;
+        }
+
+        fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
+        if (fd < 0) {
+                r = -errno;
+                goto finish;
+        }
+
+        memzero(&sockaddr, sizeof(sockaddr));
+        sockaddr.sa.sa_family = AF_UNIX;
+        strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path));
+
+        if (sockaddr.un.sun_path[0] == '@')
+                sockaddr.un.sun_path[0] = 0;
+
+        memzero(&iovec, sizeof(iovec));
+        iovec.iov_base = (char*) state;
+        iovec.iov_len = strlen(state);
+
+        memzero(&msghdr, sizeof(msghdr));
+        msghdr.msg_name = &sockaddr;
+        msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e);
+
+        if (msghdr.msg_namelen > sizeof(struct sockaddr_un))
+                msghdr.msg_namelen = sizeof(struct sockaddr_un);
+
+        msghdr.msg_iov = &iovec;
+        msghdr.msg_iovlen = 1;
+
+        if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) {
+                r = -errno;
+                goto finish;
+        }
+
+        r = 1;
+
+finish:
+        if (unset_environment)
+                unsetenv("NOTIFY_SOCKET");
+
+        if (fd >= 0)
+                close(fd);
+
+        return r;
+}
+
+_public_ int sd_notifyf(int unset_environment, const char *format, ...) {
+        va_list ap;
+        char *p = NULL;
+        int r;
+
+        va_start(ap, format);
+        r = vasprintf(&p, format, ap);
+        va_end(ap);
+
+        if (r < 0 || !p)
+                return -ENOMEM;
+
+        r = sd_notify(unset_environment, p);
+        free(p);
+
+        return r;
+}
+
+_public_ int sd_booted(void) {
+        struct stat st;
+
+        /* We test whether the runtime unit file directory has been
+         * created. This takes place in mount-setup.c, so is
+         * guaranteed to happen very early during boot. */
+
+        if (lstat("/run/systemd/system/", &st) < 0)
+                return 0;
+
+        return !!S_ISDIR(st.st_mode);
+}
+
+_public_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) {
+        unsigned long long ll;
+        unsigned long l;
+        const char *e;
+        char *p = NULL;
+        int r;
+
+        e = getenv("WATCHDOG_PID");
+        if (!e) {
+                r = 0;
+                goto finish;
+        }
+
+        errno = 0;
+        l = strtoul(e, &p, 10);
+        if (errno > 0) {
+                r = -errno;
+                goto finish;
+        }
+        if (!p || p == e || *p || l <= 0) {
+                r = -EINVAL;
+                goto finish;
+        }
+
+        /* Is this for us? */
+        if (getpid() != (pid_t) l) {
+                r = 0;
+                goto finish;
+        }
+
+        e = getenv("WATCHDOG_USEC");
+        if (!e) {
+                r = -EINVAL;
+                goto finish;
+        }
+
+        errno = 0;
+        ll = strtoull(e, &p, 10);
+        if (errno > 0) {
+                r = -errno;
+                goto finish;
+        }
+        if (!p || p == e || *p || l <= 0) {
+                r = -EINVAL;
+                goto finish;
+        }
+
+        if (usec)
+                *usec = ll;
+
+        r = 1;
+
+finish:
+        if (unset_environment) {
+                unsetenv("WATCHDOG_PID");
+                unsetenv("WATCHDOG_USEC");
+        }
+
+        return r;
+}
diff --git a/src/systemd/sd-daemon.h b/src/systemd/sd-daemon.h
index 43deb8c..f95fb51 100644
--- a/src/systemd/sd-daemon.h
+++ b/src/systemd/sd-daemon.h
@@ -30,17 +30,11 @@
 #include <sys/types.h>
 #include <inttypes.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include "_sd-common.h"
 
-/*
-  Reference implementation of a few systemd related interfaces for
-  writing daemons. These interfaces are trivial to implement. To
-  simplify porting we provide this reference implementation.
-  Applications are welcome to reimplement the algorithms described
-  here if they do not want to include these two source files.
+_SD_BEGIN_DECLARATIONS;
 
+/*
   The following functionality is provided:
 
   - Support for logging with log levels on stderr
@@ -48,33 +42,9 @@ extern "C" {
   - Daemon startup and status notification
   - Detection of systemd boots
 
-  You may compile this with -DDISABLE_SYSTEMD to disable systemd
-  support. This makes all those calls NOPs that are directly related to
-  systemd (i.e. only sd_is_xxx() will stay useful).
-
-  Since this is drop-in code we don't want any of our symbols to be
-  exported in any case. Hence we declare hidden visibility for all of
-  them.
-
-  You may find an up-to-date version of these source files online:
-
-  http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h
-  http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c
-
-  This should compile on non-Linux systems, too, but with the
-  exception of the sd_is_xxx() calls all functions will become NOPs.
-
   See sd-daemon(3) for more information.
 */
 
-#ifndef _sd_printf_attr_
-#  if __GNUC__ >= 4
-#    define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b)))
-#  else
-#    define _sd_printf_attr_(a,b)
-#  endif
-#endif
-
 /*
   Log levels for usage on stderr:
 
@@ -263,7 +233,7 @@ int sd_notify(int unset_environment, const char *state);
 
   See sd_notifyf(3) for more information.
 */
-int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_attr_(2,3);
+int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_(2,3);
 
 /*
   Returns > 0 if the system was booted with systemd. Returns < 0 on
@@ -294,8 +264,6 @@ int sd_booted(void);
 */
 int sd_watchdog_enabled(int unset_environment, uint64_t *usec);
 
-#ifdef __cplusplus
-}
-#endif
+_SD_END_DECLARATIONS;
 
 #endif
diff --git a/src/systemd/sd-readahead.h b/src/systemd/sd-readahead.h
index 2dac104..ed8300c 100644
--- a/src/systemd/sd-readahead.h
+++ b/src/systemd/sd-readahead.h
@@ -34,7 +34,7 @@ extern "C" {
 /*
   Reference implementation of a few boot readahead related
   interfaces. These interfaces are trivial to implement. To simplify
-  porting we provide this reference implementation.  Applications are
+  porting, we provide this reference implementation.  Applications are
   welcome to reimplement the algorithms described here if they do not
   want to include these two source files.
 



More information about the systemd-commits mailing list