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