blob: b7a023ce04e537916c30c0ff094b526da1b62cfb (
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
|
#!/bin/sh
target="$1"
custom_loc="$2"
applet_loc="$3"
test "$target" || exit 1
test "$SED" || SED=sed
test "$DD" || DD=dd
# 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=$(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'
if [ $n -ne 0 ]
then
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'
fi
printf '#else\n'
if [ $n -ne 0 ]
then
printf 'extern const uint16_t applet_numbers[];\n'
fi
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"
|