diff --git a/Makefile.am b/Makefile.am
index dad97ca..75b31ab 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -201,6 +201,7 @@ endif
 endif
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 rootbin_PROGRAMS = \
 	systemctl \
 	systemd-notify \
@@ -347,6 +348,7 @@ dist_userunit_DATA = \
 
 nodist_userunit_DATA = \
 	units/user/exit.service
+endif #!UDEV_ONLY
 
 EXTRA_DIST += \
 	units/getty@.service.m4 \
@@ -382,6 +384,7 @@ EXTRA_DIST += \
 	introspect.awk \
 	man/custom-html.xsl
 
+if !UDEV_ONLY
 if TARGET_FEDORA
 dist_systemunit_DATA += \
 	units/fedora/prefdm.service \
@@ -436,6 +439,7 @@ dist_systemunit_DATA += \
 
 nodist_systemunit_DATA += \
 	units/systemd-ask-password-plymouth.service
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	units/systemd-ask-password-plymouth.service.in
@@ -452,6 +456,7 @@ dist_doc_DATA = \
 @INTLTOOL_POLICY_RULE@
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 MANPAGES = \
 	man/systemd.1 \
 	man/systemctl.1 \
@@ -503,6 +508,7 @@ MANPAGES_ALIAS = \
 	man/reboot.8 \
 	man/poweroff.8 \
 	man/init.1
+endif # !UDEV_ONLY
 
 man/reboot.8: man/halt.8
 man/poweroff.8: man/halt.8
@@ -527,8 +533,10 @@ EXTRA_DIST += \
 	$(MANPAGES_ALIAS)
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 noinst_LTLIBRARIES += \
 	libsystemd-shared.la
+endif
 
 libsystemd_shared_la_SOURCES = \
 	src/shared/linux/auto_dev-ioctl.h \
@@ -586,8 +594,10 @@ libsystemd_shared_la_SOURCES = \
 	src/shared/hwclock.h
 
 #-------------------------------------------------------------------------------
+if !UDEV_ONLY
 noinst_LTLIBRARIES += \
 	libsystemd-dbus.la
+endif
 
 libsystemd_dbus_la_SOURCES = \
 	src/shared/dbus-common.c \
@@ -605,8 +615,10 @@ libsystemd_dbus_la_LIBADD = \
 	$(DBUS_LIBS)
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 noinst_LTLIBRARIES += \
 	libsystemd-label.la
+endif
 
 libsystemd_label_la_SOURCES = \
 	src/shared/install.c \
@@ -633,8 +645,10 @@ libsystemd_label_la_LIBADD = \
 	$(SELINUX_LIBS)
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 noinst_LTLIBRARIES += \
 	libsystemd-logs.la
+endif
 
 libsystemd_logs_la_SOURCES = \
 	src/shared/logs-show.c \
@@ -648,8 +662,10 @@ libsystemd_logs_la_LIBADD = \
 	libsystemd-id128.la
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 noinst_LTLIBRARIES += \
 	libsystemd-capability.la
+endif
 
 libsystemd_capability_la_SOURCES = \
 	src/shared/capability.c \
@@ -663,8 +679,10 @@ libsystemd_capability_la_LIBADD = \
 	$(CAP_LIBS)
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 noinst_LTLIBRARIES += \
 	libsystemd-audit.la
+endif
 
 libsystemd_audit_la_SOURCES = \
 	src/shared/audit.c \
@@ -675,8 +693,10 @@ libsystemd_audit_la_LIBADD = \
 
 # ------------------------------------------------------------------------------
 if HAVE_ACL
+if !UDEV_ONLY
 noinst_LTLIBRARIES += \
 	libsystemd-acl.la
+endif
 
 libsystemd_acl_la_SOURCES = \
 	src/shared/acl-util.c \
@@ -691,8 +711,10 @@ libsystemd_acl_la_LIBADD = \
 endif
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 noinst_LTLIBRARIES += \
 	libsystemd-core.la
+endif
 
 libsystemd_core_la_SOURCES = \
 	src/core/unit.c \
@@ -833,6 +855,7 @@ CLEANFILES += \
 	src/core/load-fragment-gperf-nulstr.c
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 systemd_SOURCES = \
 	src/core/main.c
 
@@ -881,11 +904,13 @@ org.freedesktop.systemd1.%.xml: systemd
 
 pkgconfigdata_DATA = \
 	src/core/systemd.pc
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	src/core/systemd.pc.in
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 noinst_PROGRAMS += \
 	test-engine \
 	test-job-type \
@@ -903,6 +928,7 @@ TESTS += \
 	test-job-type \
 	test-env-replace \
 	test-strv
+endif
 
 test_engine_SOURCES = \
 	src/test/test-engine.c
@@ -990,8 +1016,10 @@ test_watchdog_LDADD = \
 	libsystemd-shared.la
 
 # ------------------------------------------------------------------------------
+if !UDEV_ONLY
 systemd_initctl_SOURCES = \
 	src/initctl/initctl.c
+endif
 
 systemd_initctl_CFLAGS = \
 	$(AM_CFLAGS) \
@@ -1281,8 +1309,10 @@ libsystemd_daemon_la_LDFLAGS = \
 	-version-info $(LIBSYSTEMD_DAEMON_CURRENT):$(LIBSYSTEMD_DAEMON_REVISION):$(LIBSYSTEMD_DAEMON_AGE) \
 	-Wl,--version-script=$(top_srcdir)/src/libsystemd-daemon/libsystemd-daemon.sym
 
+if !UDEV_ONLY
 pkginclude_HEADERS += \
 	src/systemd/sd-daemon.h
+endif
 
 # move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
 libsystemd-daemon-install-hook:
@@ -1294,12 +1324,15 @@ libsystemd-daemon-install-hook:
 		mv $(DESTDIR)$(libdir)/libsystemd-daemon.so.* $(DESTDIR)$(rootlibdir); \
 	fi
 
+if !UDEV_ONLY
 INSTALL_EXEC_HOOKS += \
 	libsystemd-daemon-install-hook
+endif
 
 libsystemd-daemon-uninstall-hook:
 	rm -f $(DESTDIR)$(rootlibdir)/libsystemd-daemon.so*
 
+if !UDEV_ONLY
 UNINSTALL_EXEC_HOOKS += \
 	libsystemd-daemon-uninstall-hook
 
@@ -1322,6 +1355,7 @@ MANPAGES_ALIAS += \
 	man/sd_is_socket_inet.3 \
 	man/sd_is_mq.3 \
 	man/sd_notifyf.3
+endif # !UDEV_ONLY
 
 man/sd_is_socket.3: man/sd_is_fifo.3
 man/sd_is_socket_unix.3: man/sd_is_fifo.3
@@ -1470,13 +1504,17 @@ systemd-install-hook:
 	ln -sf ../systemd-udev.service $(DESTDIR)$(systemunitdir)/sysinit.target.wants/systemd-udev.service
 	ln -sf ../systemd-udev-trigger.service $(DESTDIR)$(systemunitdir)/sysinit.target.wants/systemd-udev-trigger.service
 
+if !UDEV_ONLY
 INSTALL_DATA_HOOKS += systemd-install-hook
+endif
 
 bin_PROGRAMS += \
 	udevadm
 
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-udevd
+endif
 
 noinst_LTLIBRARIES += \
 	libudev-core.la
@@ -2019,6 +2057,7 @@ test_id128_LDADD = \
 	libsystemd-shared.la \
 	libsystemd-id128.la
 
+if !UDEV_ONLY
 noinst_PROGRAMS += \
 	test-id128
 
@@ -2052,6 +2091,7 @@ libsystemd-id128-uninstall-hook:
 
 UNINSTALL_EXEC_HOOKS += \
 	libsystemd-id128-uninstall-hook
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	src/libsystemd-id128/libsystemd-id128.pc.in \
@@ -2182,6 +2222,7 @@ libsystemd_journal_la_LIBADD += \
 	$(XZ_LIBS)
 endif
 
+if !UDEV_ONLY
 # move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
 libsystemd-journal-install-hook:
 	if test "$(libdir)" != "$(rootlibdir)"; then \
@@ -2246,6 +2287,7 @@ journal-install-data-hook:
 
 INSTALL_DATA_HOOKS += \
 	journal-install-data-hook
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	src/journal/libsystemd-journal.pc.in \
@@ -2267,11 +2309,13 @@ systemd_coredump_LDADD = \
 	libsystemd-label.la \
 	libsystemd-shared.la
 
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-coredump
 
 sysctl_DATA = \
 	sysctl.d/coredump.conf
+endif
 
 EXTRA_DIST += \
 	sysctl.d/coredump.conf.in
@@ -2288,6 +2332,7 @@ systemd_binfmt_SOURCES = \
 systemd_binfmt_LDADD = \
 	libsystemd-shared.la
 
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-binfmt
 
@@ -2314,6 +2359,7 @@ INSTALL_DATA_HOOKS += \
 
 MANPAGES += \
 	man/binfmt.d.5
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	units/systemd-binfmt.service.in
@@ -2327,6 +2373,7 @@ systemd_vconsole_setup_SOURCES = \
 systemd_vconsole_setup_LDADD = \
 	libsystemd-shared.la
 
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-vconsole-setup
 
@@ -2345,6 +2392,7 @@ INSTALL_DATA_HOOKS += \
 
 MANPAGES += \
 	man/vconsole.conf.5
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	units/systemd-vconsole-setup.service.in
@@ -2371,6 +2419,7 @@ systemd_readahead_replay_LDADD = \
 	libsystemd-daemon.la \
 	libudev.la
 
+if !UDEV_ONLY
 pkginclude_HEADERS += \
 	src/systemd/sd-readahead.h
 
@@ -2386,24 +2435,29 @@ nodist_systemunit_DATA += \
 	units/systemd-readahead-collect.service \
 	units/systemd-readahead-replay.service \
 	units/systemd-readahead-done.service
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	units/systemd-readahead-collect.service.in \
 	units/systemd-readahead-replay.service.in \
 	units/systemd-readahead-done.service.in
 
+if !UDEV_ONLY
 MANPAGES += \
 	man/sd_readahead.3 \
 	man/sd-readahead.7
 endif
+endif
 
 # ------------------------------------------------------------------------------
 if ENABLE_QUOTACHECK
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-quotacheck
 
 nodist_systemunit_DATA += \
 	units/quotacheck.service
+endif
 
 EXTRA_DIST += \
 	units/quotacheck.service.in
@@ -2417,12 +2471,14 @@ endif
 
 # ------------------------------------------------------------------------------
 if ENABLE_RANDOMSEED
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-random-seed
 
 nodist_systemunit_DATA += \
 	units/systemd-random-seed-save.service \
 	units/systemd-random-seed-load.service
+endif
 
 EXTRA_DIST += \
 	units/systemd-random-seed-save.service.in \
@@ -2446,12 +2502,15 @@ randomseed-install-data-hook:
 		rm -f systemd-random-seed-load.service && \
 		$(LN_S) ../systemd-random-seed-load.service systemd-random-seed-load.service )
 
+if !UDEV_ONLY
 INSTALL_DATA_HOOKS += \
 	randomseed-install-data-hook
 endif
+endif
 
 # ------------------------------------------------------------------------------
 if HAVE_LIBCRYPTSETUP
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-cryptsetup
 
@@ -2460,6 +2519,7 @@ systemgenerator_PROGRAMS += \
 
 dist_systemunit_DATA += \
 	units/cryptsetup.target
+endif # !UDEV_ONLY
 
 systemd_cryptsetup_SOURCES = \
 	src/cryptsetup/cryptsetup.c
@@ -2488,9 +2548,11 @@ cryptsetup-install-data-hook:
 		rm -f cryptsetup.target && \
 		$(LN_S) ../cryptsetup.target cryptsetup.target )
 
+if !UDEV_ONLY
 INSTALL_DATA_HOOKS += \
 	cryptsetup-install-data-hook
 endif
+endif
 
 # ------------------------------------------------------------------------------
 if ENABLE_HOSTNAMED
@@ -2506,6 +2568,7 @@ systemd_hostnamed_LDADD = \
 	libsystemd-daemon.la \
 	libsystemd-dbus.la
 
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-hostnamed
 
@@ -2536,6 +2599,7 @@ hostnamed-install-data-hook:
 
 INSTALL_DATA_HOOKS += \
 	hostnamed-install-data-hook
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	units/systemd-hostnamed.service.in
@@ -2556,6 +2620,7 @@ systemd_localed_LDADD = \
 	libsystemd-daemon.la \
 	libsystemd-dbus.la
 
+if !UDEV_ONLY
 nodist_systemunit_DATA += \
 	units/systemd-localed.service
 
@@ -2586,15 +2651,18 @@ localed-install-data-hook:
 
 INSTALL_DATA_HOOKS += \
 	localed-install-data-hook
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	units/systemd-localed.service.in
 
+if !UDEV_ONLY
 dist_pkgdata_DATA = \
 	src/locale/kbd-model-map
 
 dist_noinst_SCRIPT = \
 	src/locale/generate-kbd-model-map
+endif
 
 update-kbd-model-map:
 	src/locale/generate-kbd-model-map > src/locale/kbd-model-map
@@ -2615,6 +2683,7 @@ systemd_timedated_LDADD = \
 	libsystemd-daemon.la \
 	libsystemd-dbus.la
 
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-timedated
 
@@ -2645,6 +2714,7 @@ timedated-install-data-hook:
 
 INSTALL_DATA_HOOKS += \
 	timedated-install-data-hook
+endif # !UDEV_ONLY
 
 EXTRA_DIST += \
 	units/systemd-timedated.service.in
@@ -2717,8 +2787,10 @@ loginctl_LDADD = \
 	libsystemd-dbus.la \
 	libudev.la
 
+if !UDEV_ONLY
 rootbin_PROGRAMS += \
 	loginctl
+endif
 
 systemd_inhibit_SOURCES = \
 	src/login/inhibit.c
@@ -2731,8 +2803,10 @@ systemd_inhibit_LDADD = \
 	libsystemd-shared.la \
 	libsystemd-dbus.la
 
+if !UDEV_ONLY
 rootbin_PROGRAMS += \
 	systemd-inhibit
+endif
 
 test_login_SOURCES = \
 	src/login/test-login.c
@@ -2752,9 +2826,11 @@ test_inhibit_CFLAGS = \
 	$(AM_CFLAGS) \
 	$(DBUS_CFLAGS)
 
+if !UDEV_ONLY
 noinst_PROGRAMS += \
 	test-login \
 	test-inhibit
+endif
 
 libsystemd_login_la_SOURCES = \
 	src/login/sd-login.c
@@ -2797,10 +2873,13 @@ pam_systemd_la_LIBADD = \
 	libsystemd-shared.la \
 	$(PAM_LIBS)
 
+if !UDEV_ONLY
 pamlib_LTLIBRARIES = \
 	pam_systemd.la
 endif
+endif
 
+if !UDEV_ONLY
 # move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
 libsystemd-login-install-hook:
 	if test "$(libdir)" != "$(rootlibdir)"; then \
@@ -2859,6 +2938,7 @@ logind-install-data-hook:
 
 INSTALL_DATA_HOOKS += \
 	logind-install-data-hook
+endif # !UDEV_ONLY
 
 systemd_multi_seat_x_SOURCES = \
 	src/login/multi-seat-x.c
@@ -2868,6 +2948,7 @@ systemd_multi_seat_x_LDADD = \
 	libsystemd-shared.la \
 	libudev.la
 
+if !UDEV_ONLY
 rootlibexec_PROGRAMS += \
 	systemd-multi-seat-x
 
@@ -2908,6 +2989,7 @@ MANPAGES_ALIAS += \
 	man/sd_seat_can_multi_session.3 \
 	man/sd_get_sessions.3 \
 	man/sd_get_uids.3
+endif # !UDEV_ONLY
 
 man/sd_login_monitor_unref.3: man/sd_login_monitor_new.3
 man/sd_login_monitor_flush.3: man/sd_login_monitor_new.3
@@ -3011,9 +3093,11 @@ units/%: units/%.m4 Makefile
 units/user/%: units/%.m4 Makefile
 	$(M4_PROCESS_USER)
 
+if !UDEV_ONLY
 nodist_polkitpolicy_DATA = \
 	$(polkitpolicy_in_files:.policy.in=.policy) \
 	$(polkitpolicy_in_in_files:.policy.in.in=.policy)
+endif
 
 EXTRA_DIST += \
 	$(polkitpolicy_in_files) \
@@ -3069,6 +3153,7 @@ DBUS_PREPROCESS = $(CPP) -P $(DBUS_CFLAGS) -imacros dbus/dbus-protocol.h
 CLEANFILES += \
 	$(dbusinterface_DATA)
 
+if !UDEV_ONLY
 systemd-install-data-hook:
 	$(MKDIR_P) -m 0755 \
 		$(DESTDIR)$(tmpfilesdir) \
@@ -3276,6 +3361,7 @@ if TARGET_MAGEIA
 		rm -f display-manager.service && \
 		$(LN_S) $(systemunitdir)/display-manager.service display-manager.service )
 endif
+endif # !UDEV_ONLY
 
 install-exec-hook: $(INSTALL_EXEC_HOOKS)
 
diff --git a/configure.ac b/configure.ac
index db25243..aa5af45 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,8 +44,21 @@ AS_IF([test "x$host_cpu" = "xmips" || test "x$host_cpu" = "xmipsel" ||
 LT_PREREQ(2.2)
 LT_INIT
 
+# figure out early if we only want udev
+AC_ARG_ENABLE([udev-only],
+              [AS_HELP_STRING([--enable-udev-only],
+                              [build only udev (default: no)])],,
+              [enable_udev_only=no])
+case "$enable_udev_only" in
+yes|no) ;;
+*) enable_udev_only=no ;;
+esac
+AM_CONDITIONAL([UDEV_ONLY], [test $enable_udev_only = yes])
+
 # i18n stuff for the PolicyKit policy files
-IT_PROG_INTLTOOL([0.40.0])
+if [ $enable_udev_only = no ]; then
+        IT_PROG_INTLTOOL([0.40.0])
+fi
 
 GETTEXT_PACKAGE=systemd
 AC_SUBST(GETTEXT_PACKAGE)
@@ -143,7 +156,9 @@ AC_SUBST(CAP_LIBS)
 # This makes sure pkg.m4 is available.
 m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
 
-PKG_CHECK_MODULES(DBUS, [dbus-1 >= 1.3.2])
+if [ $enable_udev_only = no ]; then
+        PKG_CHECK_MODULES(DBUS, [dbus-1 >= 1.3.2])
+fi
 PKG_CHECK_MODULES(KMOD, [libkmod >= 5])
 PKG_CHECK_MODULES(BLKID,[blkid >= 2.20])
 
