123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #!/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
- 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"
|