[git commit] mim: run scripts from a specification file

Denys Vlasenko vda.linux at googlemail.com
Thu Apr 30 15:23:08 UTC 2020


commit: https://git.busybox.net/busybox/commit/?id=981b2eff814bd186188ad66a32990a6d17b37a3e
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

mim runs scripts from a specification file which can be thought
of as an extremely limited Makefile. Neither make variables nor
dependencies are supported. By default the file 'Mimfile' is read.
An example:

   hello:
      echo hello $1

   clean:
      rm -rf *

The command 'mim' or 'mim hello' will echo 'hello'. Unlike 'make'
arguments after the first are available to the script; they don't
specify additional targets.

mim isn't enabled by default.  Enabling it increases the size of the
binary by about 500 bytes.

Signed-off-by: Ron Yorston <rmy at pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 applets_sh/mim  | 39 +++++++++++++++++++++++++++++++++++++++
 miscutils/mim.c | 15 +++++++++++++++
 2 files changed, 54 insertions(+)

diff --git a/applets_sh/mim b/applets_sh/mim
new file mode 100755
index 000000000..2a65c35bb
--- /dev/null
+++ b/applets_sh/mim
@@ -0,0 +1,39 @@
+#!/bin/sh
+MIMFILE="Mimfile"
+if [ $# -ge 2 ] && [ "$1" = "-f" ]
+then
+	MIMFILE="$2"
+	shift 2
+fi
+exec <"$MIMFILE" || exit 1
+{
+	INCASE=false
+	while read -r REPLY
+	do
+		case $REPLY in
+		*:)
+			if ! $INCASE
+			then
+				printf '[ $# -eq 0 ] && set -- "%s"
+TARGET="$1"
+shift
+case "$TARGET" in
+' "${REPLY%:}"
+			else
+				printf ';;\n'
+			fi
+			printf '%s)\n' "${REPLY%:}"
+			INCASE=true
+			;;
+		"") ;;
+		*) printf '%s\n' "${REPLY##[ 	]}";;
+		esac
+	done
+	$INCASE && printf ';;\n'
+	printf '*)
+echo "Unknown command $TARGET"
+exit 1
+;;
+esac
+'
+} | sh -s "$@"
diff --git a/miscutils/mim.c b/miscutils/mim.c
new file mode 100644
index 000000000..d9b4694cb
--- /dev/null
+++ b/miscutils/mim.c
@@ -0,0 +1,15 @@
+//config:config MIM
+//config:	bool "mim (0.5 kb)"
+//config:	default y
+//config:	depends on FEATURE_SH_EMBEDDED_SCRIPTS
+//config:	help
+//config:	Run a script from a Makefile-like specification file.
+//config:	Unlike 'make' dependencies aren't supported.
+
+//applet:IF_MIM(APPLET_SCRIPTED(mim, scripted, BB_DIR_USR_SBIN, BB_SUID_DROP, mim))
+
+//usage:#define mim_trivial_usage
+//usage:	"[-f FILE] [SHELL_OPTIONS] [TARGET] ..."
+//usage:#define mim_full_usage "\n\n"
+//usage:	"Run a script from a Makefile-like specification file\n"
+//usage:     "\n	-f FILE		Spec file (default Mimfile)"


More information about the busybox-cvs mailing list