Commit based upon d6442850bde61f0c3e7e2ae3247b4a856073c5e0
[librecmc/package-feed.git] / libs / nacl / do-openwrt
1 #!/bin/sh
2 set -e
3
4 # nacl/do
5 # D. J. Bernstein
6 # Public domain.
7
8 version=`cat version`
9 project=nacl
10
11 top="`pwd`/build"
12 bin="$top/bin"
13 lib="$top/lib"
14 include="$top/include"
15 work="$top/work"
16
17
18 # and work around bug in GNU sort
19 LANG=C
20 export LANG
21
22 rm -rf "$top"
23 mkdir -p "$top"
24 mkdir -p "$bin"
25 mkdir -p "$lib"
26 mkdir -p "$include"
27
28 exec >"$top/log"
29 exec 2>&1
30 exec 5>"$top/data"
31 exec </dev/null
32
33 echo "=== `date` === starting"
34
35 echo "=== `date` === building inttypes"
36 for target in int8 int16 int32 int64 uint8 uint16 uint32 uint64; do
37   (
38     echo "#ifndef crypto_${target}_h"
39     echo "#define crypto_${target}_h"
40     echo ""
41     echo "#include <stdint.h>"
42     echo ""
43     echo "typedef ${target}_t crypto_${target};"
44     echo ""
45     echo "#endif"
46   ) > "$include/crypto_$target.h"
47 done
48
49 echo "=== `date` === building randombytes"
50 rm -rf "$work"
51 mkdir -p "$work"
52 cp -pr randombytes/* "$work"
53 (
54   cd "$work"
55
56   cp devurandom.c randombytes-impl.c
57   cp devurandom.h randombytes-impl.h
58   $CC $CFLAGS -c randombytes-impl.c
59   mkdir -p lib
60   mv randombytes-impl.o lib/randombytes.o
61   mkdir -p include
62   mv randombytes-impl.h include/randombytes.h
63 )
64 cp -pr "$work"/lib/* "$lib"
65 cp -pr "$work"/include/* "$include"
66
67 rm -rf "$work"
68 mkdir -p "$work"
69 echo 'void crypto_'"$project"'_base(void) { ; }' > "$work/${project}_base.c"
70 ( cd "$work" && $CC $CFLAGS -c ${project}_base.c )
71 $AR cr "$lib/lib${project}.a" "$work/${project}_base.o"
72 ( $RANLIB "$lib/lib${project}.a" || exit 0 )
73
74 # loop over operations
75 cat OPERATIONS \
76 | while read o
77 do
78   [ -d "$o" ] || continue
79
80   # for each operation, loop over primitives
81   ls "$o" \
82   | sort \
83   | while read p
84   do
85     [ -d "$o/$p" ] || continue
86     op="${o}_${p}"
87
88     startdate=`date +%Y%m%d`
89
90     echo "=== `date` === $o/$p"
91
92     rm -rf "$work"
93     mkdir -p "$work"
94
95     if [ -d "$o/$p/ref" ]; then
96       implementationdir="$o/$p/ref"
97     else
98       implementationdir="$o/$p/portable"
99     fi
100
101     opi=`echo "$implementationdir" | tr ./- ___`
102
103     echo "=== `date` === $implementationdir"
104
105     cfiles=`ls "$implementationdir" | grep '\.c$' || :`
106     sfiles=`ls "$implementationdir" | grep '\.[sS]$' || :`
107
108     cp -p "$o"/*.c "$work"
109
110     cp -pr "$implementationdir"/* "$work"
111
112     cp -p MACROS "$work/MACROS"
113     cp -p PROTOTYPES.c "$work/PROTOTYPES.c"
114
115     (
116       cd "$work"
117       (
118         echo "#ifndef ${o}_H"
119         echo "#define ${o}_H"
120         echo ""
121         echo "#include \"${op}.h\""
122         echo ""
123         egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < MACROS \
124           | sed "s/$o/$op/" | while read mop
125         do
126           echo "#define ${mop} ${mop}" | sed "s/$op/$o/"
127         done
128         echo "#define ${o}_PRIMITIVE \"${p}\""
129         echo "#define ${o}_IMPLEMENTATION ${op}_IMPLEMENTATION"
130         echo "#define ${o}_VERSION ${op}_VERSION"
131         echo ""
132         echo "#endif"
133       ) > "$o.h"
134       (
135         echo "#ifndef ${op}_H"
136         echo "#define ${op}_H"
137         echo ""
138         sed 's/[        ]CRYPTO_/ '"${opi}"'_/g' < api.h
139         echo '#ifdef __cplusplus'
140           #echo '#include <string>'
141           #egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < PROTOTYPES.cpp \
142           #    | sed "s/$o/$opi/"
143         echo 'extern "C" {'
144         echo '#endif'
145         egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < PROTOTYPES.c \
146           | sed "s/$o/$opi/"
147         echo '#ifdef __cplusplus'
148         echo '}'
149         echo '#endif'
150         echo ""
151         egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < MACROS \
152           | sed "s/$o/$opi/" | while read mopi
153         do
154             echo "#define ${mopi} ${mopi}" | sed "s/$opi/$op/"
155         done
156         echo "#define ${op}_IMPLEMENTATION \"${implementationdir}\""
157         echo "#ifndef ${opi}_VERSION"
158         echo "#define ${opi}_VERSION \"-\""
159         echo "#endif"
160         echo "#define ${op}_VERSION ${opi}_VERSION"
161         echo ""
162         echo "#endif"
163       ) > "$op.h"
164
165       echo "=== `date` === $implementationdir $CC $CFLAGS"
166       for f in $cfiles $sfiles
167       do
168         ok=1
169         $CC $CFLAGS \
170             -I. -I"$include" \
171             -c "$f" >errors 2>&1 || ok=0
172         ( if [ `wc -l < errors` -lt 25 ]
173           then
174             cat errors
175           else
176             head errors
177             echo ...
178             tail errors
179           fi
180         ) \
181         | while read err
182         do
183           echo "$version $startdate $o $p fromcompiler $implementationdir $f $err" >&5
184         done
185
186         [ "$ok" = 1 ]
187       done
188
189       for f in *.o
190       do
191         mv "$f" "${opi}-$f"
192       done
193     )
194
195     echo "=== `date` === $implementationdir $CC $CFLAGS finishing"
196
197     $AR cr "$lib/lib${project}.a" "$work"/*.o \
198     && ( $RANLIB "$lib/lib${project}.a" || exit 0 ) \
199     && cp -p "$work/$op.h" "$include/$op.h" \
200     && [ -f "$o/$p/selected" ] \
201     && cp -p "$work/$o.h" "$include/$o.h" \
202     || :
203   done
204 done
205
206 echo "=== `date` === finishing"