--- gforth/configure.in 2010/08/07 15:05:40 1.281 +++ gforth/configure.in 2012/10/05 23:48:26 1.315 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -#Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. +#Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc. #This file is part of Gforth. @@ -20,12 +20,12 @@ dnl Process this file with autoconf to p dnl We use some automake macros here, dnl but don't use automake for creating Makefile.in -AC_INIT([gforth],[0.7.0-20100807],[https://savannah.gnu.org/bugs/?func=addbug&group=gforth]) +AC_INIT([gforth],[0.7.9-20120730],[https://savannah.gnu.org/bugs/?func=addbug&group=gforth]) AC_PREREQ(2.54) #snapshots have numbers major.minor.release-YYYYMMDD #note that lexicographic ordering must be heeded. #I.e., 0.4.1-YYYYMMDD must not exist before 0.4.1! -UPDATED="November 8, 2008" +UPDATED="July 30, 2012" AC_SUBST(UPDATED) AC_CONFIG_HEADERS(engine/config.h) @@ -71,6 +71,7 @@ if test "$withval" = "yes"; then DEBUGFL GCC_LD="\$(GCC)" EC_MODE="false" NO_EC="" +NO_CROSS="" EC="" engine2='engine2$(OPT).o' engine_fast2='engine-fast2$(OPT).o' @@ -90,6 +91,7 @@ else EC_MODE="true" EC="-ec" NO_EC="#" + NO_CROSS="#" engine2="" engine_fast2="" no_dynamic="-DNO_DYNAMIC" @@ -108,7 +110,49 @@ else platform=${withval} fi]) +AC_ARG_ENABLE(lib, + AC_HELP_STRING([--enable-lib], + [ Compile Gforth as shared library (default disabled).]), + ,enable_lib=no) +if test "$enable_lib" != "no"; then + AC_DEFINE(HAS_LIB,,[Define if you want to build as shared library]) + libengines=libgforths + libinstall=libinstall + LIB_VERSION=0:8:0 +fi +AC_SUBST(libengines) +AC_SUBST(libinstall) +AC_SUBST(LIB_VERSION) + +AC_ARG_WITH(cross, + AC_HELP_STRING([--with-cross=], + [ Build gforth using a cross compiler.]), +[if test "$withval" = "no"; then + echo "defining hosted system" +else + echo "defining cross compiled system (${withval})" + if test -f "arch/$host_cpu/${withval}/config.sh"; then + source "arch/$host_cpu/${withval}/config.sh" + fi + GCC_PATH=$(which $CC) + LIB_PATH=${GCC_PATH%/*/*} + platform=${withval} + NO_EC="" + NO_CROSS="#" +fi]) + +AC_ARG_WITH(arch, + AC_HELP_STRING([--with-arch=], + [ Build gforth binaries with postfix]), +[if test "$withval" = "no"; then + ARCH="" +else + ARCH=-${withval} +fi]) +AC_SUBST(ARCH) + #variables mentioned in INSTALL +AC_ARG_VAR(SH, [The shell]) AC_ARG_VAR(CC, [The C compiler (must support GNU C 2.x).]) AC_ARG_VAR(FORTHSIZES, [Gforth command line options for the default stack and dictionary sizes (see INSTALL).]) AC_ARG_VAR(STACK_CACHE_REGS, [number of registers in the maximum stack cache state for gforth-fast and gforth-native (default platform-dependent).]) @@ -157,6 +201,8 @@ AC_PROG_CC test "$GCC" = "yes" || AC_MSG_ERROR(Gforth uses GNU C extensions and requires GCC 2.0 or higher) +test "x$SH" = "x" && SH="/bin/sh" + AC_MSG_CHECKING([whether to use two dispatches per conditional branch]) test x$condbranch_opt = x && if ($CC -v 2>&1 |grep 'gcc version 3' >/dev/null); then @@ -166,18 +212,22 @@ else fi AC_MSG_RESULT($condbranch_opt) AC_SUBST(condbranch_opt) +AC_SUBST(host_cpu) +AC_SUBST(SH) AC_SUBST(CC) AC_SUBST(GCC_LD) AC_SUBST(DEBUGFLAG) AC_SUBST(EC) AC_SUBST(NO_EC) +AC_SUBST(NO_CROSS) AC_SUBST(EC_MODE) AC_SUBST(engine2) AC_SUBST(engine_fast2) AC_SUBST(no_dynamic) AC_SUBST(image_i) AC_SUBST(signals_o) +AC_SUBST(mi_prefix) #this is used to disable some (not generally essential) part of the #Makefile that some makes don't grok. It would be better to test for @@ -189,14 +239,18 @@ test "$make_type" = "GNU Make" && GNUMAK AC_MSG_RESULT($make_type) AC_SUBST(GNUMAKE) -AC_MSG_CHECKING([whether the linker accepts -export-dynamic]) -OLDLDFLAGS=$LDFLAGS -LDFLAGS="$LDFLAGS -export-dynamic" -dnl AC_TRY_LINK gives false positive on rs6000-ibm-aix4.2.1.0 -dnl AC_TRY_LINK(,,ac_export_dynamic=yes,ac_export_dynamic=no) -AC_TRY_RUN(main(){exit(0);},ac_export_dynamic=yes,ac_export_dynamic=no,ac_export_dynamic=no) -test $ac_export_dynamic = yes|| LDFLAGS=$OLDLDFLAGS -AC_MSG_RESULT($ac_export_dynamic) +if test "$ac_export_dynamic" != yes; then + AC_MSG_CHECKING([whether the linker accepts -export-dynamic]) + OLDLDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -export-dynamic" + dnl AC_TRY_LINK gives false positive on rs6000-ibm-aix4.2.1.0 + dnl AC_TRY_LINK(,,ac_export_dynamic=yes,ac_export_dynamic=no) + AC_TRY_RUN(main(){exit(0);},ac_export_dynamic=yes,ac_export_dynamic=no,ac_export_dynamic=no) + test $ac_export_dynamic = yes|| LDFLAGS=$OLDLDFLAGS + AC_MSG_RESULT($ac_export_dynamic) +else + LDFLAGS="$LDFLAGS -export-dynamic" +fi #terminology is a bit unusual here: The host is the system on which #gforth will run; the system on which configure will run is the `build' @@ -242,14 +296,20 @@ case "$host_cpu" in ;; i486) machine=386 - CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -m486" + CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr" + CFLAGS_1="$CFLAGS" + CFLAGS="$CFLAGS -march=i486" + AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1 -m486") + AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1") ;; i*86) machine=386 CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr" CFLAGS_1="$CFLAGS" - CFLAGS="$CFLAGS -march=pentium" + CFLAGS="$CFLAGS -march=pentium -mtune=generic" + AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1 -march=pentium") AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1 -m486") + AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1") ;; x86_64) case $CC @@ -663,6 +723,14 @@ AC_TRY_COMPILE(,[int __attribute__((unus AC_DEFINE_UNQUOTED(MAYBE_UNUSED,$MAYBE_UNUSED,[attribute for possibly unused variables]) AC_MSG_RESULT($MAYBE_UNUSED) +# Try if GCC understands __thread +AC_CACHE_CHECK([whether gcc understands '__thread'], [ac_cv_thread], + [AC_TRY_COMPILE(,[extern __thread int foo;], + [ac_cv_thread=yes], + [ac_cv_thread=no])]) +test x$ac_cv_thread = xyes && PER_THREAD='__thread' +AC_DEFINE_UNQUOTED(PER_THREAD,$PER_THREAD,[storage class for thread-local variables]) + #try if m4 understands -s AC_MSG_CHECKING([how to invoke m4]) if m4 -s /dev/null >/dev/null 2>&1; then @@ -673,22 +741,6 @@ fi AC_SUBST(M4) AC_MSG_RESULT($M4) -# Find installed Gforth -AC_MSG_CHECKING([for gforth]) -GFORTH="`cd / && which gforth 2>/dev/null`" -#the "$srcdir" = "." test defends agains the "../" bug in gforth-0.6.2 -(cd / && $GFORTH -e bye >/dev/null 2>/dev/null && test "$srcdir" = ".") || GFORTH="" -if test -z "$GFORTH"; then - PREFORTH='echo "You need to configure with a gforth in \$PATH to build this part" && false' - kernel_anti_dependence='' -else - PREFORTH="$GFORTH -i `cd / && $GFORTH --debug -e bye 2>&1 |grep "Opened image file: "|sed 's/Opened image file: //'`" ; - kernel_anti_dependence='$(kernel_fi)' -fi -AC_SUBST(PREFORTH) -AC_SUBST(kernel_anti_dependence) -AC_MSG_RESULT($PREFORTH) - #echo "machine='$machine'" dnl AC_CHECK_PROG(asm_fs,asm.fs,arch/$machine/asm.fs,,$srcdir/arch/$machine) @@ -881,6 +933,11 @@ AC_PROG_LN_S AC_PROG_INSTALL AC_CHECK_PROGS(TEXI2DVI,texi2dvi4a2ps texi2dvi) +dnl check for the presence of Emacs +AC_CHECK_PROGS(EMACS,emacs xemacs) +test -n "$EMACS" && gforth_elc=gforth.elc +AC_SUBST(gforth_elc) + dnl MacOS X has a libtool that does something else AC_CHECK_PROGS(GNU_LIBTOOL,"glibtool --tag=CC" libtool) @@ -889,11 +946,18 @@ dnl This check is just for making later dnl using sin here is no good idea since it is built-into gcc and typechecked AC_CHECK_LIB(m,asin) AC_CHECK_LIB(ltdl,lt_dlinit) +dnl ,LIB_SUFFIX=.la,LIB_SUFFIX=.so) +if test "x$ac_cv_lib_ltdl_lt_dlinit" = xyes; then + LIB_SUFFIX=.la +else + LIB_SUFFIX=.so +fi +AC_SUBST(LIB_SUFFIX) +AC_CHECK_LIB(rt,clock_gettime) if test -n "$GNU_LIBTOOL" -a $ac_cv_lib_ltdl_lt_dlinit = yes; then build_libcc_named=build-libcc-named else - build_libcc_named="" AC_MSG_WARN([No GNU_LIBTOOL found, skip pre-building libcc-based libraries]) fi AC_SUBST(build_libcc_named) @@ -911,7 +975,7 @@ if test -z "$FFI_H_NAME"; then AC_CHECK_HEADER(ffi/ffi.h,FFI_H_NAME=ffi/ffi.h,) fi AC_SUBST(FFI_H_NAME) -AC_CHECK_LIB(ffi,ffi_call) +AC_CHECK_LIB(ffi,ffi_call,LIBS="$LIBS") if test -n "$FFI_H_NAME" -a $ac_cv_lib_ffi_ffi_call = yes then LIBFFIFLAG="true" @@ -921,7 +985,7 @@ else fi #check for ffcall libraries #unfortunately, these four calls are separated out into a library each. -AC_CHECK_LIB(avcall,__builtin_avcall) +AC_CHECK_LIB(avcall,__builtin_avcall,LIBS="$LIBS") dnl AC_CHECK_LIB(callback,__vacall_r) dnl AC_CHECK_LIB(vacall,vacall) dnl AC_CHECK_LIB(trampoline,alloc_trampoline) @@ -941,9 +1005,9 @@ if test "$host_os" != "nextstep3" then AC_FUNC_MEMCMP fi -AC_REPLACE_FUNCS(memmove strtoul pow10 strerror strsignal atanh) +AC_REPLACE_FUNCS(memmove strtoul pow10 sincos strerror strsignal atanh) AC_FUNC_FSEEKO -AC_CHECK_FUNCS(ftello dlopen sys_siglist getrusage nanosleep) +AC_CHECK_FUNCS(ftello dlopen sys_siglist getrusage nanosleep clock_gettime) AC_CHECK_TYPES(stack_t,,,[#include ]) AC_DECL_SYS_SIGLIST AC_CHECK_FUNC(getopt_long,[true],[AC_LIBOBJ(getopt) AC_LIBOBJ(getopt1)]) @@ -962,6 +1026,32 @@ include_fi=kernl${wordsize}${bytesex}${E AC_SUBST(kernel_fi) AC_SUBST(include_fi) +# Find installed Gforth +AC_MSG_CHECKING([for gforth]) +GFORTH="`cd / && which gforth 2>/dev/null`" +#the "$srcdir" = "." test defends agains the "../" bug in gforth-0.6.2 +(cd / && $GFORTH -e bye >/dev/null 2>/dev/null && test "$srcdir" = ".") || GFORTH="" +if test -z "$GFORTH"; then + PREFORTH='echo "You need to configure with a gforth in \$PATH to build this part" && false' + GFORTHKER='echo "You need to configure with a gforth in \$PATH to build this part" && false' + kernel_anti_dependence='' +else + GFORTH_FI=`cd / && $GFORTH --debug -e bye 2>&1 |grep "Opened image file: "|sed 's/Opened image file: //'` + PREFORTH="$GFORTH -i $GFORTH_FI" ; + KERNLX_FI1=`echo $GFORTH_FI | sed -e s/lib[64]*/share/g -e s/gforth.fi/kernl*.fi/g` + KERNLX_FI2=`echo $GFORTH_FI | sed -e s/gforth.fi/kernl*.fi/g` + test -f $KERNLX_FI1 && KERNLX_FI=$KERNLX_FI1 + test -f $KERNLX_FI2 && KERNLX_FI=$KERNLX_FI2 + GFORTHKER="$GFORTH -i `echo $KERNLX_FI`" ; + kernel_anti_dependence='$(kernel_fi)' +fi +AC_SUBST(PREFORTH) +AC_SUBST(GFORTHKER) +AC_SUBST(kernel_anti_dependence) +AC_MSG_RESULT($PREFORTH) +AC_DEFINE_UNQUOTED(KERNEL, "$kernel_fi", [The kernel to load in the image]) +AC_DEFINE_UNQUOTED(ARCH, "$machine", [architecture to run on ]) + #this breaks bindists #dnl replace srource directory by absolute value #if test $srcdir = "."; then srcdir=`pwd` @@ -976,6 +1066,8 @@ vmgen machpc.fs envos.fs preforth +libforth +gforthker engine/Makefile engine/libcc.h doc/version.texi @@ -985,11 +1077,14 @@ chmod +x gforthmi chmod +x vmgen chmod +x build-ec chmod +x preforth +chmod +x libforth +chmod +x gforthker test -d kernel||mkdir kernel if test $srcdir != "."; then ln -sf $srcdir/gforth.el .; fi -$srcdir/mkinstalldirs include/gforth/$PACKAGE_VERSION +$srcdir/mkinstalldirs include/gforth$ARCH/$PACKAGE_VERSION $srcdir/mkinstalldirs arch/$machine -ln -sf ../../../engine/config.h ../../../engine/libcc.h include/gforth/$PACKAGE_VERSION]], +ln -sf ../../../engine/config.h ../../../engine/libcc.h include/gforth$ARCH/$PACKAGE_VERSION]], [PACKAGE_VERSION=$PACKAGE_VERSION - machine=$machine]) + machine=$machine + ARCH=$ARCH]) AC_OUTPUT