test: make [ and [[ forms individually selectable
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 23 Nov 2016 17:31:48 +0000 (18:31 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 23 Nov 2016 17:31:48 +0000 (18:31 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/test.c
include/applets.h.sh
shell/ash.c

index 81c9b7dfe65ad817774ae48a61576a67ba7153e5..9e18ee986aa1947dca18a49092e4fff247207e87 100644 (file)
 //config:        returning an appropriate exit code. The bash shell
 //config:        has test built in, ash can build it in optionally.
 //config:
+//config:config TEST1
+//config:      bool "test as ["
+//config:      default y
+//config:      help
+//config:        Provide test command in the "[ EXPR ]" form
+//config:
+//config:config TEST2
+//config:      bool "test as [["
+//config:      default y
+//config:      help
+//config:        Provide test command in the "[[ EXPR ]]" form
+//config:
 //config:config FEATURE_TEST_64
 //config:      bool "Extend test to 64 bit"
 //config:      default y
-//config:      depends on TEST || ASH_BUILTIN_TEST || HUSH
+//config:      depends on TEST || TEST1 || TEST2 || ASH_BUILTIN_TEST || HUSH
 //config:      help
 //config:        Enable 64-bit support in test.
 
-//applet:IF_TEST(APPLET_NOFORK([,  test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
-//applet:IF_TEST(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
 //applet:IF_TEST(APPLET_NOFORK(test, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
+//applet:IF_TEST1(APPLET_NOFORK([,  test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
+//applet:IF_TEST2(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
 
 //kbuild:lib-$(CONFIG_TEST) += test.o test_ptr_hack.o
-//kbuild:lib-$(CONFIG_ASH) += test.o test_ptr_hack.o
+//kbuild:lib-$(CONFIG_TEST1) += test.o test_ptr_hack.o
+//kbuild:lib-$(CONFIG_TEST2) += test.o test_ptr_hack.o
+//kbuild:lib-$(CONFIG_ASH_BUILTIN_TEST) += test.o test_ptr_hack.o
 //kbuild:lib-$(CONFIG_HUSH) += test.o test_ptr_hack.o
 
 /* "test --help" is special-cased to ignore --help */
@@ -827,7 +841,9 @@ int test_main(int argc, char **argv)
        const char *arg0;
 
        arg0 = bb_basename(argv[0]);
-       if (arg0[0] == '[') {
+       if ((ENABLE_TEST1 || ENABLE_TEST2 || ENABLE_ASH_BUILTIN_TEST || ENABLE_HUSH)
+        && (arg0[0] == '[')
+       ) {
                --argc;
                if (!arg0[1]) { /* "[" ? */
                        if (NOT_LONE_CHAR(argv[argc], ']')) {
index 6b8046c4bd9d51cc6d926664291f636946c135af..bab4e0d7214c65786b69b5a3000e387aea5d158b 100755 (executable)
@@ -5,13 +5,17 @@
 
 # CONFIG_applet names
 grep ^IF_ applets.h | grep -v IF_FEATURE_ | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \
-| grep -v MODPROBE_SMALL | sed 's/BB_SYSCTL/SYSCTL/' \
+| grep -v MODPROBE_SMALL \
+| sed 's/BB_SYSCTL/SYSCTL/' \
+| sed 's/TEST1/[/' \
+| sed 's/TEST2/[[/' \
 | sort | uniq \
 >applets_APP1
 
 # command line applet names
 grep ^IF_ applets.h | sed -e's/ //g' -e's/.*(\([a-z[][^,]*\),.*/\1/' \
-| grep -v '^bash$' | grep -v '^sh$' \
+| grep -v '^bash$' \
+| grep -v '^sh$' \
 | tr a-z A-Z \
 | sort | uniq \
 >applets_APP2
index 87f2127a1f491d81da431e2692a2bbe8cb94a0dd..15246f55f78ce2e238f7343dc2fc5b0684b055e4 100644 (file)
@@ -9282,9 +9282,9 @@ static const struct builtincmd builtintab[] = {
        { BUILTIN_SPEC_REG      ":"       , truecmd    },
 #if ENABLE_ASH_BUILTIN_TEST
        { BUILTIN_REGULAR       "["       , testcmd    },
-#if ENABLE_ASH_BASH_COMPAT
+# if ENABLE_ASH_BASH_COMPAT
        { BUILTIN_REGULAR       "[["      , testcmd    },
-#endif
+# endif
 #endif
 #if ENABLE_ASH_ALIAS
        { BUILTIN_REG_ASSG      "alias"   , aliascmd   },