e5f78a
cfgtest.sh: added cfgtest_type_size(), cfgtest_unit_type_size().
@@ -208,6 +208,55 @@ cfgtest_decl_presence()
|
|
208
208
|
}
|
209
209
|
|
210
210
|
|
211
|
+
cfgtest_type_size()
|
212
|
+
{
|
213
|
+
mb_internal_cflags=''
|
214
|
+
mb_internal_size=''
|
215
|
+
mb_internal_test='char x[(sizeof(%s) == %s) ? 1 : -1];'
|
216
|
+
|
217
|
+
for mb_header in $mb_cfgtest_headers; do
|
218
|
+
mb_internal_cflags="$mb_internal_cflags --include=$mb_header"
|
219
|
+
done
|
220
|
+
|
221
|
+
for mb_internal_guess in 8 4 2 1 16 32 64 128; do
|
222
|
+
if [ -z $mb_internal_size ]; then
|
223
|
+
mb_internal_type="$@"
|
224
|
+
|
225
|
+
mb_internal_str=$(printf "$mb_internal_test" \
|
226
|
+
"$mb_internal_type" \
|
227
|
+
"$mb_internal_guess")
|
228
|
+
|
229
|
+
printf '%s' "$mb_internal_str" \
|
230
|
+
| $mb_cfgtest_cc -S -xc - -o - \
|
231
|
+
$mb_cfgtest_cflags \
|
232
|
+
$mb_internal_cflags \
|
233
|
+
> /dev/null 2>/dev/null \
|
234
|
+
&& mb_internal_size=$mb_internal_guess
|
235
|
+
fi
|
236
|
+
done
|
237
|
+
|
238
|
+
# unrecognized type, or type size not within range
|
239
|
+
if [ -z $mb_internal_size ]; then
|
240
|
+
return 1
|
241
|
+
fi
|
242
|
+
|
243
|
+
# -DSIZEOF_TYPE=SIZE
|
244
|
+
mb_internal_str=$(printf '%s%s=%s' '-DSIZEOF_' \
|
245
|
+
"$mb_internal_type" \
|
246
|
+
"$mb_internal_size" \
|
247
|
+
| sed -e 's/\ /_/g' -e 's/*/P/g' \
|
248
|
+
| tr "[:lower:]" "[:upper:]")
|
249
|
+
|
250
|
+
if [ -z ${cfgtest_internal_unit_test:-} ]; then
|
251
|
+
cfgtest_cflags_append "$mb_internal_str"
|
252
|
+
else
|
253
|
+
cfgtest_makevar_append "$mb_internal_str"
|
254
|
+
fi
|
255
|
+
|
256
|
+
return 0
|
257
|
+
}
|
258
|
+
|
259
|
+
|
211
260
|
cfgtest_library_presence()
|
212
261
|
{
|
213
262
|
printf 'int main(void){return 0;}' \
|
@@ -253,3 +302,11 @@ cfgtest_unit_decl_presence()
|
|
253
302
|
cfgtest_decl_presence "$@" || return 1
|
254
303
|
return 0
|
255
304
|
}
|
305
|
+
|
306
|
+
|
307
|
+
cfgtest_unit_type_size()
|
308
|
+
{
|
309
|
+
cfgtest_internal_unit_test='unit_test'
|
310
|
+
cfgtest_type_size "$@" || return 1
|
311
|
+
return 0
|
312
|
+
}
|