[PATCH] mim: run scripts from a specification file

Denys Vlasenko vda.linux at googlemail.com
Thu Apr 30 15:24:57 UTC 2020


Applied with some changes, thanks!

On Mon, Jan 13, 2020 at 11:33 AM Ron Yorston <rmy at pobox.com> wrote:
>
> 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>
> ---
>  applets_sh/mim  | 53 +++++++++++++++++++++++++++++++++++++++++++++++++
>  miscutils/mim.c | 16 +++++++++++++++
>  2 files changed, 69 insertions(+)
>  create mode 100755 applets_sh/mim
>  create mode 100644 miscutils/mim.c
>
> diff --git a/applets_sh/mim b/applets_sh/mim
> new file mode 100755
> index 000000000..fd4152568
> --- /dev/null
> +++ b/applets_sh/mim
> @@ -0,0 +1,53 @@
> +#!/bin/sh
> +
> +MIMFILE="Mimfile"
> +if [ $# -ge 2 ] && [ "$1" = "-f" ]
> +then
> +       MIMFILE="$2"
> +       shift 2
> +fi
> +
> +if [ ! -f "$MIMFILE" ]
> +then
> +       printf "Unable to open '%s'\n" "$MIMFILE"
> +       exit 1
> +fi
> +
> +(
> +       INCASE=0
> +
> +       while read -r REPLY
> +       do
> +               case $REPLY in
> +               *:)
> +                       if [ $INCASE -eq 0 ]
> +                       then
> +                               printf "if [ \$# -eq 0 ]\n"
> +                               printf "then\n"
> +                               printf "\tTARGET=\"%s\"\n" "${REPLY%:}"
> +                               printf "else\n"
> +                               printf "\tTARGET=\"\$1\"\n"
> +                               printf "\tshift\n"
> +                               printf "fi\n"
> +                               printf "case \"\$TARGET\" in\n"
> +                       else
> +                               printf "\t;;\n"
> +                       fi
> +                       printf "%s)\n" "${REPLY%:}"
> +                       INCASE=1
> +                       ;;
> +               "") ;;
> +               *) printf "\t%s\n" "${REPLY##[  ]}";;
> +               esac
> +       done <"$MIMFILE"
> +
> +       if [ $INCASE -eq 1 ]
> +       then
> +               printf "\t;;\n"
> +       fi
> +       printf "*)\n"
> +       printf "\techo \"Unknown command '\$TARGET'\"\n"
> +       printf "\texit 1\n"
> +       printf "\t;;\n"
> +       printf "esac\n"
> +) | sh -s "$@"
> diff --git a/miscutils/mim.c b/miscutils/mim.c
> new file mode 100644
> index 000000000..1cf67e1f3
> --- /dev/null
> +++ b/miscutils/mim.c
> @@ -0,0 +1,16 @@
> +//config:config MIM
> +//config:      bool "mim (0.5 kb)"
> +//config:      default n
> +//config:      depends on FEATURE_SH_EMBEDDED_SCRIPTS
> +//config:      depends on ASH_PRINTF || HUSH_PRINTF || PRINTF
> +//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)"
> --
> 2.24.1
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox


More information about the busybox mailing list