File:  [gforth] / gforth / configure.in
Revision 1.93: download - view: text, annotated - select for diffs
Tue Dec 24 23:40:29 2002 UTC (21 years, 2 months ago) by anton
Branches: MAIN
CVS tags: HEAD
Gforth now supports large files (>2GB) on small machines (32-bits/cell).
forth.h now asks for all kinds of POSIX, X/Open, and GNU support.
rearranged include files such that forth.h precedes the system files.

    1: dnl Process this file with autoconf to produce a configure script.
    2: 
    3: #Copyright (C) 1995,1996,1997,1998,2000 Free Software Foundation, Inc.
    4: 
    5: #This file is part of Gforth.
    6: 
    7: #Gforth is free software; you can redistribute it and/or
    8: #modify it under the terms of the GNU General Public License
    9: #as published by the Free Software Foundation; either version 2
   10: #of the License, or (at your option) any later version.
   11: 
   12: #This program is distributed in the hope that it will be useful,
   13: #but WITHOUT ANY WARRANTY; without even the implied warranty of
   14: #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.#See the
   15: #GNU General Public License for more details.
   16: 
   17: #You should have received a copy of the GNU General Public License
   18: #along with this program; if not, write to the Free Software
   19: #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
   20: 
   21: AC_INIT(engine/engine.c)
   22: 
   23: dnl We use some automake macros here,
   24: dnl but don't use automake for creating Makefile.in
   25: AM_INIT_AUTOMAKE(gforth,0.5.9-20020901)
   26: #snapshots have numbers major.minor.release-YYYYMMDD
   27: #note that lexicographic ordering must be heeded.
   28: #I.e., 0.4.1-YYYYMMDD must not exist before 0.4.1!
   29: UPDATED="1 September 2002"
   30: AC_SUBST(UPDATED)
   31: AM_CONFIG_HEADER(engine/config.h)
   32: #AM_CYGWIN32
   33: 
   34: #default setting that may be changed later:
   35: no_dynamic_default=0
   36: 
   37: AC_ARG_ENABLE(force-reg,
   38: [  --enable-force-reg	  Use explicit register declarations if they appear in
   39: 			  the machine.h file. This can cause a good speedup,
   40: 			  but also incorrect code with some gcc versions on
   41: 			  some processors (default disabled).],
   42: 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)]))
   43: 
   44: AC_ARG_WITH(debug,
   45: [  --with-debug     specifies option -g to compile with debug info (default)
   46:   --without-debug  omits the -g switch and creates smaller images on
   47:                    machines where "strip" has problems with gcc style
   48:                    debugging informations.],
   49: if test "$withval" = "yes"; then DEBUGFLAG=-g; fi)
   50: 
   51: PEEPHOLE="yes"
   52: AC_ARG_WITH(peephole,
   53: [  --with-peephole	Enable peephole optimization (default)
   54:   --without-peephole	disables peephole optimization. Creates smaller,
   55: 			but slower images.],
   56: PEEPHOLE="$withval")
   57: 
   58: #currently we force direct threading this way.  Eventually we should
   59: #setup in the arch and engine files right
   60: 
   61: CFLAGS=$CFLAGS
   62: 
   63: AC_PROG_CC
   64: 
   65: test "$GCC" = "yes" || AC_MSG_ERROR(Gforth uses GNU C extensions and requires GCC 2.0 or higher)
   66: 
   67: AC_SUBST(CC)
   68: AC_SUBST(DEBUGFLAG)
   69: 
   70: AC_MSG_CHECKING(gcc version)
   71: gcc_version=`$CC -v 2>&1|grep 'gcc version'|sed 's/.*gcc version //'`
   72: AC_MSG_RESULT($gcc_version)
   73: if expr "$gcc_version" \> 3.0.4 >/dev/null && expr "$gcc_version" \< 3.2.1 >/dev/null
   74: then
   75:     no_dynamic_default=1
   76:     AC_MSG_WARN(Disabling dynamic native code generation by default (speed penalty factor ~2))
   77: fi
   78: 
   79: dnl the following macro produces a warning with autoconf-2.1
   80: AC_CHECK_SIZEOF(char *)
   81: case "$ac_cv_sizeof_char_p" in
   82:   2)
   83:     wordsize=16
   84:     ;;
   85:   4)
   86:     wordsize=32
   87:     ;;
   88:   8)
   89:     wordsize=64
   90:     ;;
   91: esac
   92: 
   93: AC_CHECK_SIZEOF(char)
   94: AC_CHECK_SIZEOF(short)
   95: AC_CHECK_SIZEOF(int)
   96: AC_CHECK_SIZEOF(long)
   97: AC_CHECK_SIZEOF(long long)
   98: 
   99: AC_MSG_CHECKING([for a C type for cells])
  100: ac_cv_int_type_cell=none
  101: case "$ac_cv_sizeof_char_p" in
  102:   $ac_cv_sizeof_int)
  103:     ac_cv_int_type_cell=int
  104:     ;;
  105:   $ac_cv_sizeof_short)
  106:     ac_cv_int_type_cell=short
  107:     ;;
  108:   $ac_cv_sizeof_char)
  109:     ac_cv_int_type_cell=char
  110:     ;;
  111:   $ac_cv_sizeof_long)
  112:     ac_cv_int_type_cell=long
  113:     ;;
  114:   $ac_cv_sizeof_long_long)
  115:     ac_cv_int_type_cell="long long"
  116:     ;;
  117: esac
  118: AC_MSG_RESULT($ac_cv_int_type_cell)
  119: AC_DEFINE_UNQUOTED(CELL_TYPE,$ac_cv_int_type_cell,[an integer type that is as long as a pointer])
  120: 
  121: AC_MSG_CHECKING([for a C type for double-cells])
  122: ac_cv_int_type_double_cell=none
  123: case `expr 2 '*' "$ac_cv_sizeof_char_p"` in
  124:   $ac_cv_sizeof_short)
  125:     ac_cv_int_type_double_cell=short
  126:     ;;
  127:   $ac_cv_sizeof_int)
  128:     ac_cv_int_type_double_cell=int
  129:     ;;
  130:   $ac_cv_sizeof_long)
  131:     ac_cv_int_type_double_cell=long
  132:     ;;
  133:   $ac_cv_sizeof_long_long)
  134:     ac_cv_int_type_double_cell="long long"
  135:     ;;
  136: esac
  137: AC_MSG_RESULT($ac_cv_int_type_double_cell)
  138: if test "$ac_cv_int_type_double_cell" = none; then
  139: 	AC_MSG_WARN([Emulating double-cell arithmetic. This may be slow.])
  140: 	AC_LIBOBJ(dblsub)
  141: 	AC_DEFINE(BUGGY_LONG_LONG,,[define this if there is no working DOUBLE_CELL_TYPE on your machine])
  142: else
  143: 	AC_DEFINE_UNQUOTED(DOUBLE_CELL_TYPE,$ac_cv_int_type_double_cell,[an integer type that is twice as long as a pointer])
  144: fi
  145: 
  146: AC_MSG_CHECKING([whether the linker accepts -export-dynamic])
  147: OLDLDFLAGS=$LDFLAGS
  148: LDFLAGS="$LDFLAGS -export-dynamic"
  149: dnl AC_TRY_LINK gives false positive on rs6000-ibm-aix4.2.1.0
  150: dnl AC_TRY_LINK(,,ac_export_dynamic=yes,ac_export_dynamic=no)
  151: AC_TRY_RUN(main(){exit(0);},ac_export_dynamic=yes,ac_export_dynamic=no,ac_export_dynamic=no)
  152: test $ac_export_dynamic = yes|| LDFLAGS=$OLDLDFLAGS
  153: AC_MSG_RESULT($ac_export_dynamic)
  154: 
  155: #terminology is a bit unusual here: The host is the system on which
  156: #gforth will run; the system on which configure will run is the `build'
  157: AC_CANONICAL_HOST
  158: case "$host_cpu" in
  159: 	hppa*)
  160: 		machine=hppa
  161: 		$srcdir/mkinstalldirs arch/hppa
  162: 		AC_LIBOBJ(../arch/hppa/cache)
  163: 		LDFLAGS="$LDFLAGS -Xlinker -N"
  164: 		LIBS="$LIBS -L/lib/pa1.1/"
  165: 		;;
  166: 	sparc*)
  167: 		machine=sparc
  168: 		;;
  169: 	i386)
  170: 		machine=386
  171: 		CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem"
  172: 		;;
  173: 	i486)
  174: 		machine=386
  175: 		CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem -m486"
  176: 		;;
  177: 	i*86)
  178: 		machine=386
  179: 		CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem"
  180: 		CFLAGS_1="$CFLAGS"
  181: 		CFLAGS="$CFLAGS -march=pentium"
  182: 		AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1 -m486")
  183: 		;;
  184: 	ia64*)
  185: 		machine=ia64
  186: 		;;
  187:         m68k)
  188: 		machine=m68k
  189: 		CFLAGS="$CFLAGS -fomit-frame-pointer"
  190: 		if test "$host_os" = "nextstep3"
  191: 		then
  192: 			AC_LIBOBJ(termios)
  193: 		fi
  194: 		;;
  195: 	mips*)
  196: 		machine=mips
  197: 		#dynamic native code has the following problems on MIPS:
  198: 		#
  199: 		#1) J/JAL seems relocatable, but is are only
  200: 		#relocatable within a 256MB-segment.  While we try to
  201: 		#get the linker to arrange this, there is no guarantee
  202: 		#that this will succeed (and if the user uses a lot of
  203: 		#memory, it is likely to fail).
  204: 		#
  205: 		#2) The way we generate dynamic native code may
  206: 		#violate MIPS architectural restrictions (in
  207: 		#particular, the delay slots of LW, MFLO, etc.)
  208: 		#
  209: 		#Therefore we disable dynamic native code by default:
  210: 		no_dynamic_default=1
  211: 		AC_MSG_WARN(Disabling dynamic native code generation by default (speed penalty factor ~2))
  212: 		#link text and data segment into the same 256M region!
  213: 		AC_MSG_CHECKING([whether the linker accepts -T])
  214: 		OLDLDFLAGS=$LDFLAGS
  215: 		LDFLAGS="$LDFLAGS -Xlinker -T -Xlinker 10000000"
  216: 		AC_TRY_LINK(,,ac_link_mips_t=yes,ac_link_mips_t=no)
  217: 		test $ac_link_mips_t = yes||LDFLAGS=$OLDLDFLAGS
  218: 		AC_MSG_RESULT($ac_link_mips_t)
  219: 		AC_MSG_CHECKING([whether the linker accepts -D])
  220: 		OLDLDFLAGS=$LDFLAGS
  221: 		LDFLAGS="$LDFLAGS -Xlinker -D -Xlinker 10400000"
  222: 		AC_TRY_LINK(,,ac_link_mips_d=yes,ac_link_mips_d=no)
  223: 		test $ac_link_mips_d = yes||LDFLAGS=$OLDLDFLAGS
  224: 		AC_MSG_RESULT($ac_link_mips_d)
  225: 		;;
  226: 	alpha*)
  227: 		machine=alpha
  228: 		#full IEEE FP support for more uniformity across platforms:
  229: 		CFLAGS="$CFLAGS -mieee"
  230: 		;;
  231: 	power*|rs6000)
  232: 		machine=power
  233: 		$srcdir/mkinstalldirs arch/power
  234: 		AC_CHECK_FUNC(_sync_cache_range,true,AC_LIBOBJ(../arch/power/_sync_cache_range))
  235: 		;;
  236: 	*)
  237: 		AC_MSG_WARN([Using a generic machine description])
  238: 		AC_MSG_WARN([Assuming C floats and doubles are IEEE floats and doubles (for SF@ DF@ SF! DF!)])
  239: 		AC_MSG_WARN([FLUSH-ICACHE will do nothing, so END-CODE may not work properly!])
  240: 		machine=generic
  241: esac
  242: AC_SUBST(host)
  243: AC_SUBST(ENGINE_FLAGS)
  244: 
  245: # Try if GCC understands -fno-cross-jump
  246: 
  247: CFLAGS_1="$CFLAGS"
  248: CFLAGS="$CFLAGS -fno-cross-jump"
  249: AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1")
  250: 
  251: AC_CHECK_PROG(asm_fs,asm.fs,arch/$machine/asm.fs,,$srcdir/arch/$machine)
  252: AC_SUBST(asm_fs)
  253: 
  254: AC_CHECK_PROG(disasm_fs,disasm.fs,arch/$machine/disasm.fs,,$srcdir/arch/$machine)
  255: AC_SUBST(disasm_fs)
  256: 
  257: case "$host_os" in
  258: 	*win32)
  259: 		EXE=".exe"
  260: 		DIRSEP="\\"
  261: 		;;
  262: 	*)
  263: 		EXE=""
  264: 		DIRSEP="/"
  265: 		;;
  266: esac
  267: AC_SUBST(EXE)
  268: AC_SUBST(DIRSEP)
  269: AC_DEFINE_UNQUOTED(DIRSEP,'$DIRSEP',[a directory separator character])
  270: 
  271: dnl Now a little support for DOS/DJGCC
  272: AC_SUBST(GFORTH_EXE)
  273: GFORTH_EXE=""
  274: AC_SUBST(GFORTHFAST_EXE)
  275: GFORTHFAST_EXE=""
  276: AC_SUBST(GFORTHITC_EXE)
  277: GFORTHITC_EXE=""
  278: AC_SUBST(GFORTHDITC_EXE)
  279: GFORTHDITC_EXE=""
  280: 
  281: PATHSEP=":"
  282: AC_SUBST(PATHSEP)
  283: AC_DEFINE_UNQUOTED(PATHSEP,'$PATHSEP',[a path separator character])
  284: 
  285: AC_SUBST(FORTHSIZES)
  286: 
  287: if test "$PEEPHOLE" = "yes"
  288: then
  289:    PEEPHOLEFLAG="true"
  290:    AC_DEFINE(HAS_PEEPHOLE,,[Define if you want to use peephole optimization])
  291: else
  292:    PEEPHOLEFLAG="false"
  293: fi
  294: AC_SUBST(PEEPHOLEFLAG)
  295: 
  296: dnl copy commands for systems that don't have links
  297: AC_SUBST(LINK_KERNL)
  298: LINK_KERNL=""
  299: 
  300: #if test $host_os=dos
  301: #then
  302: #  echo Configuring for DOS!!!
  303: #  MAKE_EXE="coff2exe gforth"
  304: #  LINK_KERNL='$(CP) kernl32l.fi kernel.fi'
  305: #fi
  306: 
  307: dnl the following macro produces a warning with autoconf-2.1
  308: AC_C_BIGENDIAN
  309: AC_SUBST(KERNEL)
  310: dnl ac_cv_c_bigendian is an undocumented variable of autoconf-2.1
  311: if test $ac_cv_c_bigendian = yes; then
  312:   bytesex=b
  313:   KERNEL="kernl16b.fi kernl16l.fi kernl32b.fi kernl32l.fi kernl64b.fi kernl64l.fi"
  314: else
  315:   bytesex=l
  316:   KERNEL="kernl16l.fi kernl16b.fi kernl32l.fi kernl32b.fi kernl64l.fi kernl64b.fi"
  317: fi
  318: 
  319: #check how to do asm(".skip 16")
  320: AC_MSG_CHECKING([if and how we can waste code space])
  321: skipcode=no
  322: for i in ".skip 16" ".block 16" ".org .+16" ".=.+16" ".space 16"
  323: do
  324: 	AC_TRY_RUN(
  325: int foo(int);
  326: main()
  327: {
  328:   exit(foo(0)!=16);
  329: }
  330: int foo(int x)
  331: {
  332:   if (x) {
  333:   label1:
  334:     asm("$i");
  335:   label2:
  336:   }
  337:   return (&&label2)-(&&label1);
  338: }
  339: 	,skipcode=$i; break
  340: 	,,)
  341: done	
  342: AC_MSG_RESULT($skipcode)
  343: if test "$skipcode" = no
  344: then 
  345:     no_dynamic_default=1
  346:     AC_DEFINE_UNQUOTED(SKIP16,((void)0),statement for skipping 16 bytes)
  347:     AC_MSG_WARN(Disabling dynamic native code generation by default (speed penalty factor ~2))
  348: else
  349:     AC_DEFINE_UNQUOTED(SKIP16,asm("$skipcode"),statement for skipping 16 bytes)
  350: fi
  351: 
  352: AC_DEFINE_UNQUOTED(NO_DYNAMIC_DEFAULT,$no_dynamic_default,default value for no_dynamic)
  353: 
  354: dnl Checks for programs.
  355: AC_PROG_LN_S
  356: dnl AM_PROG_INSTALL #performed by AM_INIT_AUTOMAKE
  357: 
  358: dnl Checks for library functions
  359: dnl This check is just for making later checks link with libm.
  360: dnl using sin here is no good idea since it is built-into gcc and typechecked
  361: AC_CHECK_LIB(m,asin)
  362: AC_CHECK_LIB(dl,dlopen)
  363: if test "$host_os" != "nextstep3"
  364: then
  365: 	AC_FUNC_MEMCMP
  366: fi
  367: AC_REPLACE_FUNCS(memmove strtoul pow10 strerror strsignal atanh)
  368: AC_CHECK_FUNCS(dlopen sys_siglist getrusage fseeko ftello)
  369: AC_TYPE_OFF_T
  370: AC_DECL_SYS_SIGLIST
  371: AC_CHECK_FUNC(getopt_long,true,AC_LIBOBJ(getopt); AC_LIBOBJ(getopt1))
  372: AC_CHECK_FUNCS(expm1 log1p)
  373: AC_REPLACE_FUNCS(rint ecvt)
  374: dnl No check for select, because our replacement is no good under
  375: dnl anything but DOS
  376: AC_CHECK_HEADERS(sys/mman.h fnmatch.h)
  377: AC_FUNC_FNMATCH
  378: test $ac_cv_func_fnmatch_works = yes || AC_LIBOBJ(fnmatch)
  379: AC_CHECK_FUNCS(mmap sysconf getpagesize)
  380: AM_PATH_LISPDIR
  381: 
  382: kernel_fi=kernl${wordsize}${bytesex}.fi
  383: AC_SUBST(kernel_fi)
  384: 
  385: #this breaks bindists
  386: #dnl replace srource directory by absolute value
  387: #if test $srcdir = "."; then srcdir=`pwd` 
  388: #fi
  389: 
  390: AC_SUBST(machine)
  391: dnl AC_LINK_FILES(arch/$machine,arch/machine) #no longer needed
  392: AC_OUTPUT([
  393: Makefile
  394: Makedist
  395: gforthmi
  396: vmgen
  397: machpc.fs
  398: engine/Makefile
  399: doc/version.texi ],
  400: echo timestamp > stamp-h
  401: chmod +x gforthmi
  402: chmod +x vmgen
  403: test -d kernel||mkdir kernel)
  404: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>