mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
475 lines
11 KiB
Text
475 lines
11 KiB
Text
|
dnl Process this file with autoconf to produce a configure script.
|
||
|
AC_INIT(ruby.h)
|
||
|
|
||
|
dnl checks for alternative programs
|
||
|
AC_ARG_WITH(gcc, [--without-gcc never use gcc], [
|
||
|
case $withval in
|
||
|
no) CC=cc
|
||
|
without_gcc=yes;;
|
||
|
yes) CC=gcc
|
||
|
without_gcc=no;;
|
||
|
*) CC=$withval
|
||
|
without_gcc=$withval;;
|
||
|
esac], [without_gcc=no])
|
||
|
dnl If the user switches compilers, we can't believe the cache
|
||
|
if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"
|
||
|
then
|
||
|
AC_ERROR(cached CC is different -- throw away $cache_file
|
||
|
(it is also a good idea to do 'make clean' before compiling))
|
||
|
fi
|
||
|
|
||
|
dnl checks for thread
|
||
|
rb_thread=yes
|
||
|
AC_ARG_ENABLE(thread, [--disable-thread never use user-level thread], [
|
||
|
rb_thread=$enableval
|
||
|
])
|
||
|
if test $rb_thread = yes; then
|
||
|
AC_DEFINE(THREAD)
|
||
|
fi
|
||
|
|
||
|
AC_CANONICAL_HOST
|
||
|
|
||
|
|
||
|
dnl checks for fat-binary
|
||
|
fat_binary=no
|
||
|
AC_ARG_ENABLE( fat-binary,
|
||
|
[--enable-fat-binary build a NeXT Multi Architecture Binary. ],
|
||
|
[ fat_binary=$enableval ] )
|
||
|
if test "$fat_binary" = yes ; then
|
||
|
|
||
|
AC_MSG_CHECKING( target architecture )
|
||
|
|
||
|
if test "$TARGET_ARCHS" = "" ; then
|
||
|
if test `/usr/bin/arch` = "m68k" ; then
|
||
|
TARGET_ARCHS="m68k i486"
|
||
|
else
|
||
|
TARGET_ARCHS="m68k `/usr/bin/arch`"
|
||
|
fi
|
||
|
fi
|
||
|
# /usr/lib/arch_tool -archify_list $TARGET_ARCHS
|
||
|
for archs in $TARGET_ARCHS
|
||
|
do
|
||
|
ARCH_FLAG="$ARCH_FLAG -arch $archs "
|
||
|
echo -n " $archs"
|
||
|
done
|
||
|
AC_DEFINE( NEXT_FAT_BINARY )
|
||
|
echo "."
|
||
|
fi
|
||
|
|
||
|
|
||
|
AC_ARG_PROGRAM
|
||
|
|
||
|
dnl Checks for programs.
|
||
|
AC_PROG_CC
|
||
|
AC_PROG_GCC_TRADITIONAL
|
||
|
AC_PROG_YACC
|
||
|
AC_PROG_RANLIB
|
||
|
AC_SUBST(AR)
|
||
|
AC_CHECK_PROGS(AR, ar aal, ar)
|
||
|
AC_PROG_INSTALL
|
||
|
AC_PROG_MAKE_SET
|
||
|
|
||
|
# checks for UNIX variants that set C preprocessor variables
|
||
|
AC_MINIX
|
||
|
|
||
|
dnl Checks for libraries.
|
||
|
case "$host_os" in
|
||
|
nextstep*) ;;
|
||
|
human*) ;;
|
||
|
*) LIBS="-lm $LIBS";;
|
||
|
esac
|
||
|
AC_CHECK_LIB(crypt, crypt)
|
||
|
AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV
|
||
|
AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX
|
||
|
|
||
|
dnl Checks for header files.
|
||
|
AC_HEADER_DIRENT
|
||
|
AC_HEADER_STDC
|
||
|
AC_CHECK_HEADERS(stdlib.h unistd.h limits.h sys/file.h sys/ioctl.h pwd.h \
|
||
|
sys/select.h sys/time.h sys/times.h sys/param.h sys/wait.h\
|
||
|
syscall.h a.out.h string.h utime.h memory.h)
|
||
|
|
||
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||
|
AC_TYPE_UID_T
|
||
|
AC_TYPE_SIZE_T
|
||
|
AC_STRUCT_ST_BLKSIZE
|
||
|
save_LIBOJBS="$LIBOBJS"
|
||
|
AC_STRUCT_ST_BLOCKS
|
||
|
LIBOBJS="$save_LIBOBJS"
|
||
|
AC_STRUCT_ST_RDEV
|
||
|
|
||
|
AC_CHECK_SIZEOF(short)
|
||
|
AC_CHECK_SIZEOF(int)
|
||
|
AC_CHECK_SIZEOF(long)
|
||
|
AC_CHECK_SIZEOF(void*)
|
||
|
|
||
|
dnl Checks for library functions.
|
||
|
AC_TYPE_GETGROUPS
|
||
|
AC_TYPE_SIGNAL
|
||
|
AC_FUNC_ALLOCA
|
||
|
AC_FUNC_VFORK
|
||
|
AC_REPLACE_FUNCS(dup2 setenv memmove mkdir strcasecmp strerror strftime\
|
||
|
strstr strtoul strdup crypt flock)
|
||
|
AC_CHECK_FUNCS(fmod killpg random wait4 waitpid syscall getcwd\
|
||
|
truncate chsize times utimes fcntl lockf setitimer\
|
||
|
setruid seteuid setreuid setrgid setegid setregid\
|
||
|
setpgrp2 getpgid getgroups getpriority\
|
||
|
dlopen sigprocmask sigaction _setjmp)
|
||
|
if test "$ac_cv_func_strftime" = no; then
|
||
|
AC_STRUCT_TIMEZONE
|
||
|
AC_TRY_LINK([],
|
||
|
[extern int daylight; int i = daylight;], AC_DEFINE(HAVE_DAYLIGHT))
|
||
|
fi
|
||
|
|
||
|
if test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = yes; then
|
||
|
AC_DEFINE(POSIX_SIGNAL)
|
||
|
else
|
||
|
AC_MSG_CHECKING(for BSD signal semantics)
|
||
|
AC_CACHE_VAL(rb_cv_bsd_signal,
|
||
|
[AC_TRY_RUN([
|
||
|
#include <stdio.h>
|
||
|
#include <signal.h>
|
||
|
|
||
|
void
|
||
|
sig_handler(dummy)
|
||
|
int dummy;
|
||
|
{
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main()
|
||
|
{
|
||
|
signal(SIGINT, sig_handler);
|
||
|
kill(getpid(), SIGINT);
|
||
|
kill(getpid(), SIGINT);
|
||
|
return 0;
|
||
|
}
|
||
|
],
|
||
|
rb_cv_bsd_signal=yes,
|
||
|
rb_cv_bsd_signal=no)])
|
||
|
AC_MSG_RESULT($rb_cv_bsd_signal)
|
||
|
if test "$rb_cv_bsd_signal" = yes; then
|
||
|
AC_DEFINE(BSD_SIGNAL)
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if test "$ac_cv_func_setpgrp2" = yes; then
|
||
|
AC_DEFINE(BSD_GETPGRP, getpgrp2)
|
||
|
AC_DEFINE(BSD_SETPGRP, setpgrp2)
|
||
|
else
|
||
|
AC_MSG_CHECKING(whether getpgrp() has arg)
|
||
|
AC_CACHE_VAL(rb_cv_bsdgetpgrp,
|
||
|
[AC_TRY_COMPILE([#include <unistd.h>], [getpgrp(0);],
|
||
|
rb_cv_bsdgetpgrp=yes,
|
||
|
rb_cv_bsdgetpgrp=no)])
|
||
|
AC_MSG_RESULT($rb_cv_bsdgetpgrp)
|
||
|
if test "$rb_cv_bsdgetpgrp" = yes; then
|
||
|
AC_DEFINE(BSD_GETPGRP, getpgrp)
|
||
|
fi
|
||
|
|
||
|
AC_MSG_CHECKING(whether setpgrp() has args)
|
||
|
AC_CACHE_VAL(rb_cv_bsdsetpgrp,
|
||
|
[AC_TRY_COMPILE([#include <unistd.h>], [setpgrp(1, 1);],
|
||
|
rb_cv_bsdsetpgrp=yes,
|
||
|
rb_cv_bsdsetpgrp=no)])
|
||
|
AC_MSG_RESULT($rb_cv_bsdsetpgrp)
|
||
|
if test "$rb_cv_bsdsetpgrp" = yes; then
|
||
|
AC_DEFINE(BSD_SETPGRP, setpgrp)
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
AC_C_BIGENDIAN
|
||
|
AC_CHAR_UNSIGNED
|
||
|
|
||
|
AC_MSG_CHECKING([count field in FILE structures])
|
||
|
AC_CACHE_VAL(rb_cv_fcnt,
|
||
|
[AC_TRY_COMPILE([#include <stdio.h>],
|
||
|
[FILE *f = stdin; f->_cnt = 0;], rb_cv_fcnt="_cnt", )
|
||
|
if test "$rb_cv_fcnt" = ""; then
|
||
|
AC_TRY_COMPILE([#include <stdio.h>],
|
||
|
[FILE *f = stdin; f->__cnt = 0;], rb_cv_fcnt="__cnt", )
|
||
|
fi
|
||
|
if test "$rb_cv_fcnt" = ""; then
|
||
|
AC_TRY_COMPILE([#include <stdio.h>],
|
||
|
[FILE *f = stdin; f->_r = 0;], rb_cv_fcnt="_r", )
|
||
|
fi
|
||
|
if test "$rb_cv_fcnt" = ""; then
|
||
|
AC_TRY_COMPILE([#include <stdio.h>],
|
||
|
[FILE *f = stdin; f->readCount = 0;],
|
||
|
rb_cv_fcnt="readCount", rb_cv_fcnt="not found")
|
||
|
fi])
|
||
|
if test "$rb_cv_fcnt" = "not found"; then
|
||
|
AC_MSG_RESULT([not found(OK if using GNU libc)])
|
||
|
else
|
||
|
AC_MSG_RESULT($rb_cv_fcnt)
|
||
|
AC_DEFINE_UNQUOTED(FILE_COUNT, $rb_cv_fcnt)
|
||
|
fi
|
||
|
|
||
|
if test "$ac_cv_func_getpwent" = yes; then
|
||
|
AC_MSG_CHECKING(struct passwd)
|
||
|
AC_EGREP_HEADER(pw_change, pwd.h, AC_DEFINE(PW_CHANGE))
|
||
|
AC_EGREP_HEADER(pw_quota, pwd.h, AC_DEFINE(PW_QUOTA))
|
||
|
AC_EGREP_HEADER(pw_age, pwd.h, AC_DEFINE(PW_AGE))
|
||
|
AC_EGREP_HEADER(pw_class, pwd.h, AC_DEFINE(PW_CLASS))
|
||
|
AC_EGREP_HEADER(pw_comment, pwd.h, AC_DEFINE(PW_COMMENT))
|
||
|
AC_EGREP_HEADER(pw_expire, pwd.h, AC_DEFINE(PW_EXPIRE))
|
||
|
AC_MSG_RESULT(done)
|
||
|
fi
|
||
|
|
||
|
dnl wheather use dln_a_out ot not
|
||
|
AC_ARG_WITH(dln-a-out, [--with-dln-a-out use dln_a_out if possible], [
|
||
|
case $withval in
|
||
|
yes) with_dln_a_out=yes;;
|
||
|
*) with_dln_a_out=no;;
|
||
|
esac], [with_dln_a_out=no])
|
||
|
|
||
|
case "$host_os" in
|
||
|
linux*)
|
||
|
AC_MSG_CHECKING(whether ELF binaries are produced)
|
||
|
AC_CACHE_VAL(rb_cv_linux_elf,
|
||
|
[AC_TRY_RUN([
|
||
|
/* Test for whether ELF binaries are produced */
|
||
|
#include <fcntl.h>
|
||
|
#include <stdlib.h>
|
||
|
main() {
|
||
|
char buffer[4];
|
||
|
int i=open("conftest",O_RDONLY);
|
||
|
if(i==-1)
|
||
|
exit(1); /* fail */
|
||
|
if(read(i,&buffer[0],4)<4)
|
||
|
exit(1); /* fail */
|
||
|
if(buffer[0] != 127 || buffer[1] != 'E' ||
|
||
|
buffer[2] != 'L' || buffer[3] != 'F')
|
||
|
exit(1); /* fail */
|
||
|
exit(0); /* succeed (yes, it's ELF) */
|
||
|
}
|
||
|
],
|
||
|
rb_cv_linux_elf=yes,
|
||
|
rb_cv_linux_elf=no,
|
||
|
[:])])
|
||
|
AC_MSG_RESULT($rb_cv_linux_elf)
|
||
|
if test "$rb_cv_linux_elf" = no; then
|
||
|
with_dln_a_out=yes
|
||
|
host_os=linux-a.out
|
||
|
else
|
||
|
LDFLAGS="-rdynamic"
|
||
|
fi;;
|
||
|
esac
|
||
|
|
||
|
AC_SUBST(DLDFLAGS)dnl
|
||
|
|
||
|
AC_SUBST(STATIC)dnl
|
||
|
AC_SUBST(CCDLFLAGS)dnl
|
||
|
AC_SUBST(LDSHARED)dnl
|
||
|
AC_SUBST(DLEXT)dnl
|
||
|
|
||
|
STATIC=
|
||
|
|
||
|
if test "$with_dln_a_out" != yes; then
|
||
|
rb_cv_dlopen=unknown
|
||
|
AC_MSG_CHECKING(whether OS depend dynamic link works)
|
||
|
if test "$GCC" = yes; then
|
||
|
case "$host_os" in
|
||
|
nextstep*) ;;
|
||
|
human*) ;;
|
||
|
*) CCDLFLAGS=-fpic;;
|
||
|
esac
|
||
|
else
|
||
|
case "$host_os" in
|
||
|
hpux*) CCDLFLAGS='+z';;
|
||
|
solaris*|irix*) CCDLFLAGS='-K pic' ;;
|
||
|
sunos*) CCDLFLAGS='-pic' ;;
|
||
|
esix*|uxpds*) CCDLFLAGS='-Kpic' ;;
|
||
|
*) CCDLFLAGS='' ;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
case "$host_os" in
|
||
|
hpux*) DLDFLAGS="-E"
|
||
|
LDSHARED='ld -b'
|
||
|
LDFLAGS="-Wl,-E"
|
||
|
rb_cv_dlopen=yes;;
|
||
|
solaris*) LDSHARED='ld -G'
|
||
|
rb_cv_dlopen=yes;;
|
||
|
sunos*) LDSHARED='ld -assert nodefinitions'
|
||
|
rb_cv_dlopen=yes;;
|
||
|
irix*) LDSHARED='ld -ignore_unresolved'
|
||
|
rb_cv_dlopen=yes;;
|
||
|
sysv4*) LDSHARED='ld -G'
|
||
|
rb_cv_dlopen=yes;;
|
||
|
esix*|uxpds*) LDSHARED="ld -G"
|
||
|
rb_cv_dlopen=yes ;;
|
||
|
linux*) LDSHARED="gcc -shared"
|
||
|
rb_cv_dlopen=yes ;;
|
||
|
freebsd*) LDSHARED="ld -Bshareable"
|
||
|
rb_cv_dlopen=yes ;;
|
||
|
netbsd*) LDSHARED="ld -Bshareable"
|
||
|
rb_cv_dlopen=yes ;;
|
||
|
openbsd*) LDSHARED="ld -Bshareable"
|
||
|
rb_cv_dlopen=yes ;;
|
||
|
nextstep*) LDSHARED='cc -r'
|
||
|
LDFLAGS="-u libsys_s"
|
||
|
DLDFLAGS="$ARCH_FLAG"
|
||
|
rb_cv_dlopen=yes ;;
|
||
|
aix*) LDSHARED='../../miniruby ../aix_ld.rb $(TARGET)'
|
||
|
rb_cv_dlopen=yes ;;
|
||
|
human*) DLDFLAGS=''
|
||
|
LDSHARED=''
|
||
|
LDFLAGS='' ;;
|
||
|
*) LDSHARED='ld' ;;
|
||
|
esac
|
||
|
AC_MSG_RESULT($rb_cv_dlopen)
|
||
|
fi
|
||
|
|
||
|
dln_a_out_works=no
|
||
|
if test "$ac_cv_header_a_out_h" = yes; then
|
||
|
if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then
|
||
|
AC_MSG_CHECKING(whether matz's dln works)
|
||
|
cat confdefs.h > config.h
|
||
|
AC_CACHE_VAL(rb_cv_dln_a_out,
|
||
|
[AC_TRY_COMPILE([
|
||
|
#define USE_DLN_A_OUT
|
||
|
#include "dln.c"
|
||
|
],
|
||
|
[],
|
||
|
rb_cv_dln_a_out=yes,
|
||
|
rb_cv_dln_a_out=no)])
|
||
|
AC_MSG_RESULT($rb_cv_dln_a_out)
|
||
|
if test "$rb_cv_dln_a_out" = yes; then
|
||
|
dln_a_out_works=yes
|
||
|
AC_DEFINE(USE_DLN_A_OUT)
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if test "$dln_a_out_works" = yes; then
|
||
|
if test "$GCC" = yes; then
|
||
|
STATIC=-static
|
||
|
else
|
||
|
STATIC=-Bstatic
|
||
|
fi
|
||
|
DLEXT=o
|
||
|
AC_DEFINE(DLEXT, ".o")
|
||
|
CCDLFLAGS=
|
||
|
else
|
||
|
case "$host_os" in
|
||
|
hpux*) DLEXT=sl
|
||
|
AC_DEFINE(DLEXT, ".sl");;
|
||
|
nextstep*) DLEXT=o
|
||
|
AC_DEFINE(DLEXT, ".o");;
|
||
|
*) DLEXT=so
|
||
|
AC_DEFINE(DLEXT, ".so");;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
AC_SUBST(STRIP)dnl
|
||
|
if test "$with_dln_a_out" = yes; then
|
||
|
STRIP=true
|
||
|
else
|
||
|
STRIP=strip
|
||
|
fi
|
||
|
|
||
|
case "$host_os" in
|
||
|
linux*)
|
||
|
STRIP='strip -S -x';;
|
||
|
nextstep*)
|
||
|
STRIP='strip -A -n';;
|
||
|
esac
|
||
|
|
||
|
EXTSTATIC=
|
||
|
AC_SUBST(EXTSTATIC)dnl
|
||
|
AC_ARG_WITH(static-linked-ext,
|
||
|
[--with-static-linked-ext link external modules statically],
|
||
|
[case $withval in
|
||
|
yes) STATIC=
|
||
|
EXTSTATIC=static;;
|
||
|
*) ;;
|
||
|
esac])
|
||
|
|
||
|
case "$host_os" in
|
||
|
human*)
|
||
|
AC_CHECK_LIB(signal, _harderr)
|
||
|
AC_CHECK_LIB(hmem, hmemset)
|
||
|
AC_CHECK_FUNCS(select)
|
||
|
AC_MSG_CHECKING(whether PD libc _dtos18 fail to convert big number)
|
||
|
AC_CACHE_VAL(rb_cv_missing__dtos18,
|
||
|
[AC_TRY_RUN(
|
||
|
changequote(<<, >>)dnl
|
||
|
<<
|
||
|
#include <stdio.h>
|
||
|
main ()
|
||
|
{
|
||
|
char buf[256];
|
||
|
sprintf (buf, "%g", 1e+300);
|
||
|
exit (strcmp (buf, "1e+300") ? 0 : 1);
|
||
|
}
|
||
|
>>,
|
||
|
changequote([, ])dnl
|
||
|
rb_cv_missing__dtos18=yes, rb_cv_missing__dtos18=no)])
|
||
|
AC_MSG_RESULT($rb_cv_missing__dtos18)
|
||
|
if test "$rb_cv_missing__dtos18" = yes; then
|
||
|
AC_DEFINE(MISSING__DTOS18)
|
||
|
fi
|
||
|
AC_MSG_CHECKING(whether PD libc fconvert fail to round)
|
||
|
AC_CACHE_VAL(rb_cv_missing_fconvert,
|
||
|
[AC_TRY_RUN(
|
||
|
changequote(<<, >>)dnl
|
||
|
<<
|
||
|
#include <stdio.h>
|
||
|
#include <math.h>
|
||
|
main ()
|
||
|
{
|
||
|
char buf[256];
|
||
|
sprintf (buf, "%f", log(exp(1.0)));
|
||
|
exit (strcmp (buf, "1.000000") ? 0 : 1);
|
||
|
}
|
||
|
>>,
|
||
|
changequote([, ])dnl
|
||
|
rb_cv_missing_fconvert=yes, rb_cv_missing_fconvert=no)])
|
||
|
AC_MSG_RESULT($rb_cv_missing_fconvert)
|
||
|
if test "$rb_cv_missing_fconvert" = yes; then
|
||
|
AC_DEFINE(MISSING_FCONVERT)
|
||
|
fi
|
||
|
LIBOBJS="$LIBOBJS x68.o"
|
||
|
CFLAGS="$CFLAGS -fansi-only -cc1-stack=196608 -cpp-stack=2694144"
|
||
|
binsuffix=.x
|
||
|
setup=Setup.x68
|
||
|
;;
|
||
|
*)
|
||
|
binsuffix=
|
||
|
setup=Setup
|
||
|
;;
|
||
|
esac
|
||
|
AC_SUBST(binsuffix)
|
||
|
AC_SUBST(setup)
|
||
|
|
||
|
if test "$prefix" = NONE; then
|
||
|
prefix=$ac_default_prefix
|
||
|
fi
|
||
|
|
||
|
if test "$fat_binary" = yes ; then
|
||
|
CFLAGS="$CFLAGS -pipe $ARCH_FLAG"
|
||
|
fi
|
||
|
|
||
|
AC_DEFINE_UNQUOTED(RUBY_LIB, "${prefix}/lib/ruby")
|
||
|
AC_SUBST(arch)dnl
|
||
|
|
||
|
if test "$fat_binary" = yes ; then
|
||
|
arch="fat-${host_os}"
|
||
|
|
||
|
AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB,
|
||
|
"${prefix}/lib/ruby/" __ARCHITECTURE__ "-${host_os}" )
|
||
|
|
||
|
AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "${prefix}/lib/ruby/${arch}")
|
||
|
AC_DEFINE_UNQUOTED(RUBY_PLATFORM, __ARCHITECTURE__ "-${host_os}" )
|
||
|
else
|
||
|
arch="${host_cpu}-${host_os}"
|
||
|
AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "${prefix}/lib/ruby/${arch}")
|
||
|
AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}")
|
||
|
fi
|
||
|
|
||
|
echo "creating config.h"
|
||
|
cat confdefs.h > config.h
|
||
|
|
||
|
AC_OUTPUT(Makefile ext/extmk.rb)
|