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