summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-08 04:09:34 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-08 04:09:34 +0000
commit6dd9865ff2172986a52a700ccaea11a8884f5b9d (patch)
tree6bfc52b1737c6dfea767520c80b8d0fd56896f20
parente3cc17a3ac5cd2a5e48b841f70a98a81620155f3 (diff)
* configure.in (RUBY_APPEND_OPTION, RUBY_APPEND_OPTIONS),
(RUBY_PREPEND_OPTION, RUBY_PREPEND_OPTIONS): add option(s) without duplication. * configure.in (RUBY_DEFINE_IF): changed parameter order, now condition comes first. * configure.in (universal_binary): checks architecture macros, and improved thin load paths. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog12
-rw-r--r--configure.in149
2 files changed, 121 insertions, 40 deletions
diff --git a/ChangeLog b/ChangeLog
index 644f921d5e..4a4162adff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Sun Feb 8 13:09:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_APPEND_OPTION, RUBY_APPEND_OPTIONS),
+ (RUBY_PREPEND_OPTION, RUBY_PREPEND_OPTIONS): add option(s)
+ without duplication.
+
+ * configure.in (RUBY_DEFINE_IF): changed parameter order, now
+ condition comes first.
+
+ * configure.in (universal_binary): checks architecture macros, and
+ improved thin load paths.
+
Sun Feb 8 09:41:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* runruby.rb: gets extout and arch from rbconfig.rb.
diff --git a/configure.in b/configure.in
index 2f22cafded..e709271f9f 100644
--- a/configure.in
+++ b/configure.in
@@ -105,6 +105,27 @@ AC_CANONICAL_TARGET
target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`
ac_install_sh='' # unusable for extension libraries.
+AC_DEFUN([RUBY_APPEND_OPTION],
+ [# RUBY_APPEND_OPTION($1, $2)
+ { case "( [$]{$1-} " dnl )
+ in '('*' $2 '*);; '( ') $1="$2";; '('*) $1="[$]$1 $2";; esac; }])
+AC_DEFUN([RUBY_APPEND_OPTIONS],
+ [# RUBY_APPEND_OPTIONS($1, $2)
+ { for rb_opt in $2; do
+ case "( [$]{$1-} " dnl )
+ in '('*" [$]{rb_opt} "*);; '( ') $1="[$]{rb_opt}";; '('*) $1="[$]$1 [$]{rb_opt}";; esac; done; }])
+AC_DEFUN([RUBY_PREPEND_OPTION],
+ [# RUBY_PREPEND_OPTION($1, $2)
+ { case "( [$]{$1-} " dnl )
+ in '('*' $2 '*);; '( ') $1="$2";; '('*) $1="$2 [$]$1";; esac; }])
+AC_DEFUN([RUBY_PREPEND_OPTIONS],
+ [# RUBY_PREPEND_OPTIONS($1, $2)
+ { unset rb_opts; for rb_opt in $2; do
+ case "( [$]{rb_opts} [$]{$1-} " dnl )
+ in '('*" [$]{rb_opt} "*);; '( ') $1="[$]{rb_opt}";; '('*) rb_opts="[$]{rb_opts}[$]{rb_opt} ";; esac
+ done
+ $1="[$]{rb_opts}[$]$1"; }])
+
AC_ARG_WITH(arch, [dnl
--with-arch=ARCHS build an Apple/NeXT Multi Architecture Binary (MAB);
ARCHS is a comma-delimited list of architectures for
@@ -114,7 +135,7 @@ AC_ARG_WITH(arch, [dnl
[target_archs="$withval"], [unset target_archs])
test ${CFLAGS+set} && CFLAGS=`echo "$CFLAGS" | sed 's/ *-arch *[^ ]*//g'`
test ${LDFLAGS+set} && LDFLAGS=`echo "$LDFLAGS" | sed 's/ *-arch *[^ ]*//g'`
-unset ARCH_FLAG universal_binary
+unset ARCH_FLAG universal_binary universal_archnames
if test ${target_archs+set}; then
AC_MSG_CHECKING([target architectures])
target_archs=`echo $target_archs | tr , ' '`
@@ -127,7 +148,13 @@ if test ${target_archs+set}; then
;;
dnl (
*)
- universal_binary="${universal_binary+$universal_binary,}$archs"
+ cpu=`$SHELL "$srcdir/config.sub" "${archs}-${target_os}" 2>&1` || {
+ AC_MSG_RESULT([failed])
+ AC_MSG_ERROR([$cpu])
+ }
+ cpu=`echo $cpu | sed 's/-.*-.*//'`
+ universal_binary="${universal_binary+$universal_binary,}$cpu"
+ universal_archnames="${universal_archnames} ${archs}=${cpu}"
ARCH_FLAG="${ARCH_FLAG+$ARCH_FLAG }-arch $archs"
;;
esac
@@ -136,6 +163,7 @@ if test ${target_archs+set}; then
unset universal_binary
case "$target_archs" in dnl (
*,*) universal_binary=yes;;
+ *) unset universal_archnames;;
esac
AC_MSG_RESULT([$target_archs])
@@ -146,7 +174,7 @@ if test ${target_archs+set}; then
target_cpu=universal
fi
CFLAGS="$CFLAGS ${ARCH_FLAG}"
- LDFLAGS="${LDFLAGS+$LDFLAGS } ${ARCH_FLAG}"
+ LDFLAGS="${LDFLAGS+$LDFLAGS }${ARCH_FLAG}"
else
target_archs="$target_cpu"
fi
@@ -418,13 +446,13 @@ if test "$rb_cv_va_args_macro" = yes; then
fi
AC_DEFUN([RUBY_DEFINE_IF], [dnl
- m4_ifval([$3],[test "$3" && cat <<EOH >> confdefs.h
-@%:@if $3
+ m4_ifval([$1],[test "$1" && cat <<EOH >> confdefs.h
+@%:@if $1
EOH
])dnl
-AC_DEFINE_UNQUOTED($1, $2)
- m4_ifval([$3],[test "$3" && cat <<EOH >> confdefs.h
-@%:@endif /* $3 */
+AC_DEFINE_UNQUOTED($2, $3)
+ m4_ifval([$1],[test "$1" && cat <<EOH >> confdefs.h
+@%:@endif /* $1 */
EOH
])dnl
])dnl
@@ -465,7 +493,7 @@ else
fi
])
if test "$rbcv" != x; then
- RUBY_DEFINE_IF(attrib[(x)], $rbcv, [${rbcv_cond}])
+ RUBY_DEFINE_IF([${rbcv_cond}], attrib[(x)], $rbcv)
fi
AS_VAR_POPDEF([attrib])
AS_VAR_POPDEF([rbcv])
@@ -505,7 +533,7 @@ for mac in "__attribute__((dllimport))" "__declspec(dllimport)"; do
done])
test "x$rb_cv_ruby_extern" = xno || AC_DEFINE_UNQUOTED(RUBY_EXTERN, $rb_cv_ruby_extern)
-XCFLAGS="$XCFLAGS -DRUBY_EXPORT"
+RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT)
dnl Check whether we need to define sys_nerr locally
AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
@@ -542,8 +570,8 @@ case "$target_os" in
nextstep*) ;;
openstep*) ;;
rhapsody*) ;;
-darwin*) LIBS="-lobjc $LIBS"
- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE"
+darwin*) RUBY_PREPEND_OPTION(LIBS, -lobjc)
+ RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE)
AC_MSG_CHECKING(whether Mac OS X 10.5 or later)
AC_TRY_CPP([#include <AvailabilityMacros.h>
#if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040
@@ -794,8 +822,8 @@ dnl (
universal-darwin*:*ppc*)
AC_LIBSOURCES(alloca.c)
AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
- RUBY_DEFINE_IF(C_ALLOCA, 1, [defined __powerpc__])
- RUBY_DEFINE_IF(alloca, alloca)
+ RUBY_DEFINE_IF([defined __powerpc__], C_ALLOCA, 1)
+ RUBY_DEFINE_IF([defined __powerpc__], alloca, alloca)
;;
*)
AC_FUNC_ALLOCA
@@ -1350,12 +1378,21 @@ if test "$with_dln_a_out" != yes; then
AC_MSG_CHECKING(whether OS depend dynamic link works)
if test "$GCC" = yes; then
case "$target_os" in
- nextstep*) CCDLFLAGS="$CCDLFLAGS -fno-common";;
- openstep*) CCDLFLAGS="$CCDLFLAGS -fno-common";;
- rhapsody*) CCDLFLAGS="$CCDLFLAGS -fno-common";;
- darwin*) CCDLFLAGS="$CCDLFLAGS -fno-common";;
+ dnl (
+ nextstep*|openstep*|rhapsody*|darwin*)
+ # The -fno-common is needed if we wish to embed the Ruby interpreter
+ # into a plugin module of some project (as opposed to embedding it
+ # within the project's application). The -I/usr/local/include is
+ # needed because CPP as discovered by configure (cc -E -traditional)
+ # fails to consult /usr/local/include by default. This causes
+ # mkmf.rb's have_header() to fail if the desired resource happens to be
+ # installed in the /usr/local tree.
+ RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common);;
+ dnl (
human*|bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*) ;;
- *) CCDLFLAGS="$CCDLFLAGS -fPIC";;
+ dnl (
+ *)
+ RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC);;
esac
else
case "$target_os" in
@@ -1733,7 +1770,7 @@ LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'
if test "$enable_shared" = 'yes'; then
LIBRUBY='$(LIBRUBY_SO)'
LIBRUBYARG='$(LIBRUBYARG_SHARED)'
- CFLAGS="$CFLAGS $CCDLFLAGS"
+ test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS"
ENABLE_SHARED=yes
if test "$rb_cv_binary_elf" = yes; then
SOLIBS='$(LIBS)'
@@ -1834,25 +1871,17 @@ case "$target_os" in
linux*)
;;
netbsd*)
- CFLAGS="$CFLAGS -pipe"
+ RUBY_APPEND_OPTION(CFLAGS, -pipe)
;;
nextstep*|openstep*)
- # The -fno-common is needed if we wish to embed the Ruby interpreter
- # into a plugin module of some project (as opposed to embedding it
- # within the project's application). The -I/usr/local/include is
- # needed because CPP as discovered by configure (cc -E -traditional)
- # fails to consult /usr/local/include by default. This causes
- # mkmf.rb's have_header() to fail if the desired resource happens to be
- # installed in the /usr/local tree.
- CFLAGS="$CFLAGS -pipe -fno-common"
- CPPFLAGS="$CPPFLAGS -I/usr/local/include"
+ RUBY_APPEND_OPTION(CPPFLAGS, -I/usr/local/include)
;;
rhapsody*)
- CFLAGS="$CFLAGS -pipe -no-precomp -fno-common"
+ RUBY_APPEND_OPTIONS(CFLAGS, -pipe -no-precomp)
;;
darwin*)
- CFLAGS="$CFLAGS -pipe -fno-common"
- MINIDLNOBJ=dmydln.o
+ RUBY_APPEND_OPTION(CFLAGS, -pipe)
+ MINIDLNOBJ=dmydln.o
;;
os2-emx)
CFLAGS="$CFLAGS -DOS2"
@@ -1962,6 +1991,38 @@ dnl (
;;
esac
+if test "${universal_binary-no}" = yes ; then
+ AC_MSG_CHECKING([for architecture macros])
+ mv confdefs.h confdefs1.h
+ : > confdefs.h
+ AC_TRY_COMPILE([@%:@if defined __`echo ${universal_archnames} |
+ sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__
+@%:@else
+@%:@error
+>>>>>><<<<<<
+@%:@endif], [],
+[
+ AC_MSG_RESULT(yes)
+ mv -f confdefs1.h confdefs.h
+], [
+ AC_MSG_RESULT(no)
+ archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
+ cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
+ for archs in ${universal_archnames}; do
+ cpu=${archs#*=}
+ archs=${archs%=*}
+ CFLAGS="$cflags -arch $archs"
+ archs="__${archs}__"
+ AC_MSG_CHECKING([for macro ${archs} on ${cpu}])
+ AC_TRY_COMPILE([@%:@ifndef ${archs}
+@%:@error
+@%:@endif], [], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
+ done
+ mv -f confdefs1.h confdefs.h
+ AC_MSG_ERROR([failed])
+ ])
+fi
+
CPPFLAGS="$CPPFLAGS "'$(DEFS)'
test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g'`
@@ -2121,15 +2182,23 @@ if test "${universal_binary-no}" = yes ; then
AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available,
AC_TRY_COMPILE([const char arch[] = __ARCHITECTURE__;], [puts(arch);],
[rb_cv_architecture_available=yes], [rb_cv_architecture_available=no]))
+ if test "${rb_cv_architecture_available}" = yes; then
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM_CPU, __ARCHITECTURE__)
+ else
+ for archs in ${universal_archnames}; do
+ cpu=`echo $archs | sed 's/.*=//'`
+ archs=`echo $archs | sed 's/=.*//'`
+ RUBY_DEFINE_IF([defined __${archs}__], RUBY_PLATFORM_CPU, ["${cpu}"])
+ done
+ fi
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}")
+ AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-"RUBY_PLATFORM_OS)
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
+ AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB, RUBY_LIB"/"RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
+ AC_DEFINE_UNQUOTED(RUBY_SITE_THIN_ARCHLIB, RUBY_SITE_LIB2"/"RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
+ AC_DEFINE_UNQUOTED(RUBY_VENDOR_THIN_ARCHLIB, RUBY_VENDOR_LIB2"/"RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
else
arch="${target_cpu}-${target_os}"
-fi
-if test "${rb_cv_architecture_available}" = yes; then
- AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB, RUBY_LIB"/"RUBY_PLATFORM)
- AC_DEFINE_UNQUOTED(RUBY_SITE_THIN_ARCHLIB, RUBY_SITE_LIB"/"RUBY_PLATFORM)
- AC_DEFINE_UNQUOTED(RUBY_VENDOR_THIN_ARCHLIB, RUBY_VENDOR_LIB"/"RUBY_PLATFORM)
- AC_DEFINE_UNQUOTED(RUBY_PLATFORM, __ARCHITECTURE__"-${target_os}")
-else
AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}")
fi