1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#!/bin/sh
. ./.config || exit 1
target="$1"
custom_loc="$2"
applet_loc="$3"
test "$target" || exit 1
test "$SED" || SED=sed
test "$DD" || DD=dd
if [ x"$CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS" != x"y" ]
then
printf '#define NUM_SCRIPTS 0\n' >"$target"
exit 0
fi
# Some people were bitten by their system lacking a (proper) od
od -v -b </dev/null >/dev/null
if test $? != 0; then
echo 'od tool is not installed or cannot accept "-v -b" options'
exit 1
fi
bzip2 </dev/null >/dev/null
if test $? != 0; then
echo 'bzip2 is not installed'
exit 1
fi
custom_scripts=""
if [ -d "$custom_loc" ]
then
custom_scripts=$(cd $custom_loc; ls * 2>/dev/null)
fi
all_scripts=$($srctree/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
# 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
n=$(echo $custom_scripts $applet_scripts | wc -w)
nall=$(echo $all_scripts | wc -w)
if [ $n -ne $nall ]
then
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
cat $applet_loc/$i
printf '\000'
done
}
exec >"$target.$$"
if [ $n -ne 0 ]
then
printf '#ifdef DEFINE_SCRIPT_DATA\n'
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'
printf '#else\n'
printf 'extern const uint16_t applet_numbers[];\n'
printf '#endif\n'
fi
printf "\n"
printf '#define NUM_SCRIPTS %d\n' $n
printf "\n"
if [ $n -ne 0 ]
then
printf '#define UNPACKED_SCRIPTS_LENGTH '
concatenate_scripts | wc -c
printf '#define PACKED_SCRIPTS \\\n'
concatenate_scripts | bzip2 -1 | $DD bs=2 skip=1 2>/dev/null | \
od -v -b \
| grep -v '^ ' \
| $SED -e 's/^[^ ]*//' \
-e 's/ //g' \
-e '/^$/d' \
-e 's/\(...\)/0\1,/g' \
-e 's/$/ \\/'
printf '\n'
fi
mv -- "$target.$$" "$target"
|