--- gforth/configure.in 2004/12/31 13:23:56 1.143 +++ gforth/configure.in 2008/07/15 09:30:12 1.229 @@ -1,12 +1,12 @@ dnl Process this file with autoconf to produce a configure script. -#Copyright (C) 1995,1996,1997,1998,2000,2003,2004 Free Software Foundation, Inc. +#Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007 Free Software Foundation, Inc. #This file is part of Gforth. #Gforth is free software; you can redistribute it and/or #modify it under the terms of the GNU General Public License -#as published by the Free Software Foundation; either version 2 +#as published by the Free Software Foundation, either version 3 #of the License, or (at your option) any later version. #This program is distributed in the hope that it will be useful, @@ -15,36 +15,51 @@ dnl Process this file with autoconf to p #GNU General Public License for more details. #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., 59 Temple Place, Suite 330, Boston, MA 02111, USA. +#along with this program. If not, see http://www.gnu.org/licenses/. dnl We use some automake macros here, dnl but don't use automake for creating Makefile.in -AC_INIT([gforth],[0.6.2-20030910],[https://savannah.gnu.org/bugs/?func=addbug&group=gforth]) +AC_INIT([gforth],[0.6.9-20080430],[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="September 10, 2003" +UPDATED="February 23, 2008" AC_SUBST(UPDATED) AC_CONFIG_HEADERS(engine/config.h) +#remnants from having ltdl as convenience library +LTDLDEPS="" +LTDLINCL="" +LIBLTDL="" +LTDL_LDLIBS="" +AC_SUBST(LTDLDEPS) +AC_SUBST(LTDLINCL) +AC_SUBST(LIBLTDL) +AC_SUBST(LTDL_LDLIBS) + #suppress the "-g -O2" default test "$CFLAGS" || CFLAGS=-O2 -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,,[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_ENABLE(force-cdiv, + AC_HELP_STRING([--enable-force-cdiv], + [ Use the native C division - symmetric - instead of + floored division (default disabled).]), + ,enable_force_cdiv=no) +test "$enable_force_cdiv" = "no"|| + AC_DEFINE(FORCE_CDIV,,[Define if you want to use explicit symmetric division for better performance]) + AC_SUBST(PROFEXES) AC_SUBST(PROFOBJS) AC_ARG_ENABLE(prof, -[ --enable-prof Build gforth-prof, which outputs frequently occuring - sequences of primitives.], -PROFEXES="gforth-prof\$(EXE)"; PROFOBJS="engine-prof.o main-prof.o profile.o") + AC_HELP_STRING([--enable-prof], + [ Build gforth-prof, which outputs frequently occuring + sequences of primitives.]), + ,enable_prof=no) +if test "$enable_prof" != "no"; then + PROFEXES='gforth-prof$(OPT)$(EXE)'; PROFOBJS='engine-prof$(OPT).o main-prof$(OPT).o profile$(OPT).o' +fi AC_ARG_WITH(debug, [ --with-debug specifies option -g to compile with debug info @@ -53,27 +68,61 @@ AC_ARG_WITH(debug, debugging informations.], if test "$withval" = "yes"; then DEBUGFLAG=-g; fi) -dnl PEEPHOLE="yes" -dnl AC_ARG_WITH(peephole, -dnl [ --with-peephole Enable peephole optimization (default) -dnl --without-peephole disables peephole optimization. Creates smaller, -dnl but slower images.], -dnl PEEPHOLE="$withval") +GCC_LD="\$(GCC)" +EC_MODE="false" +EC="" +engine2='engine2$(OPT).o' +engine_fast2='engine-fast2$(OPT).o' +no_dynamic="" +image_i="" +signals_o="io.o signals.o" + +AC_ARG_WITH(ec, + AC_HELP_STRING([--with-ec=], + [ Build gforth for systems without OS.]), +[if test "$withval" = "no"; then + echo "defining hosted system" +else + echo "defining standalone system (${withval})" + AC_DEFINE(STANDALONE,,[Define if you want a Gforth without OS]) + EC_MODE="true" + EC="-ec" + engine2="" + engine_fast2="" + no_dynamic="-DNO_DYNAMIC" + image_i="image.i" + if test "$withval" != "yes"; then + signals_o="io-${withval}.o" + else + signals_o="io.o" + fi + GCC_PATH=$(which $CC) + LIB_PATH=${GCC_PATH%/*/*} + GCC_LD="\$(LD)" + platform=${withval} +fi]) #variables mentioned in INSTALL -AC_ARG_VAR(CC, [The C compiler (must support GNU C 2.x); gcc-2.95 recommended.]) +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).]) +AC_ARG_VAR(STACK_CACHE_DEFAULT_FAST, [number of registers in the default stack cache state for gforth-fast and gforth-native (default 1).]) +AC_ARG_VAR(GCC_PR15242_WORKAROUND, [Force the enabling (1) or disabling (0) of a workaround for a gcc-3.x performance bug (default unset: use workaround for gcc-3.x)]) + AC_ARG_VAR(ac_cv_sizeof_char_p, [sizeof(char *)]) +AC_ARG_VAR(ac_cv_sizeof_void_p, [sizeof(void *)]) AC_ARG_VAR(ac_cv_sizeof_char, [sizeof(char)]) AC_ARG_VAR(ac_cv_sizeof_short, [sizeof(short)]) AC_ARG_VAR(ac_cv_sizeof_int, [sizeof(int)]) AC_ARG_VAR(ac_cv_sizeof_long, [sizeof(long)]) AC_ARG_VAR(ac_cv_sizeof_long_long, [sizeof(long long)]) AC_ARG_VAR(ac_cv_sizeof_intptr_t, [sizeof(intptr_t)]) -AC_ARG_VAR(ac_cv_sizeof_int128_t, [sizeof(int128_t)]) AC_ARG_VAR(ac_cv_c_bigendian, [Is the target big-endian ("yes" or "no")?]) AC_ARG_VAR(no_dynamic_default, [run gforth with --dynamic (0) or --no-dynamic (1) by default]) -AC_ARG_VAR(skip_code, [assembly code for skipping 16 bytes of code]) +AC_ARG_VAR(condbranch_opt, [enable (1) or disable (0) using two dispatches for conditional branches]) +AC_ARG_VAR(skipcode, [assembly code for skipping 16 bytes of code]) +AC_ARG_VAR(asmcomment, [assembler comment start string]) +AC_ARG_VAR(arm_cacheflush, [file containing ARM cacheflush function (without .c)]) #set up feature test macros, so the tests get them right: # turn on all POSIX, SUSv3, and GNU features if available @@ -98,17 +147,35 @@ AC_PROG_CC test "$GCC" = "yes" || AC_MSG_ERROR(Gforth uses GNU C extensions and requires GCC 2.0 or higher) +AC_MSG_CHECKING([whether to use two dispatches per conditional branch]) +test x$condbranch_opt = x && +if ($CC -v 2>&1 |grep -q 'gcc version 3'); then + condbranch_opt=0 +else + condbranch_opt=1 +fi +AC_MSG_RESULT($condbranch_opt) +AC_SUBST(condbranch_opt) + AC_SUBST(CC) +AC_SUBST(GCC_LD) AC_SUBST(DEBUGFLAG) - +AC_SUBST(EC) +AC_SUBST(EC_MODE) +AC_SUBST(engine2) +AC_SUBST(engine_fast2) +AC_SUBST(no_dynamic) +AC_SUBST(image_i) +AC_SUBST(signals_o) + +#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 +#this specific Makefile feature than the make version. AC_MSG_CHECKING(make type) -make_type=`make -v 2>&1|grep 'ake version'|sed 's/ version .*//'` - +make_type=`make -n -v 2>&1|grep 'ake'|sed 's/ake .*/ake/'` GNUMAKE='#' test "$make_type" = "GNU Make" && GNUMAKE='' - AC_MSG_RESULT($make_type) - AC_SUBST(GNUMAKE) AC_MSG_CHECKING([whether the linker accepts -export-dynamic]) @@ -127,10 +194,27 @@ case "$host_cpu" in arm*) machine=arm CFLAGS="$CFLAGS -fomit-frame-pointer" - if test -z $no_dynamic_default; then - no_dynamic_default=1 - AC_MSG_WARN([No I-cache flush code known, disabling dynamic native code generation]) + if test x$platform = xnxt; then + CFLAGS="$CFLAGS -mthumb -mthumb-interwork" + fi + if test -z $arm_cacheflush; then + case "$host_os" in + *linux*) + arm_cacheflush=arch/arm/cacheflush-linux + ;; + *) + no_dynamic_default=1 + arm_cacheflush=arch/arm/cacheflush0 + AC_MSG_WARN([No I-cache flush code known, disabling dynamic native code generation]) + ;; + esac fi + AC_LIBSOURCES([../arch/arm/cacheflush0, dnl + ../arch/arm/cacheflush-linux]) + AC_LIBOBJ(../$arm_cacheflush) + #longer skipcodes lead to problems on ARM, and it uses + #only 4-byte alignment anyway + test "$skipcode" || skipcode="nop" ;; hppa*) machine=hppa @@ -145,21 +229,32 @@ case "$host_cpu" in ;; i386) machine=386 - CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem" + CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr" ;; i486) machine=386 - CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem -m486" + CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -m486" ;; i*86) machine=386 - CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem" + CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr" CFLAGS_1="$CFLAGS" CFLAGS="$CFLAGS -march=pentium" AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1 -m486") ;; x86_64) - machine=amd64 + case $CC + in + *-m32*) + machine=386 + CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr" + CFLAGS_1="$CFLAGS" + CFLAGS="$CFLAGS -march=athlon64" + ;; + *) + machine=amd64 + ;; + esac ;; ia64*) machine=ia64 @@ -206,7 +301,12 @@ case "$host_cpu" in $srcdir/mkinstalldirs arch/power AC_CHECK_FUNC(_sync_cache_range,[true],[AC_LIBOBJ(../arch/power/_sync_cache_range)]) #long long is broken on (at least) gcc-2.95.* for PPC - test x$ac_cv_sizeof_long_long = x && ac_cv_sizeof_long_long=0 + test x$ac_cv_sizeof_long_long = x && + ($CC -v 2>&1 |grep -q 'gcc version 2.95') && + ac_cv_sizeof_long_long=0 + #The only architecture with enough callee-saved registers + test x$STACK_CACHE_REGS = x && STACK_CACHE_REGS=3 + #or use 2, hardly slower at run-time and starts up faster ;; *) AC_MSG_WARN([Using a generic machine description]) @@ -221,6 +321,39 @@ case "$host_cpu" in esac AC_SUBST(host) +MAKEINC="" + +echo "Check for arch/$machine/$platform/gforth.ld ($EC_MODE)" +if test x$EC_MODE = xtrue +then + echo "Check for arch/$machine/$platform/gforth.ld" + if test -f arch/$machine/$platform/gforth.ld + then + LDFLAGS="-T ../arch/$machine/$platform/gforth.ld -Map \$@.map -cref --gc-sections $LDFLAGS" + if test x$platform = xnxt; then + LIBS="$LIB_PATH/lib/gcc/arm-elf/$($CC --version | grep GCC | cut -d' ' -f3)/interwork/libgcc.a $LIB_PATH/arm-elf/lib/interwork/libc.a $LIBS" + fi + fi + if test -f arch/$machine/$platform/make.inc + then + MAKEINC="include ../arch/$machine/$platform/make.inc" + fi +fi +AC_SUBST(MAKEINC) + +AC_ARG_VAR(STACK_CACHE_REGS, [number of registers in the maximum stack cache state for gforth-fast and gforth-native (default platform-dependent).]) + +test x$STACK_CACHE_REGS = x && STACK_CACHE_REGS=1 +AC_DEFINE_UNQUOTED(STACK_CACHE_REGS, $STACK_CACHE_REGS, + [number of registers in the maximum stack cache state for gforth-fast and gforth-native]) +test x$STACK_CACHE_DEFAULT_FAST = x && STACK_CACHE_DEFAULT_FAST=1 +AC_DEFINE_UNQUOTED(STACK_CACHE_DEFAULT_FAST, $STACK_CACHE_DEFAULT_FAST, + [number of registers in the default stack cache state for gforth-fast and gforth-native]) + +test x$GCC_PR15242_WORKAROUND = x || +AC_DEFINE_UNQUOTED(GCC_PR15242_WORKAROUND, $GCC_PR15242_WORKAROUND, + [force (1) or forbid (0) use of a workaround for a gcc performance bug]) + dnl the following macro produces a warning with autoconf-2.1 AC_CHECK_SIZEOF(char *) case "$ac_cv_sizeof_char_p" in @@ -235,6 +368,19 @@ case "$ac_cv_sizeof_char_p" in ;; esac +AC_CHECK_SIZEOF(void *) +case "$ac_cv_sizeof_void_p" in + 2) + vwordsize=16 + ;; + 4) + vwordsize=32 + ;; + 8) + vwordsize=64 + ;; +esac + AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) @@ -242,6 +388,7 @@ AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(intptr_t) AC_CHECK_SIZEOF(int128_t) +AC_CHECK_SIZEOF(uint128_t) AC_MSG_CHECKING([for a C type for cells]) ac_cv_int_type_cell=none @@ -264,13 +411,60 @@ case "$ac_cv_sizeof_char_p" in $ac_cv_sizeof_intptr_t) ac_cv_int_type_cell="intptr_t" ;; - $ac_cv_sizeof_int128_t) - ac_cv_int_type_cell="int128_t" - ;; esac AC_MSG_RESULT($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_MSG_CHECKING([for a C type for wydes]) +ac_cv_wyde_type_cell=none +case 2 in + $ac_cv_sizeof_int) + ac_cv_wyde_type_cell=int + ;; + $ac_cv_sizeof_short) + ac_cv_wyde_type_cell=short + ;; + $ac_cv_sizeof_char) + ac_cv_wyde_type_cell=char + ;; + $ac_cv_sizeof_long) + ac_cv_wyde_type_cell=long + ;; + $ac_cv_sizeof_long_long) + ac_cv_wyde_type_cell="long long" + ;; + $ac_cv_sizeof_intptr_t) + ac_cv_wyde_type_cell="intptr_t" + ;; +esac +AC_MSG_RESULT($ac_cv_wyde_type_cell) +AC_DEFINE_UNQUOTED(WYDE_TYPE,$ac_cv_wyde_type_cell,[an integer type that is 2 bytes long]) + +AC_MSG_CHECKING([for a C type for tetrabytes]) +ac_cv_tetrabyte_type_cell=none +case 4 in + $ac_cv_sizeof_int) + ac_cv_tetrabyte_type_cell=int + ;; + $ac_cv_sizeof_short) + ac_cv_tetrabyte_type_cell=short + ;; + $ac_cv_sizeof_char) + ac_cv_tetrabyte_type_cell=char + ;; + $ac_cv_sizeof_long) + ac_cv_tetrabyte_type_cell=long + ;; + $ac_cv_sizeof_long_long) + ac_cv_tetrabyte_type_cell="long long" + ;; + $ac_cv_sizeof_intptr_t) + ac_cv_tetrabyte_type_cell="intptr_t" + ;; +esac +AC_MSG_RESULT($ac_cv_tetrabyte_type_cell) +AC_DEFINE_UNQUOTED(TETRABYTE_TYPE,$ac_cv_tetrabyte_type_cell,[an integer type that is 4 bytes long]) + AC_MSG_CHECKING([for a C type for double-cells]) ac_cv_int_type_double_cell=none case `expr 2 '*' "$ac_cv_sizeof_char_p"` in @@ -294,13 +488,53 @@ case `expr 2 '*' "$ac_cv_sizeof_char_p"` ;; esac AC_MSG_RESULT($ac_cv_int_type_double_cell) -if test "$ac_cv_int_type_double_cell" = none; then - AC_MSG_WARN([Emulating double-cell arithmetic. This may be slow.]) - AC_LIBOBJ(dblsub) - AC_DEFINE(BUGGY_LONG_LONG,,[define this if there is no working DOUBLE_CELL_TYPE on your machine]) -else + +AC_MSG_CHECKING([for a C type for unsigned double-cells]) +ac_cv_int_type_double_ucell=none +case `expr 2 '*' "$ac_cv_sizeof_char_p"` in + $ac_cv_sizeof_short) + ac_cv_int_type_double_ucell="unsigned short" + ;; + $ac_cv_sizeof_int) + ac_cv_int_type_double_ucell="unsigned int" + ;; + $ac_cv_sizeof_long) + ac_cv_int_type_double_ucell="unsigned long" + ;; + $ac_cv_sizeof_long_long) + ac_cv_int_type_double_ucell="unsigned long long" + ;; + $ac_cv_sizeof_intptr_t) + ac_cv_int_type_double_ucell="unsigned intptr_t" + ;; + $ac_cv_sizeof_uint128_t) + ac_cv_int_type_double_ucell="uint128_t" + ;; +esac +AC_MSG_RESULT($ac_cv_int_type_double_ucell) + +if test "$ac_cv_int_type_double_cell" != none && \ + test "$ac_cv_int_type_double_ucell" != none +then AC_DEFINE_UNQUOTED(DOUBLE_CELL_TYPE,$ac_cv_int_type_double_cell,[an integer type that is twice as long as a pointer]) + AC_DEFINE_UNQUOTED(DOUBLE_UCELL_TYPE,$ac_cv_int_type_double_ucell,[an unsigned integer type that is twice as long as a pointer]) + OPTS=-ll +else + if test "$ac_cv_sizeof_char_p" = 8; then + OPTS="-ll -noll" + else + OPTS=-noll + fi +fi + +if grep -q FORCE_REG arch/$machine/machine.h; then + OPTS2='' + for i in $OPTS; do OPTS2="$OPTS2 $i-reg"; done + OPTS="$OPTS2 $OPTS" +else + AC_DEFINE_UNQUOTED(FORCE_REG_UNNECESSARY,,[defined if the platform does not need FORCE_REG]) fi +AC_SUBST(OPTS) AC_TYPE_OFF_T AC_CHECK_SIZEOF(off_t) @@ -344,22 +578,74 @@ AC_TRY_COMPILE(,,ac_noreorder_blocks=yes CFLAGS="$CFLAGS_1" AC_MSG_RESULT($ac_noreorder_blocks) +# Try if GCC understands -falign-labels=1 +AC_MSG_CHECKING([if $CC understands -falign-labels=1]) +CFLAGS_1="$CFLAGS" +CFLAGS="$CFLAGS -falign-labels=1" +AC_TRY_COMPILE(,,ac_align_labels=yes;ENGINE_FLAGS="$ENGINE_FLAGS -falign-labels=1",ac_align_labels=no) +CFLAGS="$CFLAGS_1" +AC_MSG_RESULT($ac_align_labels) + +# Try if GCC understands -falign-loops=1 +AC_MSG_CHECKING([if $CC understands -falign-loops=1]) +CFLAGS_1="$CFLAGS" +CFLAGS="$CFLAGS -falign-loops=1" +AC_TRY_COMPILE(,,ac_align_loops=yes;ENGINE_FLAGS="$ENGINE_FLAGS -falign-loops=1",ac_align_loops=no) +CFLAGS="$CFLAGS_1" +AC_MSG_RESULT($ac_align_loops) + +# Try if GCC understands -falign-jumps=1 +AC_MSG_CHECKING([if $CC understands -falign-jumps=1]) +CFLAGS_1="$CFLAGS" +CFLAGS="$CFLAGS -falign-jumps=1" +AC_TRY_COMPILE(,,ac_align_jumps=yes;ENGINE_FLAGS="$ENGINE_FLAGS -falign-jumps=1",ac_align_jumps=no) +CFLAGS="$CFLAGS_1" +AC_MSG_RESULT($ac_align_jumps) + # Try if GCC understands __attribute__((unused)) AC_MSG_CHECKING([how to suppress 'unused variable' warnings]) AC_TRY_COMPILE(,[int __attribute__((unused)) foo;], MAYBE_UNUSED='__attribute__((unused))',) AC_DEFINE_UNQUOTED(MAYBE_UNUSED,$MAYBE_UNUSED,[attribute for possibly unused variables]) AC_MSG_RESULT($MAYBE_UNUSED) -AC_CHECK_PROG(asm_fs,asm.fs,arch/$machine/asm.fs,,$srcdir/arch/$machine) +#try if m4 understands -s +AC_MSG_CHECKING([how to invoke m4]) +if m4 -s /dev/null >/dev/null 2>&1; then + M4="m4 -s" +else + M4=m4 +fi +AC_SUBST(M4) +AC_DEFINE_UNQUOTED(M4,"$M4",[How to invoke m4]) +AC_MSG_RESULT($M4) + +# Find installed Gforth +AC_MSG_CHECKING([for gforth]) +GFORTH="`cd / && which gforth 2>/dev/null`" +if test -z "$GFORTH"; then + PREFORTH='echo "You need to configure with a gforth in \$PATH to build this part" && false' +else + PREFORTH="$GFORTH -i `cd / && gforth --debug -e bye 2>&1 |grep "Opened image file: "|sed 's/Opened image file: //'`" ; +fi +AC_SUBST(PREFORTH) +AC_DEFINE_UNQUOTED(PREFORTH,"$PREFORTH",[How to invoke the pre-installed gforth]) +AC_MSG_RESULT($PREFORTH) + +#echo "machine='$machine'" + +dnl AC_CHECK_PROG(asm_fs,asm.fs,arch/$machine/asm.fs,,$srcdir/arch/$machine) +AC_CHECK_FILE($srcdir/arch/$machine/asm.fs,[asm_fs=arch/$machine/asm.fs],) AC_SUBST(asm_fs) -AC_CHECK_PROG(disasm_fs,disasm.fs,arch/$machine/disasm.fs,,$srcdir/arch/$machine) +dnl AC_CHECK_PROG(disasm_fs,disasm.fs,arch/$machine/disasm.fs,,$srcdir/arch/$machine) +AC_CHECK_FILE($srcdir/arch/$machine/disasm.fs,[disasm_fs=arch/$machine/disasm.fs],) AC_SUBST(disasm_fs) AC_PATH_PROG(INSTALL_INFO,install-info,[echo '>>>>Please make info dir entry:'],$PATH:/sbin:/usr/sbin:/usr/local/sbin) case "$host_os" in - *win32|cygwin) + *win32*) + # !!!FIXME!!! problems with cygwin and ';' as path separator DIRSEP="\\\\" PATHSEP=";" #we want the builtins of command.com/cmd.exe and its @@ -390,15 +676,19 @@ AC_DEFINE_UNQUOTED(PATHSEP,'$PATHSEP',[a AC_SUBST(DEFAULTSYSTEMPREFIX) AC_DEFINE_UNQUOTED(DEFAULTSYSTEMPREFIX,"$DEFAULTSYSTEMPREFIX",[default for environment variable GFORTHSYSTEMPREFIX]) +#work around SELinux brain damage (from Andrew Haley <12t8f3jakb74g2c@news.supernews.com>) +#This magic incantation seems to be completely undocumented. +AC_CHECK_PROG([MASSAGE_EXE],[chcon],[chcon -t unconfined_execmem_exec_t],[true]) + dnl Now a little support for DOS/DJGCC AC_SUBST(GFORTH_EXE) -GFORTH_EXE="" +GFORTH_EXE="true" AC_SUBST(GFORTHFAST_EXE) -GFORTHFAST_EXE="" +GFORTHFAST_EXE="true" AC_SUBST(GFORTHITC_EXE) -GFORTHITC_EXE="" +GFORTHITC_EXE="true" AC_SUBST(GFORTHDITC_EXE) -GFORTHDITC_EXE="" +GFORTHDITC_EXE="true" AC_SUBST(FORTHSIZES) @@ -436,8 +726,13 @@ else fi #check how to do asm(".skip 16") +#echo "CFLAGS=$CFLAGS" +#echo "ac_link=$ac_link" AC_MSG_CHECKING([if and how we can waste code space]) if test -z "$skipcode"; then + skipcode=no + CFLAGS_1="$CFLAGS" + CFLAGS="$CFLAGS $ENGINE_FLAGS" for i in ".skip 16" ".block 16" ".org .+16" ".=.+16" ".space 16" do AC_TRY_RUN( @@ -452,7 +747,7 @@ int foo(int x, int y, int z) if (x) { y++; /* workaround for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12108 */ label1: - asm(".skip 16"); /* or ".space 16" or somesuch */ + asm("$i"); /* or ".space 16" or somesuch */ label2: ; } { @@ -463,6 +758,7 @@ int foo(int x, int y, int z) ,skipcode=$i; break ,,) done + CFLAGS=$CFLAGS_1 fi AC_MSG_RESULT($skipcode) if test "$skipcode" = no @@ -476,28 +772,62 @@ else AC_DEFINE_UNQUOTED(SKIP16,asm("$skipcode"),statement for skipping 16 bytes) fi +AC_MSG_CHECKING([if and how we can do comments in asm statements]) +#the point here is to get asm statements that look different to +#gcc's "optimizer" +if test -z "$asmcomment"; then + asmcomment=no + CFLAGS_1="$CFLAGS" + CFLAGS="$CFLAGS $ENGINE_FLAGS" + for i in '"# "' '"! "' '"; "'; do + AC_TRY_COMPILE(,[asm($i"fluffystunk");],asmcomment=$i; break,) + done + CFLAGS=$CFLAGS_1 +fi +AC_MSG_RESULT($asmcomment) +if test "$asmcomment" != no +then + AC_DEFINE_UNQUOTED(ASMCOMMENT,$asmcomment,[assembler comment start string]) +fi + test "$no_dynamic_default" || no_dynamic_default=0 AC_DEFINE_UNQUOTED(NO_DYNAMIC_DEFAULT,$no_dynamic_default,default value for no_dynamic) dnl Checks for programs. AC_PROG_LN_S AC_PROG_INSTALL +AC_CHECK_PROGS(TEXI2DVI,texi2dvi4a2ps texi2dvi) + +dnl MacOS X has a libtool that does something else +AC_CHECK_PROGS(GNU_LIBTOOL,glibtool libtool) dnl Checks for library functions dnl This check is just for making later checks link with libm. dnl using sin here is no good idea since it is built-into gcc and typechecked AC_CHECK_LIB(m,asin) -AC_CHECK_LIB(dl,dlopen) +AC_CHECK_LIB(ltdl,lt_dlinit) +dnl check for libffi 2.x +AC_CHECK_LIB(ffi,ffi_call) +if test $ac_cv_lib_ffi_ffi_call = yes +then +LIBFFIFLAG="true" +FFCALLFLAG="false" +OLDCALLFLAG="false" +AC_DEFINE(HAS_LIBFFI,,[define this if you want to use the ffcall interface with libffi 2.0]) +else dnl check for ffcall libraries dnl unfortunately, these four calls are separated out into a library each. AC_CHECK_LIB(avcall,__builtin_avcall) AC_CHECK_LIB(callback,__vacall_r) AC_CHECK_LIB(vacall,vacall) AC_CHECK_LIB(trampoline,alloc_trampoline) +LIBFFIFLAG="false" FFCALLFLAG="false" OLDCALLFLAG="true" test $ac_cv_lib_avcall___builtin_avcall = yes && FFCALLFLAG="true" && OLDCALLFLAG="false" && AC_DEFINE(HAS_FFCALL,,[define this if you want to use the ffcall libraries]) test $ac_cv_lib_avcall___builtin_avcall = no && AC_DEFINE(HAS_OLDCALL,,[define this if you want to use the old call libraries]) +fi +AC_SUBST(LIBFFIFLAG) AC_SUBST(FFCALLFLAG) AC_SUBST(OLDCALLFLAG) if test "$host_os" != "nextstep3" @@ -506,7 +836,7 @@ then fi AC_REPLACE_FUNCS(memmove strtoul pow10 strerror strsignal atanh) AC_FUNC_FSEEKO -AC_CHECK_FUNCS(ftello dlopen sys_siglist getrusage) +AC_CHECK_FUNCS(ftello dlopen sys_siglist getrusage nanosleep) AC_CHECK_TYPES(stack_t,,,[#include ]) AC_DECL_SYS_SIGLIST AC_CHECK_FUNC(getopt_long,[true],[AC_LIBOBJ(getopt) AC_LIBOBJ(getopt1)]) @@ -520,8 +850,10 @@ test $ac_cv_func_fnmatch_works = yes || AC_CHECK_FUNCS(mmap sysconf getpagesize) AM_PATH_LISPDIR -kernel_fi=kernl${wordsize}${bytesex}.fi +kernel_fi=kernl${vwordsize}${bytesex}.fi +include_fi=kernl${wordsize}${bytesex}${EC}.fi AC_SUBST(kernel_fi) +AC_SUBST(include_fi) #this breaks bindists #dnl replace srource directory by absolute value @@ -535,11 +867,19 @@ Makedist gforthmi vmgen machpc.fs +envos.fs +preforth engine/Makefile -doc/version.texi ]) +engine/libcc.h +doc/version.texi +build-ec ]) AC_CONFIG_COMMANDS([stamp-h],[[echo timestamp > stamp-h chmod +x gforthmi chmod +x vmgen -test -d kernel||mkdir kernel]],[[]]) +chmod +x build-ec +chmod +x preforth +test -d kernel||mkdir kernel +$srcdir/mkinstalldirs include/gforth/$PACKAGE_VERSION +ln -sf ../../../engine/config.h ../../../engine/libcc.h include/gforth/$PACKAGE_VERSION]],[[PACKAGE_VERSION=$PACKAGE_VERSION]]) AC_OUTPUT