--- gforth/configure.in 1999/03/20 09:20:31 1.52 +++ gforth/configure.in 2002/11/24 21:20:32 1.89 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -#Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. +#Copyright (C) 1995,1996,1997,1998,2000 Free Software Foundation, Inc. #This file is part of Gforth. @@ -16,37 +16,27 @@ dnl Process this file with autoconf to p #You should have received a copy of the GNU General Public License #along with this program; if not, write to the Free Software -#Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. AC_INIT(engine/engine.c) dnl We use some automake macros here, dnl but don't use automake for creating Makefile.in -AM_INIT_AUTOMAKE(gforth,0.4.9-19990320) +AM_INIT_AUTOMAKE(gforth,0.5.9-20020901) #snapshots have numbers major.minor.release-YYYYMMDD #note that lexicographic ordering bust be heeded. #I.e., 0.4.1-YYYYMMDD must not exist before 0.4.1! +UPDATED="1 September 2002" +AC_SUBST(UPDATED) AM_CONFIG_HEADER(engine/config.h) -AM_CYGWIN32 +#AM_CYGWIN32 AC_ARG_ENABLE(force-reg, [ --enable-force-reg Use explicit register declarations if they appear in the machine.h file. This can cause a good speedup, but also incorrect code with some gcc versions on some processors (default disabled).], - -AC_DEFINE(FORCE_REG)) -dnl this is not quite according to the autoconf manual, it causes a replacement -AC_ARG_ENABLE(direct-threaded, -[ --enable-direct-threaded Force direct threading. This may not work on - some machines and may cause slowdown on others. - (default processor-dependent)], -AC_DEFINE(DIRECT_THREADED)) -AC_ARG_ENABLE(indirect-threaded, -[ --enable-indirect-threaded Force indirect threading. This can cause a - slowdown on some machines. - (default processor-dependent)], -AC_DEFINE(INDIRECT_THREADED)) +AC_DEFINE(FORCE_REG,,[Define if you want to use explicit register declarations for better performance or for more convenient CODE words (does not work with all GCC versions on all machines)])) AC_ARG_WITH(debug, [ --with-debug specifies option -g to compile with debug info (default) @@ -55,6 +45,16 @@ AC_ARG_WITH(debug, debugging informations.], if test "$withval" = "yes"; then DEBUGFLAG=-g; fi) +PEEPHOLE="yes" +AC_ARG_WITH(peephole, +[ --with-peephole Enable peephole optimization (default) + --without-peephole disables peephole optimization. Creates smaller, + but slower images.], +PEEPHOLE="$withval") + +#currently we force direct threading this way. Eventually we should +#setup in the arch and engine files right + CFLAGS=$CFLAGS AC_PROG_CC @@ -117,7 +117,7 @@ if test "$ac_cv_int_type_cell" != int; t echo "Since you don't have a proper C on this machine, that's one more reason" echo "to use Forth;-)" fi -AC_DEFINE_UNQUOTED(CELL_TYPE,$ac_cv_int_type_cell) +AC_DEFINE_UNQUOTED(CELL_TYPE,$ac_cv_int_type_cell,[an integer type that is as long as a pointer]) ac_cv_int_type_double_cell=none case `expr 2 '*' "$ac_cv_sizeof_char_p"` in @@ -139,16 +139,18 @@ if test "$ac_cv_int_type_double_cell" = echo "If you find this unacceptable, ask the GCC maintainers to provide proper" echo 'long longs for your machine (the GCC manual states that they \"are twice as' echo "long as \`long int\'\")." - LIBOBJS="$LIBOBJS dblsub.o" - AC_DEFINE(BUGGY_LONG_LONG) + AC_LIBOBJ(dblsub) + AC_DEFINE(BUGGY_LONG_LONG,,[define this if there is no working DOUBLE_CELL_TYPE on your machine]) else - AC_DEFINE_UNQUOTED(DOUBLE_CELL_TYPE,$ac_cv_int_type_double_cell) + AC_DEFINE_UNQUOTED(DOUBLE_CELL_TYPE,$ac_cv_int_type_double_cell,[an integer type that is twice as long as a pointer]) fi AC_MSG_CHECKING([whether the linker accepts -export-dynamic]) OLDLDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -export-dynamic" -AC_TRY_LINK(,,ac_export_dynamic=yes,ac_export_dynamic=no) +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) @@ -159,13 +161,9 @@ case "$host_cpu" in hppa*) machine=hppa $srcdir/mkinstalldirs arch/hppa - LIBOBJS="$LIBOBJS ../arch/hppa/cache.o" + AC_LIBOBJ(../arch/hppa/cache) LDFLAGS="$LDFLAGS -Xlinker -N" LIBS="$LIBS -L/lib/pa1.1/" - if test "${enable_direct_threaded+set}" = "" - then - AC_DEFINE(DIRECT_THREADED) - fi ;; sparc*) machine=sparc @@ -173,39 +171,27 @@ case "$host_cpu" in i386) machine=386 CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem" - if test "${enable_direct_threaded+set}" = "" \ - -a "${enable_indirect_threaded+set}" = "" - then - echo "Using direct threaded code on 386" - AC_DEFINE(DIRECT_THREADED) - fi ;; i486) machine=386 CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem -m486" - if test "${enable_direct_threaded+set}" = "" \ - -a "${enable_indirect_threaded+set}" = "" - then - echo "Using direct threaded code on 486" - AC_DEFINE(DIRECT_THREADED) - fi ;; - i586|i686) + i*86) machine=386 - CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem -m486" - if test "${enable_direct_threaded+set}" = "" \ - -a "${enable_indirect_threaded+set}" = "" - then - echo "Using indirect threaded code on Pentium and up" - AC_DEFINE(INDIRECT_THREADED) - fi + CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem" + CFLAGS_1="$CFLAGS" + CFLAGS="$CFLAGS -march=pentium" + AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1 -m486") + ;; + ia64*) + machine=ia64 ;; m68k) machine=m68k CFLAGS="$CFLAGS -fomit-frame-pointer" if test "$host_os" = "nextstep3" then - LIBOBJS="$LIBOBJS termios.o" + AC_LIBOBJ(termios) fi ;; mips*) @@ -217,7 +203,9 @@ case "$host_cpu" in AC_TRY_LINK(,,ac_link_mips_t=yes,ac_link_mips_t=no) test $ac_link_mips_t = yes||LDFLAGS=$OLDLDFLAGS AC_MSG_RESULT($ac_link_mips_t) - test $ac_link_mips_t = yes||(echo cannot link text and data into same 256M region, using indirect threading; AC_DEFINE(INDIRECT_THREADED)) + fixme #dynamically generated code should be in the same 256MB + # region as the text segment; no indirect threading necessary + test $ac_link_mips_t = yes||(echo cannot link text and data into same 256M region, using indirect threading; AC_DEFINE(INDIRECT_THREADED,,[Define if you want to force an indirect threaded code implementation])) AC_MSG_CHECKING([whether the linker accepts -D]) OLDLDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Xlinker -D -Xlinker 10400000" @@ -227,14 +215,15 @@ case "$host_cpu" in ;; alpha*) machine=alpha + #full IEEE FP support for more uniformity across platforms: + CFLAGS="$CFLAGS -mieee" ;; - power*) + power*|rs6000) machine=power $srcdir/mkinstalldirs arch/power - AC_CHECK_FUNC(_sync_cache_range,true,LIBOBJS="$LIBOBJS ../arch/power/_sync_cache_range.o") + AC_CHECK_FUNC(_sync_cache_range,true,AC_LIBOBJ(../arch/power/_sync_cache_range)) ;; *) - echo "No direct threading support for $host_cpu, using indirect threading." echo "Using a generic machine description." echo "I'll assume that C floats and doubles are represented by IEEE single and" echo "double numbers. If this is not so, SF@ etc. will not work correctly." @@ -244,30 +233,57 @@ esac AC_SUBST(host) AC_SUBST(ENGINE_FLAGS) +# Try if GCC understands -fno-cross-jump + +CFLAGS_1="$CFLAGS" +CFLAGS="$CFLAGS -fno-cross-jump" +AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1") + +AC_CHECK_PROG(asm_fs,asm.fs,arch/$machine/asm.fs,,$srcdir/arch/$machine) +AC_SUBST(asm_fs) + +AC_CHECK_PROG(disasm_fs,disasm.fs,arch/$machine/disasm.fs,,$srcdir/arch/$machine) +AC_SUBST(disasm_fs) + case "$host_os" in *win32) EXE=".exe" + DIRSEP="\\" ;; *) EXE="" + DIRSEP="/" ;; esac AC_SUBST(EXE) +AC_SUBST(DIRSEP) +AC_DEFINE_UNQUOTED(DIRSEP,'$DIRSEP',[a directory separator character]) dnl Now a little support for DOS/DJGCC AC_SUBST(GFORTH_EXE) GFORTH_EXE="" AC_SUBST(GFORTHFAST_EXE) GFORTHFAST_EXE="" +AC_SUBST(GFORTHITC_EXE) +GFORTHITC_EXE="" AC_SUBST(GFORTHDITC_EXE) GFORTHDITC_EXE="" PATHSEP=":" AC_SUBST(PATHSEP) -AC_DEFINE_UNQUOTED(PATHSEP,'$PATHSEP') +AC_DEFINE_UNQUOTED(PATHSEP,'$PATHSEP',[a path separator character]) AC_SUBST(FORTHSIZES) +if test "$PEEPHOLE" = "yes" +then + PEEPHOLEFLAG="true" + AC_DEFINE(HAS_PEEPHOLE,,[Define if you want to use peephole optimization]) +else + PEEPHOLEFLAG="false" +fi +AC_SUBST(PEEPHOLEFLAG) + dnl copy commands for systems that don't have links AC_SUBST(LINK_KERNL) LINK_KERNL="" @@ -305,23 +321,26 @@ then AC_FUNC_MEMCMP fi AC_REPLACE_FUNCS(memmove strtoul pow10 strerror strsignal atanh) -AC_CHECK_FUNCS(dlopen sys_siglist) +AC_CHECK_FUNCS(dlopen sys_siglist getrusage) AC_DECL_SYS_SIGLIST -AC_CHECK_FUNC(getopt_long,true,LIBOBJS="$LIBOBJS getopt.o getopt1.o") +AC_CHECK_FUNC(getopt_long,true,AC_LIBOBJ(getopt.$ac_objext getopt1)) AC_CHECK_FUNCS(rint expm1 log1p) AC_REPLACE_FUNCS(ecvt) dnl No check for select, because our replacement is no good under dnl anything but DOS -AC_CHECK_HEADERS(sys/mman.h) +AC_CHECK_HEADERS(sys/mman.h fnmatch.h) +AC_FUNC_FNMATCH +test $ac_cv_func_fnmatch_works = yes || AC_LIBOBJ(fnmatch) AC_CHECK_FUNCS(mmap sysconf getpagesize) AM_PATH_LISPDIR kernel_fi=kernl${wordsize}${bytesex}.fi AC_SUBST(kernel_fi) -dnl replace srource directory by absolute value -if test $srcdir = "."; then srcdir=`pwd` -fi +#this breaks bindists +#dnl replace srource directory by absolute value +#if test $srcdir = "."; then srcdir=`pwd` +#fi AC_SUBST(machine) dnl AC_LINK_FILES(arch/$machine,arch/machine) #no longer needed @@ -329,9 +348,12 @@ AC_OUTPUT([ Makefile Makedist gforthmi +vmgen +machpc.fs engine/Makefile doc/version.texi ], echo timestamp > stamp-h chmod +x gforthmi +chmod +x vmgen test -d kernel||mkdir kernel)