modprobe-small: make applets individually selectable
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 23 Dec 2016 14:12:27 +0000 (15:12 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 1 Jan 2017 12:01:04 +0000 (13:01 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/applets.h.sh
make_single_applets.sh
modutils/depmod.c
modutils/insmod.c
modutils/lsmod.c
modutils/modprobe-small.c
modutils/modprobe.c
modutils/rmmod.c

index be8b92404ace8603aeb805d97a45d7eaa0584d76..be117cf84abf3b867494010db1b0d2fed61b65aa 100755 (executable)
@@ -4,8 +4,7 @@
 # enabling it. Run it after applets.h is generated.
 
 # CONFIG_applet names
-grep ^IF_ applets.h | grep -v IF_FEATURE_ | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \
-| grep -v MODPROBE_SMALL \
+grep ^IF_ applets.h | grep -v ^IF_FEATURE_ | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \
 | sort | uniq \
 >applets_APP1
 
index 5b9393e33dcfaa42091e586e2e403b6fb07668b5..6473e4dddb98cd510251b65d334b788a4a990eef 100755 (executable)
@@ -14,7 +14,6 @@ apps="`
 grep ^IF_ include/applets.h \
 | grep -v ^IF_FEATURE_ \
 | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \
-| grep -v ^MODPROBE_SMALL \
 | sort | uniq
 `"
 
@@ -46,6 +45,11 @@ for app in $apps; do
                : $((fail++))
                echo "Build error for ${app}"
                mv .config busybox_config_${app}
+       elif ! grep -q '^#define NUM_APPLETS 1$' include/NUM_APPLETS.h; then
+               mv busybox busybox_${app}
+               : $((fail++))
+               echo "NUM_APPLETS != 1 for ${app}: `cat include/NUM_APPLETS.h`"
+               mv .config busybox_config_${app}
        else
                mv busybox busybox_${app}
                rm busybox_make_${app}.log
@@ -53,5 +57,6 @@ for app in $apps; do
        mv .config.SV .config
        #exit
 done
+touch .config # or else next "make" can be confused
 echo "Failures: $fail"
 test $fail = 0 # set exitcode
index b9347027e779fc7333030766ed94230a1262d456..cfa9abb1aee15ef4b59e6c0690cd4f3c524ec28a 100644 (file)
@@ -9,15 +9,16 @@
  */
 //config:config DEPMOD
 //config:      bool "depmod"
-//config:      default n
-//config:      depends on !MODPROBE_SMALL
+//config:      default y
 //config:      select PLATFORM_LINUX
 //config:      help
 //config:        depmod generates modules.dep (and potentially modules.alias
 //config:        and modules.symbols) that contain dependency information
 //config:        for modprobe.
 
-//applet:IF_DEPMOD(APPLET(depmod, BB_DIR_SBIN, BB_SUID_DROP))
+//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y)
+//applet:IF_DEPMOD(IF_NOT_MODPROBE_SMALL(APPLET(depmod, BB_DIR_SBIN, BB_SUID_DROP)))
+//kbuild:endif
 
 //kbuild:lib-$(CONFIG_DEPMOD) += depmod.o modutils.o
 
index 2ebf4beb99f786ad79a11eb43bfb2e5fc1978843..5949fe5519c382ee28983f12c9a293a6a01b271b 100644 (file)
@@ -9,14 +9,15 @@
 //config:config INSMOD
 //config:      bool "insmod"
 //config:      default n
-//config:      depends on !MODPROBE_SMALL
 //config:      select PLATFORM_LINUX
 //config:      help
 //config:        insmod is used to load specified modules in the running kernel.
 
-//applet:IF_INSMOD(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP))
+//applet:IF_INSMOD(IF_NOT_MODPROBE_SMALL(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP)))
 
+//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y)
 //kbuild:lib-$(CONFIG_INSMOD) += insmod.o modutils.o
+//kbuild:endif
 
 #include "libbb.h"
 #include "modutils.h"
index ee85fb0fb0a7ce24de149869152d21e05eb1e4bf..24589420adf5f878b432b750ca6256bf38ee94b2 100644 (file)
@@ -9,25 +9,26 @@
  */
 //config:config LSMOD
 //config:      bool "lsmod"
-//config:      default n
-//config:      depends on !MODPROBE_SMALL
+//config:      default y
 //config:      select PLATFORM_LINUX
 //config:      help
 //config:        lsmod is used to display a list of loaded modules.
 //config:
 //config:config FEATURE_LSMOD_PRETTY_2_6_OUTPUT
 //config:      bool "Pretty output"
-//config:      default n
-//config:      depends on LSMOD
+//config:      default y
+//config:      depends on LSMOD && !MODPROBE_SMALL
 //config:      select PLATFORM_LINUX
 //config:      help
 //config:        This option makes output format of lsmod adjusted to
 //config:        the format of module-init-tools for Linux kernel 2.6.
 //config:        Increases size somewhat.
 
-//applet:IF_LSMOD(APPLET(lsmod, BB_DIR_SBIN, BB_SUID_DROP))
+//applet:IF_LSMOD(IF_NOT_MODPROBE_SMALL(APPLET(lsmod, BB_DIR_SBIN, BB_SUID_DROP)))
 
+//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y)
 //kbuild:lib-$(CONFIG_LSMOD) += lsmod.o modutils.o
+//kbuild:endif
 
 //usage:#if !ENABLE_MODPROBE_SMALL
 //usage:#define lsmod_trivial_usage
index e3a349b4edf242bc43e9c6310fc8bc8fdbbd107f..652ff4dfa984ec0e4792be91f0efbe3842de4a0e 100644 (file)
 //config:      help
 //config:        Check if the module is already loaded.
 
-//applet:IF_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))
-//applet:IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, depmod))
-//applet:IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, insmod))
-//applet:IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, lsmod))
-//applet:IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, rmmod))
+//applet:IF_MODPROBE(IF_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP)))
+//applet:IF_DEPMOD(IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, depmod)))
+//applet:IF_INSMOD(IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, insmod)))
+//applet:IF_LSMOD(IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, lsmod)))
+//applet:IF_RMMOD(IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, rmmod)))
 
 //kbuild:lib-$(CONFIG_MODPROBE_SMALL) += modprobe-small.o
 
@@ -930,7 +930,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
        IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(char *options;)
 
        /* are we lsmod? -> just dump /proc/modules */
-       if ('l' == applet0) {
+       if (ENABLE_LSMOD && 'l' == applet0) {
                xprint_and_close_file(xfopen_for_read("/proc/modules"));
                return EXIT_SUCCESS;
        }
@@ -940,14 +940,14 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
        /* Prevent ugly corner cases with no modules at all */
        modinfo = xzalloc(sizeof(modinfo[0]));
 
-       if ('i' != applet0) { /* not insmod */
+       if (!ENABLE_INSMOD || 'i' != applet0) { /* not insmod */
                /* Goto modules directory */
                xchdir(CONFIG_DEFAULT_MODULES_DIR);
        }
        uname(&uts); /* never fails */
 
        /* depmod? */
-       if ('d' == applet0) {
+       if (ENABLE_DEPMOD && 'd' == applet0) {
                /* Supported:
                 * -n: print result to stdout
                 * -a: process all modules (default)
@@ -986,11 +986,11 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
        argv += optind;
 
        /* are we rmmod? -> simulate modprobe -r */
-       if ('r' == applet0) {
+       if (ENABLE_RMMOD && 'r' == applet0) {
                option_mask32 |= OPT_r;
        }
 
-       if ('i' != applet0) { /* not insmod */
+       if (!ENABLE_INSMOD || 'i' != applet0) { /* not insmod */
                /* Goto $VERSION directory */
                xchdir(uts.release);
        }
@@ -1014,7 +1014,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
                argv[1] = NULL;
 #endif
 
-       if ('i' == applet0) { /* insmod */
+       if (ENABLE_INSMOD && 'i' == applet0) { /* insmod */
                size_t len;
                void *map;
 
@@ -1034,7 +1034,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
        }
 
        /* Try to load modprobe.dep.bb */
-       if ('r' != applet0) { /* not rmmod */
+       if (!ENABLE_RMMOD || 'r' != applet0) { /* not rmmod */
                load_dep_bb();
        }
 
index d404ef92f04bb67024a7e6ea517eb2bd3977a5e1..09e3de6c3783de5acdb5c7f68b6c951e4a6f4da3 100644 (file)
@@ -9,8 +9,7 @@
  */
 //config:config MODPROBE
 //config:      bool "modprobe"
-//config:      default n
-//config:      depends on !MODPROBE_SMALL
+//config:      default y
 //config:      select PLATFORM_LINUX
 //config:      help
 //config:        Handle the loading of modules, and their dependencies on a high
@@ -18,8 +17,8 @@
 //config:
 //config:config FEATURE_MODPROBE_BLACKLIST
 //config:      bool "Blacklist support"
-//config:      default n
-//config:      depends on MODPROBE
+//config:      default y
+//config:      depends on MODPROBE && !MODPROBE_SMALL
 //config:      select PLATFORM_LINUX
 //config:      help
 //config:        Say 'y' here to enable support for the 'blacklist' command in
 //config:        hardware autodetection scripts to load modules like evdev, frame
 //config:        buffer drivers etc.
 
-//applet:IF_MODPROBE(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))
+//applet:IF_MODPROBE(IF_NOT_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP)))
 
+//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y)
 //kbuild:lib-$(CONFIG_MODPROBE) += modprobe.o modutils.o
+//kbuild:endif
 
 #include "libbb.h"
 #include "modutils.h"
index e0358838a883d674bacf6350107c37505a63e996..4c4d50885a11643f42398111d2554581ce1c0062 100644 (file)
 //config:config RMMOD
 //config:      bool "rmmod"
 //config:      default n
-//config:      depends on !MODPROBE_SMALL
 //config:      select PLATFORM_LINUX
 //config:      help
 //config:        rmmod is used to unload specified modules from the kernel.
 
-//applet:IF_RMMOD(APPLET(rmmod, BB_DIR_SBIN, BB_SUID_DROP))
+//applet:IF_RMMOD(IF_NOT_MODPROBE_SMALL(APPLET(rmmod, BB_DIR_SBIN, BB_SUID_DROP)))
 
+//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y)
 //kbuild:lib-$(CONFIG_RMMOD) += rmmod.o modutils.o
+//kbuild:endif
 
 //usage:#if !ENABLE_MODPROBE_SMALL
 //usage:#define rmmod_trivial_usage