ruby-changes:11211
From: nobu <ko1@a...>
Date: Sun, 8 Mar 2009 11:40:14 +0900 (JST)
Subject: [ruby-changes:11211] Ruby:r22820 (trunk): * configure.in (RUBY_CHECK_SIZEOF): dirty hack to compute multiple
nobu 2009-03-08 11:40:00 +0900 (Sun, 08 Mar 2009) New Revision: 22820 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22820 Log: * configure.in (RUBY_CHECK_SIZEOF): dirty hack to compute multiple sizeof, for apple's universal binary. Modified files: trunk/ChangeLog trunk/configure.in Index: configure.in =================================================================== --- configure.in (revision 22819) +++ configure.in (revision 22820) @@ -10,7 +10,7 @@ AC_DEFUN([when], dnl [(] makes parentheses balanced. dnl note that spaces after comma need to be quoted. -[$*][)]) +[[$*]][)]) dnl environment section { @@ -333,31 +333,90 @@ AC_CHECK_TYPES([long long, off_t]) -AC_CHECK_SIZEOF(int, 4) -AC_CHECK_SIZEOF(short, 2) -AC_CHECK_SIZEOF(long, 4) -AC_CHECK_SIZEOF(long long, 0) -AC_CHECK_SIZEOF(__int64, 0) -AC_CHECK_SIZEOF(off_t, 0) -AC_CHECK_SIZEOF(void*, 4) -AC_CHECK_SIZEOF(float, 4) -AC_CHECK_SIZEOF(double, 8) -AC_CHECK_SIZEOF(time_t, 0) +AC_CACHE_CHECK([char bit], [rb_cv_char_bit], + [_AC_COMPUTE_INT_COMPILE([CHAR_BIT], [rb_cv_char_bit], + [AC_INCLUDES_DEFAULT([@%:@include <limits.h>])], [rb_cv_char_bit=8])]) -if test "$universal_binary" = yes; then - for type in int long "long long" "void*" time_t; do - eval size='$ac_cv_sizeof_'AS_TR_SH($type) - if test $size = 0; then continue; fi +AC_DEFUN([RUBY_CHECK_SIZEOF], +[if test "$universal_binary" = yes; then +AC_CACHE_CHECK([size of $1], [AS_TR_SH([ac_cv_sizeof_$1])], [dnl + unset AS_TR_SH(ac_cv_sizeof_$1) + m4_ifval([$2], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && { + for t in $2; do AC_COMPILE_IFELSE( [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT], - [sizeof($type) == $size])], [], [size=0]) - if test $size = 0; then - dnl try with __LP64__ - AC_MSG_ERROR([size of $type is unknown]) - fi + [sizeof($1) == sizeof($t)])], [ + AS_TR_SH(ac_cv_sizeof_$1)=AS_TR_CPP([SIZEOF_]$t) + break]) done + }]) + m4_ifval([$3], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && { + unset cond + for s in 32 64 128; do + for t in $3; do + cond="${cond} +@%:@${cond+el}if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s})" + hdr="AC_INCLUDES_DEFAULT([ +@%:@if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s}) +@%:@ define AS_TR_CPP(HAVE_$1) 1 +@%:@else +@%:@ define AS_TR_CPP(HAVE_$1) 0 +@%:@endif])" + AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr], [!AS_TR_CPP(HAVE_$1)])], [continue]) + AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr], + [AS_TR_CPP(HAVE_$1) == (sizeof($1) == ([$[s / rb_cv_char_bit]]))])], + [AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}${s}"]) + done + done + }]) + _AC_COMPUTE_INT_COMPILE(AS_TR_CPP(SIZEOF_$1), [t], [AC_INCLUDES_DEFAULT([ +$cond +@%:@else +typedef $1 ac__type_sizeof_; +@%:@define AS_TR_CPP(SIZEOF_$1) sizeof(ac__type_sizeof_) +@%:@endif +@%:@ifndef AS_TR_CPP(SIZEOF_$1) +@%:@define AS_TR_CPP(SIZEOF_$1) 0 +@%:@endif])], [unset t]) + if test ${t-0} != 0; then + AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}" + fi +]) +{ + unset cond + for t in ${AS_TR_SH(ac_cv_sizeof_$1)-}; do + case "$t" in + when([[0-9]*|SIZEOF_*]) + ${cond+echo "@%:@else"} + echo "[@%:@define ]AS_TR_CPP(SIZEOF_$1) [$t]" + break + ;; + when([*]) + s=`expr $t : ['.*[^0-9]\([0-9][0-9]*\)$']` + echo "@%:@${cond+el}if defined(__${t}__) || defined(__${t}) || defined(_${t}) || defined($t)" + echo "@%:@define AS_TR_CPP(SIZEOF_$1) [$[s / rb_cv_char_bit]]" + cond=1 + ;; + esac + done + ${cond+echo "@%:@endif"} +} >> confdefs.h +else +AC_CHECK_SIZEOF([$1]) fi +]) +RUBY_CHECK_SIZEOF(int, [], [ILP]) +RUBY_CHECK_SIZEOF(short) +RUBY_CHECK_SIZEOF(long, [int], [ILP LP]) +RUBY_CHECK_SIZEOF(long long) +RUBY_CHECK_SIZEOF(__int64) +RUBY_CHECK_SIZEOF(off_t) +RUBY_CHECK_SIZEOF(void*, [int long "long long"], [ILP LP LLP]) +RUBY_CHECK_SIZEOF(float) +RUBY_CHECK_SIZEOF(double) +RUBY_CHECK_SIZEOF(time_t, [long "long long"]) + dnl RUBY_REPLACE_TYPE [typename] [default type] [macro type] [included] AC_DEFUN([RUBY_REPLACE_TYPE], [dnl AC_CHECK_TYPE([$1], [n=[$1]], [n=[$2]], [$4]) Index: ChangeLog =================================================================== --- ChangeLog (revision 22819) +++ ChangeLog (revision 22820) @@ -1,3 +1,8 @@ +Sun Mar 8 11:39:57 2009 Nobuyoshi Nakada <nobu@r...> + + * configure.in (RUBY_CHECK_SIZEOF): dirty hack to compute multiple + sizeof, for apple's universal binary. + Sat Mar 7 22:06:03 2009 Nobuyoshi Nakada <nobu@r...> * configure.in (universal_binary): checks if sizes are same on all -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/