blob: 205ac591a563e6125775cc355a77fd72b4bb7640 (
plain)
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"
|