orbea / zippy / sofort

Forked from zippy/sofort 2 years ago
Clone

e5f78a cfgtest.sh: added cfgtest_type_size(), cfgtest_unit_type_size().

Authored and Committed by midipix 6 years ago
    cfgtest.sh: added cfgtest_type_size(), cfgtest_unit_type_size().
    
        
file modified
+57 -0
sofort/cfgtest.sh CHANGED
@@ -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
+ }