diff options
author | rmanfredi <rmanfredi@2592e710-e01b-42a5-8df0-11608a6cc53d> | 2012-02-09 17:55:04 +0000 |
---|---|---|
committer | rmanfredi <rmanfredi@2592e710-e01b-42a5-8df0-11608a6cc53d> | 2012-02-09 17:55:04 +0000 |
commit | 079073d45867ae273825fe7b04659d8f00bfbd71 (patch) | |
tree | ca45c22d2fdebe87fe9db147252f62613eb33ca4 /mcon/U/intsize.U | |
parent | 8233fb6494e96dff527497d4ae5eada2765be91b (diff) |
Factorized definition of STATIC_ASSERT.
Converted integer and pointer size computations to allow cross-compiling.
git-svn-id: svn://svn.code.sf.net/p/dist/code/trunk/dist@130 2592e710-e01b-42a5-8df0-11608a6cc53d
Diffstat (limited to 'mcon/U/intsize.U')
-rw-r--r-- | mcon/U/intsize.U | 119 |
1 files changed, 42 insertions, 77 deletions
diff --git a/mcon/U/intsize.U b/mcon/U/intsize.U index 38c5414..362ee4d 100644 --- a/mcon/U/intsize.U +++ b/mcon/U/intsize.U @@ -1,6 +1,6 @@ ?RCS: $Id$ ?RCS: -?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: Copyright (c) 1991-1997, 2004-2006, 2012 Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic Licence, ?RCS: as specified in the README file that comes with the distribution. @@ -8,20 +8,7 @@ ?RCS: that same Artistic Licence; a copy of which may be found at the root ?RCS: of the source tree for dist 4.0. ?RCS: -?RCS: $Log: intsize.U,v $ -?RCS: Revision 3.0.1.2 1997/02/28 15:55:26 ram -?RCS: patch61: avoid prompting the user if the test runs ok -?RCS: patch61: moved code from longsize.U into there -?RCS: patch61: new tests for shortsize as well -?RCS: -?RCS: Revision 3.0.1.1 1994/10/29 16:21:06 ram -?RCS: patch36: added ?F: line for metalint file checking -?RCS: -?RCS: Revision 3.0 1993/08/18 12:08:52 ram -?RCS: Baseline for dist 3.0 netwide release. -?RCS: -?MAKE:intsize longsize shortsize: \ - Myread cat rm +cc +optimize +ccflags +ldflags +libs +?MAKE:intsize longsize shortsize: Assert Myread cat rm +cc +ccflags echo n c ?MAKE: -pick add $@ %< ?S:intsize: ?S: This variable contains the value of the INTSIZE symbol, which @@ -47,78 +34,56 @@ ?C: This symbol contains the value of sizeof(short) so that the C ?C: preprocessor can make decisions based on it. ?C:. -?H:#define INTSIZE $intsize /**/ -?H:#define LONGSIZE $longsize /**/ -?H:#define SHORTSIZE $shortsize /**/ +?H:#define INTSIZE $intsize +?H:#define LONGSIZE $longsize +?H:#define SHORTSIZE $shortsize ?H:. -?F:!intsize.out !intsize +?T:types t size var +?LINT: set intsize longsize shortsize : check for lengths of integral types echo " " -case "$intsize" in -'') - echo "Checking to see how big your integers are..." >&4 - $cat >intsize.c <<'EOCP' -#include <stdio.h> -int main() -{ +types='' @if INTSIZE || intsize - printf("intsize=%d;\n", sizeof(int)); +types="$types int" @end @if LONGSIZE || longsize - printf("longsize=%d;\n", sizeof(long)); +types="$types long" @end @if SHORTSIZE || shortsize - printf("shortsize=%d;\n", sizeof(short)); +types="$types short" @end - fflush(stdout); - exit(0); +for t in $types; do + $echo $n "Checking to see how big your ${t}s are...$c" >&4 + for size in 2 4 8 16 error; do + $cat >try.c <<EOCP +#include "static_assert.h" +$t foo; +int main() +{ + STATIC_ASSERT($size == sizeof(foo)); + return 0; } EOCP -# If $libs contains -lsfio, and sfio is mis-configured, then it -# sometimes (apparently) runs and exits with a 0 status, but with no -# output!. Thus we check with test -s whether we actually got any -# output. I think it has to do with sfio's use of _exit vs. exit, -# but I don't know for sure. --Andy Dougherty 1/27/97. - if $cc $optimize $ccflags $ldflags -o intsize intsize.c $libs >/dev/null 2>&1 && - ./intsize > intsize.out 2>/dev/null && test -s intsize.out ; then - eval `$cat intsize.out` -@if INTSIZE || intsize - echo "Your integers are $intsize bytes long." -@end -@if LONGSIZE || longsize - echo "Your long integers are $longsize bytes long." -@end -@if SHORTSIZE || shortsize - echo "Your short integers are $shortsize bytes long." -@end - else - $cat >&4 <<EOM -! -Help! I can't compile and run the intsize test program: please enlighten me! -(This is probably a misconfiguration in your system or libraries, and -you really ought to fix it. Still, I'll try anyway.) -! -EOM -@if INTSIZE || intsize - dflt=4 - rp="What is the size of an integer (in bytes)?" - . ./myread - intsize="$ans" -@end -@if LONGSIZE || longsize - dflt=$intsize - rp="What is the size of a long integer (in bytes)?" + if $cc -c $ccflags try.c >/dev/null 2>&1; then break; fi + done + var=${t}size + case "$size" in + error) + echo " cannot compute it." >&4 + case $t in + int) dflt=4;; + long) dflt=4;; + short) dflt=2;; + esac + rp="What is the size of the \"$t\" type (in bytes)?" . ./myread - longsize="$ans" -@end -@if SHORTSIZE || shortsize - dflt=2 - rp="What is the size of a short integer (in bytes)?" - . ./myread - shortsize="$ans" -@end - fi - ;; -esac -$rm -f intsize intsize.[co] intsize.out + eval $var="$ans" + ;; + *) + echo " $size bytes." >&4 + eval $var=$size + ;; + esac +done +$rm -f try.* |