summaryrefslogtreecommitdiff
path: root/configure.in
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-11-01 07:24:18 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-11-01 07:24:18 +0000
commit2eb5e70de3a0d3357f35896853872add1e6e5334 (patch)
treec38d81fa94d82618ba8bc044e678f1d05dfe8137 /configure.in
parentf6ea31420e970ba799644317ed2e2473c8d4b0e8 (diff)
* configure.in (rb_cv_stack_grow_dir): fix for universal binary.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25613 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'configure.in')
-rw-r--r--configure.in48
1 files changed, 40 insertions, 8 deletions
diff --git a/configure.in b/configure.in
index d142bef041..b39ed2c07e 100644
--- a/configure.in
+++ b/configure.in
@@ -1483,12 +1483,13 @@ if test "$ac_cv_func_sysconf" = yes; then
RUBY_CHECK_SYSCONF(CLK_TCK)
fi
-case "$target_cpu" in
-when(m68*|i?86|ia64|sparc*|alpha*) rb_cv_stack_grow_dir=-1;;
-when(hppa*) rb_cv_stack_grow_dir=+1;;
-esac
-AC_CACHE_CHECK(stack growing direction, rb_cv_stack_grow_dir,
- [AC_TRY_RUN([
+AC_DEFUN(RUBY_STACK_GROW_DIRECTION, [
+ AC_CACHE_CHECK(stack growing direction on $1, rb_cv_stack_grow_dir_$1, [
+case "$1" in
+when(m68*|x86*|i?86|ia64|ppc*|sparc*|alpha*) $2=-1;;
+when(hppa*) $2=+1;;
+when(*)
+ AC_TRY_RUN([
/* recurse to get rid of inlining */
static int
stack_growup_p(addr, n)
@@ -1505,8 +1506,39 @@ int main()
int x;
return stack_growup_p(&x, 10);
}
-], rb_cv_stack_grow_dir=-1, rb_cv_stack_grow_dir=+1, rb_cv_stack_grow_dir=0)])
-AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $rb_cv_stack_grow_dir)
+], $2=-1, $2=+1, $2=0)
+esac
+eval rb_cv_stack_grow_dir_$1=\$$2])])
+if test "${universal_binary-no}" = yes ; then
+ archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
+ save_CFLAGS="$CFLAGS" new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
+ save_LDFLAGS="$LDFLAGS" new_ldflags=`echo "$LDFLAGS" | sed "s|$archflagpat"'||'`
+ stack_dir=
+ for archs in ${universal_archnames}; do
+ archs=`echo $archs | sed 's/=.*//'`
+ CFLAGS="$new_cflags -arch $archs"
+ LDFLAGS="$new_ldflags -arch $archs"
+ RUBY_STACK_GROW_DIRECTION($archs, dir)
+ if test x$stack_dir = x; then
+ stack_dir=$dir
+ elif test x$stack_dir != x$dir; then
+ stack_dir=no
+ fi
+ done
+ CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS"
+ if test x$stack_dir = xno; then
+ for archs in ${universal_archnames}; do
+ archs=`echo $archs | sed 's/=.*//'`
+ eval dir=\$rb_cv_stack_grow_dir_$archs
+ RUBY_DEFINE_IF([defined __${archs}__], STACK_GROW_DIRECTION, $dir)
+ done
+ else
+ AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $stack_dir)
+ fi
+else
+ RUBY_STACK_GROW_DIRECTION($target_cpu, dir)
+ AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $dir)
+fi
if test x"$enable_pthread" = xyes; then
for pthread_lib in thr pthread pthreads c c_r root; do