aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/embedded_scripts107
-rwxr-xr-xscripts/gen_build_files.sh21
2 files changed, 102 insertions, 26 deletions
diff --git a/scripts/embedded_scripts b/scripts/embedded_scripts
index 7245ba6e0..b7a023ce0 100755
--- a/scripts/embedded_scripts
+++ b/scripts/embedded_scripts
@@ -1,7 +1,8 @@
#!/bin/sh
target="$1"
-loc="$2"
+custom_loc="$2"
+applet_loc="$3"
test "$target" || exit 1
test "$SED" || SED=sed
@@ -14,46 +15,102 @@ if test $? != 0; then
exit 1
fi
-exec >"$target.$$"
-
-scripts=""
-if [ -d "$loc" ]
+custom_scripts=""
+if [ -d "$custom_loc" ]
then
- scripts=$(cd $loc; ls * 2>/dev/null)
+ custom_scripts=$(cd $custom_loc; ls * 2>/dev/null)
fi
+all_scripts=$(applets/busybox.mkscripts)
+
+# all_scripts includes applet scripts and custom scripts, sort them out
+applet_scripts=""
+for i in $all_scripts
+do
+ found=0
+ for j in $custom_scripts
+ do
+ if [ "$i" = "$j" ]
+ then
+ found=1
+ break;
+ fi
+ done
+ if [ $found -eq 0 ]
+ then
+ # anything that isn't a custom script is an applet script
+ applet_scripts="$applet_scripts $i"
+ fi
+done
-n=$(echo $scripts | wc -w)
+# we know the custom scripts are present but applet scripts might have
+# become detached from their configuration
+for i in $applet_scripts
+do
+ #if [ ! -f "$applet_loc/$i" -a ! -f "$custom_loc/$i" ]
+ if [ ! -f "$applet_loc/$i" ]
+ then
+ echo "missing applet script $i"
+ exit 1
+ fi
+done
-if [ $n -ne 0 ]
+n=$(echo $custom_scripts $applet_scripts | wc -w)
+nall=$(echo $all_scripts | wc -w)
+
+if [ $n -ne $nall ]
then
- printf '#ifdef DEFINE_script_names\n'
- printf 'const char script_names[] ALIGN1 = '
- for i in $scripts
+ echo "script mismatch $n != $nall"
+ exit 1
+fi
+
+concatenate_scripts() {
+ for i in $custom_scripts
+ do
+ cat $custom_loc/$i
+ printf '\000'
+ done
+ for i in $applet_scripts
do
- printf '"%s\\0"' $i
+ cat $applet_loc/$i
+ printf '\000'
done
- printf ';\n'
+}
+
+exec >"$target.$$"
+
+if [ $n -ne 0 ]
+then
+ printf '#ifdef DEFINE_SCRIPT_DATA\n'
+ if [ $n -ne 0 ]
+ then
+ printf 'const uint16_t applet_numbers[] = {\n'
+ for i in $custom_scripts $applet_scripts
+ do
+ # TODO support applets with names including invalid characters
+ printf '\tAPPLET_NO_%s,\n' $i
+ done
+ printf '};\n'
+ fi
printf '#else\n'
- printf 'extern const char script_names[] ALIGN1;\n'
+ if [ $n -ne 0 ]
+ then
+ printf 'extern const uint16_t applet_numbers[];\n'
+ fi
printf '#endif\n'
fi
-printf "#define NUM_SCRIPTS $n\n\n"
+
+printf "\n"
+printf '#define NUM_SCRIPTS %d\n' $n
+printf "\n"
if [ $n -ne 0 ]
then
printf '#define UNPACKED_SCRIPTS_LENGTH '
- for i in $scripts
- do
- cat $loc/$i
- printf '\000'
- done | wc -c
+ concatenate_scripts | wc -c
printf '#define PACKED_SCRIPTS \\\n'
- for i in $scripts
- do
- cat $loc/$i
- printf '\000'
- done | bzip2 -1 | $DD bs=2 skip=1 2>/dev/null | od -v -b \
+ concatenate_scripts | bzip2 -1 | $DD bs=2 skip=1 2>/dev/null | \
+ od -v -b \
| grep -v '^ ' \
| $SED -e 's/^[^ ]*//' \
-e 's/ //g' \
diff --git a/scripts/gen_build_files.sh b/scripts/gen_build_files.sh
index f79fa2f83..64e4bffa9 100755
--- a/scripts/gen_build_files.sh
+++ b/scripts/gen_build_files.sh
@@ -17,12 +17,26 @@ status() { printf ' %-8s%s\n' "$1" "$2"; }
gen() { status "GEN" "$@"; }
chk() { status "CHK" "$@"; }
+# scripts in the 'embed' directory are treated as fake applets
+custom_scripts()
+{
+ custom_loc="$1"
+ if [ -d "$custom_loc" ]
+ then
+ for i in $(cd "$custom_loc"; ls *)
+ do
+ printf "APPLET_SCRIPTED(%s, scripted, BB_DIR_USR_BIN, BB_SUID_DROP, dummy)\n" $i;
+ done
+ fi
+}
+
generate()
{
# NB: data to be inserted at INSERT line is coming on stdin
src="$1"
dst="$2"
header="$3"
+ loc="$4"
#chk "${dst}"
{
# Need to use printf: different shells have inconsistent
@@ -32,6 +46,10 @@ generate()
sed -n '/^INSERT$/ q; p' "${src}"
# copy stdin to stdout
cat
+ if [ -n "$loc" ]
+ then
+ custom_scripts "$loc"
+ fi
# print everything after INSERT line
sed -n '/^INSERT$/ {
:l
@@ -53,7 +71,8 @@ sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
| generate \
"$srctree/include/applets.src.h" \
"include/applets.h" \
- "/* DO NOT EDIT. This file is generated from applets.src.h */"
+ "/* DO NOT EDIT. This file is generated from applets.src.h */" \
+ "$srctree/embed"
# (Re)generate include/usage.h
# We add line continuation backslash after each line,