From 3bb4e05ce4a1c9ac1339b451c4c18cfef8bcbeb9 Mon Sep 17 00:00:00 2001 From: Richard Yao Date: Fri, 23 Nov 2012 00:20:15 -0500 Subject: Permit users to disable module loading support Inspired by e30431623a7d871da123cc37055ac49abf2c20ea from systemd. Signed-off-by: Richard Yao --- configure.ac | 38 ++++++++++++++++++++++++-------------- rules/75-probe_mtd.rules | 1 - rules/80-drivers.rules | 1 + rules/Makefile.am | 6 +++++- src/udev/Makefile.am | 11 ++++++----- src/udev/udev-builtin.c | 2 ++ src/udev/udev.h | 4 ++++ 7 files changed, 42 insertions(+), 21 deletions(-) diff --git a/configure.ac b/configure.ac index 489733c94f..73e82a947b 100644 --- a/configure.ac +++ b/configure.ac @@ -275,23 +275,33 @@ AC_SUBST([rootprefix], [$with_rootprefix]) AC_SUBST([rootlibdir], [$with_rootlibdir]) AC_SUBST([udevlibexecdir], [${with_rootlibdir}/udev]) -# ------------------------------------------------------------------------------ -AC_ARG_ENABLE([libkmod], [AS_HELP_STRING([--enable-libkmod], [Enable module loading through kmod @<:@default=disabled@:>@])], [], [with_libkmod=no]) +# ------------------------------------------------------------------------------ LIBKMOD= -AS_IF([test "x$with_libkmod" != xno], - [AC_CHECK_LIB([kmod], [main], - [PKG_CHECK_MODULES(KMOD, [libkmod >= 5]) - AC_SUBST([LIBKMOD], ["-lkmod"]) - AC_DEFINE([HAVE_LIBKMOD], [1], - [Define if you have libkmod]) - ], - [AC_MSG_FAILURE( - [--with-libkmod was given, but test for kmod failed])], - [-lkmod])]) - -AM_CONDITIONAL([HAVE_LIBKMOD], [test "$with_kmod" = "yes"]) +AC_ARG_ENABLE([modules], [AS_HELP_STRING([--disable-modules], [Disable loadable module support @<:@default=enabled@:>@])], [have_modules=no], [have_modules=yes]) +AC_ARG_ENABLE([libkmod], [AS_HELP_STRING([--enable-libkmod], [Enable module loading through kmod @<:@default=disabled@:>@])], [have_libkmod=yes], [have_libkmod=no]) + +if test "x$have_modules" == "xyes"; then + + AC_DEFINE([HAVE_MODULES], [1], [Define if we support loading modules]) + + AS_IF([test "x$have_libkmod" != xno], + [AC_CHECK_LIB([kmod], [main], + [PKG_CHECK_MODULES(KMOD, [libkmod >= 5]) + AC_SUBST([LIBKMOD], ["-lkmod"]) + AC_DEFINE([HAVE_LIBKMOD], [1], + [Define if you have libkmod]) + ], + [AC_MSG_FAILURE( + [--with-libkmod was given, but test for kmod failed])], + [-lkmod])]) + +fi + +AM_CONDITIONAL([HAVE_MODULES], [test "x$have_modules" == "xyes"]) +AM_CONDITIONAL([HAVE_LIBKMOD], [test "x$have_libkmod" == "xyes"]) + # ------------------------------------------------------------------------------ diff --git a/rules/75-probe_mtd.rules b/rules/75-probe_mtd.rules index c0e0839785..8848aeeaed 100644 --- a/rules/75-probe_mtd.rules +++ b/rules/75-probe_mtd.rules @@ -3,6 +3,5 @@ ACTION!="add", GOTO="mtd_probe_end" KERNEL=="mtd*ro", IMPORT{program}="mtd_probe $devnode" -KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", IMPORT{builtin}="kmod load sm_ftl" LABEL="mtd_probe_end" diff --git a/rules/80-drivers.rules b/rules/80-drivers.rules index 692510c912..3428cb28c9 100644 --- a/rules/80-drivers.rules +++ b/rules/80-drivers.rules @@ -3,6 +3,7 @@ ACTION=="remove", GOTO="drivers_end" DRIVER!="?*", ENV{MODALIAS}=="?*", IMPORT{builtin}="kmod load $env{MODALIAS}" +KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", IMPORT{builtin}="kmod load sm_ftl" SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", IMPORT{builtin}="kmod load tifm_sd" SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", IMPORT{builtin}="kmod load tifm_ms" SUBSYSTEM=="memstick", IMPORT{builtin}="kmod load ms_block mspro_block" diff --git a/rules/Makefile.am b/rules/Makefile.am index 8a1f64ff30..e8493036c4 100644 --- a/rules/Makefile.am +++ b/rules/Makefile.am @@ -20,9 +20,13 @@ dist_udevrules_DATA = \ 75-probe_mtd.rules \ 75-tty-description.rules \ 78-sound-card.rules \ - 80-drivers.rules \ 95-udev-late.rules +if HAVE_MODULES +dist_udevrules_DATA += \ + 80-drivers.rules +endif + if ENABLE_KEYMAP dist_udevrules_DATA += \ 95-keymap.rules \ diff --git a/src/udev/Makefile.am b/src/udev/Makefile.am index 7ceb31951a..2486824e86 100644 --- a/src/udev/Makefile.am +++ b/src/udev/Makefile.am @@ -50,7 +50,6 @@ libudev_core_la_SOURCES = \ udev-builtin-firmware.c \ udev-builtin-hwdb.c \ udev-builtin-input_id.c \ - udev-builtin-kmod.c \ udev-builtin-net_id.c \ udev-builtin-path_id.c \ udev-builtin-usb_id.c \ @@ -104,17 +103,19 @@ libudev_core_la_CFLAGS = \ $(AM_CFLAGS) \ $(BLKID_CFLAGS) -if HAVE_LIBKMOD -libudev_core_la_CFLAGS += $(KMOD_CFLAGS) -endif - libudev_core_la_LIBADD = \ $(top_builddir)/src/libudev/libudev-private.la \ $(BLKID_LIBS) +if HAVE_MODULES +libudev_core_la_SOURCES += \ + udev-builtin-kmod.c + if HAVE_LIBKMOD +libudev_core_la_CFLAGS += $(KMOD_CFLAGS) libudev_core_la_LIBADD += $(KMOD_LIBS) endif +endif if HAVE_ACL libudev_core_la_SOURCES += \ diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c index ee81b2d713..45494147eb 100644 --- a/src/udev/udev-builtin.c +++ b/src/udev/udev-builtin.c @@ -35,7 +35,9 @@ static const struct udev_builtin *builtins[] = { [UDEV_BUILTIN_FIRMWARE] = &udev_builtin_firmware, [UDEV_BUILTIN_HWDB] = &udev_builtin_hwdb, [UDEV_BUILTIN_INPUT_ID] = &udev_builtin_input_id, +#ifdef HAVE_MODULES [UDEV_BUILTIN_KMOD] = &udev_builtin_kmod, +#endif [UDEV_BUILTIN_NET_ID] = &udev_builtin_net_id, [UDEV_BUILTIN_PATH_ID] = &udev_builtin_path_id, [UDEV_BUILTIN_USB_ID] = &udev_builtin_usb_id, diff --git a/src/udev/udev.h b/src/udev/udev.h index 82cd2ad6d0..4c2861009f 100644 --- a/src/udev/udev.h +++ b/src/udev/udev.h @@ -139,7 +139,9 @@ enum udev_builtin_cmd { UDEV_BUILTIN_FIRMWARE, UDEV_BUILTIN_HWDB, UDEV_BUILTIN_INPUT_ID, +#ifdef HAVE_MODULES UDEV_BUILTIN_KMOD, +#endif UDEV_BUILTIN_NET_ID, UDEV_BUILTIN_PATH_ID, UDEV_BUILTIN_USB_ID, @@ -162,7 +164,9 @@ extern const struct udev_builtin udev_builtin_btrfs; extern const struct udev_builtin udev_builtin_firmware; extern const struct udev_builtin udev_builtin_hwdb; extern const struct udev_builtin udev_builtin_input_id; +#ifdef HAVE_MODULES extern const struct udev_builtin udev_builtin_kmod; +#endif extern const struct udev_builtin udev_builtin_net_id; extern const struct udev_builtin udev_builtin_path_id; extern const struct udev_builtin udev_builtin_usb_id; -- cgit v1.2.3-54-g00ecf