X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=configure.in;h=42415b530a1a8a904f0000119c8b4134bc354f24;hb=dc02653bd623bafdda79d1c30fc9cd285ad6e4f7;hp=dcb5fa0aba48df3f92ab67635c95457ea8002b56;hpb=bcf848c6a9d3f91bc18f96bc3e996c159cfff94b;p=ghc-hetmet.git diff --git a/configure.in b/configure.in index dcb5fa0..42415b5 100644 --- a/configure.in +++ b/configure.in @@ -16,6 +16,12 @@ dnl # First off, a distrib sanity check.. AC_INIT(mk/config.mk.in) +dnl * Declare subdirectories that have a private configure script +dnl +dnl After the toplevel configuration is complete, the script will recurse into +dnl these subdirectories (the use of cache values makes repeated checks cheap) +AC_CONFIG_SUBDIRS(ghc) + # ------------------------------------------------------------------------- # Prepare to generate the following header files # @@ -86,6 +92,24 @@ alpha-dec-osf[[34]]*) HostVendor_CPP='dec' HostOS_CPP='osf3' ;; +alpha-unknown-linux) + HostPlatform=alpha-unknown-linux + TargetPlatform=alpha-unknown-linux + BuildPlatform=alpha-unknown-linux + HostPlatform_CPP='alpha_unknown_linux' + HostArch_CPP='alpha' + HostVendor_CPP='unknown' + HostOS_CPP='linux' + ;; +alpha-unknown-freebsd*) + HostPlatform=alpha-unknown-freebsd + TargetPlatform=alpha-unknown-freebsd + BuildPlatform=alpha-unknown-freebsd + HostPlatform_CPP='alpha_unknown_freebsd' + HostArch_CPP='alpha' + HostVendor_CPP='unknown' + HostOS_CPP='freebsd' + ;; hppa1.1-hp-hpux*) HostPlatform=hppa1.1-hp-hpux # canonicalise for our purposes (hack) TargetPlatform=hppa1.1-hp-hpux @@ -113,7 +137,7 @@ i[[3456]]86-*-linux*) HostVendor_CPP='unknown' HostOS_CPP='linux' ;; -i[[3456]]86-*-freebsd*) +i[[3456]]86-*-freebsd[[3-9]]*) # FreeBSD 3.0+ uses ELF HostPlatform=i386-unknown-freebsd # hack again TargetPlatform=i386-unknown-freebsd BuildPlatform=i386-unknown-freebsd @@ -122,6 +146,15 @@ i[[3456]]86-*-freebsd*) HostVendor_CPP='unknown' HostOS_CPP='freebsd' ;; +i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out + HostPlatform=i386-unknown-freebsd2 # hack again + TargetPlatform=i386-unknown-freebsd2 + BuildPlatform=i386-unknown-freebsd2 + HostPlatform_CPP='i386_unknown_freebsd2' + HostArch_CPP='i386' + HostVendor_CPP='unknown' + HostOS_CPP='freebsd2' + ;; i[[3456]]86-*-netbsd*) HostPlatform=i386-unknown-netbsd # hack again TargetPlatform=i386-unknown-netbsd @@ -150,6 +183,21 @@ i[[3456]]86-*-cygwin32*) HostOS_CPP='cygwin32' exeext='.exe' ;; +i[[3456]]86-*-mingw32*) + HostPlatform=i386-unknown-mingw32 # hack again + TargetPlatform=i386-unknown-mingw32 + BuildPlatform=i386-unknown-mingw32 + HostPlatform_CPP='i386_unknown_mingw32' + HostArch_CPP='i386' + HostVendor_CPP='unknown' + HostOS_CPP='mingw32' + exeext='.exe' + # We assume you're using mingw32 via the gcc that comes + # with cygwin, and not the native port, so let's augment + # the gcc command-line used here with -mno-cygwin to + # arrange for good things to happen. + CFLAGS="-mno-cygwin $CFLAGS" + ;; m68k-next-nextstep2) HostPlatform_CPP='m68k_next_nextstep2' HostArch_CPP='m68k' @@ -274,6 +322,10 @@ dnl AC_SUBST(TargetVendor_CPP) AC_SUBST(exeext) +AC_PATH_PROG(GHC,ghc) +AC_PATH_PROGS(NHC,nhc nhc98) +AC_PATH_PROG(HBC,hbc) + dnl -------------------------------------------------------------- dnl * Project specific configuration options dnl -------------------------------------------------------------- @@ -284,16 +336,16 @@ dnl use either is considered a Feature. dnl ** What command to use to compile compiler sources ? dnl -------------------------------------------------------------- -AC_ARG_WITH(ghc-hc, -[ --with-ghc-hc= - Use a command different from 'ghc-2.10' to compile up the GHC compiler sources. - (no claims currently made that this will work with a compiler other than a - recent version of GHC, but you could always try...) +AC_ARG_WITH(hc, +[ --with-hc= + Use a command different from 'ghc' to compile up Haskell code. + (no claims currently made that this will work with a compiler other than a + recent version of GHC, but you could always try...) ], -[WithGhcHc="$withval"], -[WithGhcHc="ghc-2.10"] +[WithHc="$withval"], +[WithHc=$GHC] ) -AC_SUBST(WithGhcHc) +AC_SUBST(WithHc) dnl ** Which gcc to use? dnl -------------------------------------------------------------- @@ -319,6 +371,30 @@ AC_ARG_ENABLE(hc-boot, AC_SUBST(BootingFromHc) +dnl ** Enable the construction of Win32 DLLs? +dnl -------------------------------------------------------------- +AC_ARG_ENABLE(win32-dlls, +[ --enable-win32-dlls + If on a Win32 platform running mingw32/cygwin, enable the + construction of DLLs containing ghc-compiled code. +], +[ +case $HostOS_CPP in +cygwin32) ;; +mingw32) ;; +*) echo "Unrecognised win32 platform: $HostPlatform" + exit 1 + ;; +esac +EnableWin32DLLs=YES +], +[EnableWin32DLLs=NO] +) +AC_SUBST(EnableWin32DLLs) +if test x"$EnableWin32DLLs" = "xYES" ; then + AC_DEFINE(HAVE_WIN32_DLL_SUPPORT) +fi + dnl -------------------------------------------------------------- dnl End of configure script option section dnl -------------------------------------------------------------- @@ -354,11 +430,12 @@ FPTOOLS_HAVE_GCC dnl ** figure out how to invoke cpp directly (gcc -E is no good) AC_PROG_CPP -FPTOOLS_PROG_GNUCPP dnl ** figure out how to do context diffs FPTOOLS_PROG_DIFF +dnl ** Find find command (for Win32's benefit) +AC_PATH_PROG(FindCmd, find) dnl ** look for a decent parser generator (bison preferred) dnl (FPTOOLS_PROG_YACCY is AC_PROG_YACC, but with some extra testing @@ -373,6 +450,9 @@ AC_PROG_LEX dnl ** figure out how to do a BSD-ish install AC_PROG_INSTALL +dnl If you can run configure, you certainly have /bin/sh +AC_DEFINE(HAVE_BIN_SH) + dnl ** how to invoke `ar' and `ranlib' FPTOOLS_PROG_AR_AND_RANLIB @@ -424,15 +504,43 @@ dnl ** check for full ANSI header (.h) files AC_HEADER_STDC dnl ** check for specific header (.h) files that we are interested in -AC_CHECK_HEADERS(dirent.h fcntl.h grp.h malloc.h memory.h nlist.h pwd.h siginfo.h signal.h stdlib.h string.h sys/fault.h sys/file.h sys/mman.h sys/param.h sys/procfs.h sys/resource.h sys/signal.h sys/socket.h netinet/tcp.h sys/stat.h sys/syscall.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/types.h sys/utsname.h sys/vadvise.h sys/wait.h termios.h time.h types.h unistd.h utime.h vfork.h readline/readline.h bfd.h) +AC_CHECK_HEADERS(Files.h assert.h console.h ctype.h dirent.h errno.h fcntl.h float.h ftw.h grp.h ieee754.h malloc.h memory.h nlist.h pascal.h pwd.h sgtty.h siginfo.h signal.h stat.h stdint.h stdlib.h stdarg.h string.h sys/fault.h sys/file.h sys/ioctl.h sys/limits.h sys/mman.h sys/param.h sys/procfs.h sys/resource.h sys/signal.h sys/socket.h netinet/tcp.h sys/stat.h sys/syscall.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/types.h sys/utsname.h sys/vadvise.h sys/wait.h termio.h termios.h time.h types.h unistd.h utime.h values.h vfork.h bfd.h winsock.h) + +AC_CHECK_HEADER(readline/readline.h, HaveReadlineReadlineH=YES, HaveReadlineReadlineH=NO) +AC_CHECK_HEADER(readline/history.h, HaveReadlineHistoryH=YES, HaveReadlineHistoryH=NO) + +if test $HaveReadlineReadlineH = YES && test $HaveReadlineHistoryH = YES ; then + HaveReadlineHeaders=YES + AC_DEFINE(HAVE_READLINE_HEADERS,1) +else + HaveReadlineHeaders=NO + AC_DEFINE(HAVE_READLINE_HEADERS,0) +fi +AC_SUBST(HaveReadlineHeaders) + +dnl ** check for DOS include files +AC_CHECK_HEADERS(dos.h conio.h io.h std.h) + +dnl ** check for Windows include files +AC_CHECK_HEADERS(windows.h) dnl ** check if it is safe to include both and AC_HEADER_TIME +dnl dynamic loading include files +AC_CHECK_HEADERS(dlfcn.h dl.h) + +dnl ** check for farcalloc (in bcc) +AC_CHECK_HEADER(alloc.h,AC_CHECK_FUNCS(farcalloc)) + +dnl ** check for valloc (in sunos, solaris, mips, amiga, next, minix, ultrix) +AC_CHECK_HEADER(malloc.h,AC_CHECK_FUNCS(valloc)) + dnl ** how do we get a timezone name, and UTC offset ? AC_STRUCT_TIMEZONE dnl ** what's the type of timezone? +FPTOOLS_HAVE_TIMEZONE FPTOOLS_TYPE_TIMEZONE dnl ** do we have altzone? @@ -441,28 +549,125 @@ FPTOOLS_ALTZONE dnl ** does struct stat contain st_blksize? AC_STRUCT_ST_BLKSIZE +dnl ** do we have long longs? +FPTOOLS_C_LONG_LONG + dnl ** what are the sizes of various types dnl (these must come before GHC_CHECK_ALIGNMENT) -AC_CHECK_SIZEOF(unsigned int,4) -AC_CHECK_SIZEOF(float, 4) -AC_CHECK_SIZEOF(double, 8) -AC_CHECK_SIZEOF(long, 4) -AC_CHECK_SIZEOF(void *, 4) +AC_CHECK_SIZEOF(char, 1) +AC_CHECK_SIZEOF(double, 8) +AC_CHECK_SIZEOF(float, 4) +AC_CHECK_SIZEOF(int, 4) +AC_CHECK_SIZEOF(long, 4) +if test "$fptools_cv_have_long_long" = yes; then +AC_CHECK_SIZEOF(long long, 8) +fi +AC_CHECK_SIZEOF(short, 2) +AC_CHECK_SIZEOF(unsigned char, 1) +AC_CHECK_SIZEOF(unsigned int, 4) +AC_CHECK_SIZEOF(unsigned long, 4) +if test "$fptools_cv_have_long_long" = yes; then +AC_CHECK_SIZEOF(unsigned long long, 8) +fi +AC_CHECK_SIZEOF(unsigned short, 2) +AC_CHECK_SIZEOF(void *, 4) dnl ** what are alignment constraints on various types -FPTOOLS_CHECK_ALIGNMENT(unsigned int) dnl redundant but harmless -FPTOOLS_CHECK_ALIGNMENT(long) -FPTOOLS_CHECK_ALIGNMENT(float) +FPTOOLS_CHECK_ALIGNMENT(char) FPTOOLS_CHECK_ALIGNMENT(double) - -dnl ** do we have long longs? -FPTOOLS_C_LONG_LONG +FPTOOLS_CHECK_ALIGNMENT(float) +FPTOOLS_CHECK_ALIGNMENT(int) +FPTOOLS_CHECK_ALIGNMENT(long) +if test "$fptools_cv_have_long_long" = yes; then +FPTOOLS_CHECK_ALIGNMENT(long long) +fi +FPTOOLS_CHECK_ALIGNMENT(short) +FPTOOLS_CHECK_ALIGNMENT(unsigned char) +FPTOOLS_CHECK_ALIGNMENT(unsigned int) +FPTOOLS_CHECK_ALIGNMENT(unsigned long) +if test "$fptools_cv_have_long_long" = yes; then +FPTOOLS_CHECK_ALIGNMENT(unsigned long long) +fi +FPTOOLS_CHECK_ALIGNMENT(unsigned short) +FPTOOLS_CHECK_ALIGNMENT(void *) dnl ** can we open files in binary mode? FPTOOLS_O_BINARY +dnl ** check for GetModuleFileName and WinExec (windows only) +dnl Old: AC_CHECK_FUNCS(WinExec GetModuleFileName) dnl Windows +dnl Doesn't work because the linker can't see the functions if +dnl you omit the #include . (I've no idea why not...) + +FPTOOLS_TRY_LINK_NOWARN(,[ +#if HAVE_WINDOWS_H +#include +#endif +main() { + WinExec("",0); + exit(0); +} +], +[have_winexec=1], +[have_winexec=0]) +if test "$have_winexec" = "1"; then +AC_DEFINE(HAVE_WINEXEC) +fi + +FPTOOLS_TRY_LINK_NOWARN(,[ +#if HAVE_WINDOWS_H +#include +#endif +main() { + char* dir; + GetModuleFileName((HMODULE)0,dir,0); + exit(0); +} +], +[have_getmodulefilename=1], +[have_getmodulefilename=0]) +if test "$have_getmodulefilename" = "1"; then +AC_DEFINE(HAVE_GETMODULEFILENAME) +fi + +dnl ** check return type of signal handlers +dnl Foo: assumes we can use prototypes. +dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)". +dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler, +dnl [AC_TRY_COMPILE([#include +dnl #include +dnl #ifdef signal +dnl #undef signal +dnl #endif +dnl void (*signal (int, void (*)(int)))(int); +dnl ], +dnl [int i;], +dnl ac_cv_type_signal_handler=void_int, +dnl ac_cv_type_signal_handler=int_void)]) +dnl if test "$ac_cv_type_signal_handler" = void_int; then +dnl AC_DEFINE(VOID_INT_SIGNALS) +dnl fi + +dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)". +AC_TYPE_SIGNAL +if test "$ac_cv_type_signal" = void; then +AC_DEFINE(VOID_INT_SIGNALS) +fi + +dnl ** check for more functions +AC_CHECK_FUNCS(strcasecmp _stricmp stricmp strcmpi) +AC_CHECK_FUNCS(strcmp) +AC_CHECK_FUNCS(realpath _fullpath) +AC_CHECK_FUNCS(PBHSetVolSync macsystem) +AC_CHECK_FUNCS(fgetpos fsetpos fseek ftell) +AC_CHECK_FUNCS(vsnprintf _vsnprintf) +AC_CHECK_FUNCS(snprintf _snprintf ) +AC_CHECK_FUNCS(popen _popen ) +AC_CHECK_FUNCS(pclose _pclose ) + + dnl ** check for specific library functions that we are interested in -AC_CHECK_FUNCS(access ftime getclock getpagesize getrusage gettimeofday mktime mprotect setitimer stat sysconf timelocal times vadvise vfork) +AC_CHECK_FUNCS(access ftime getclock getpagesize getrusage gettimeofday mktime mprotect readlink setitimer stat symlink sysconf timelocal times vadvise vfork) dnl ** check whether this machine has gmp2 installed AC_CHECK_LIB(gmp, mpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp, @@ -476,6 +681,35 @@ dnl the order of these tests matters: bfd needs liberty AC_CHECK_LIB(iberty, xmalloc) AC_CHECK_LIB(bfd, bfd_init) +dnl ** check for readline, for Hugs and hslibs' Readline +dnl ncurses supersedes termcap and curses, but for compatibility, +dnl we have to check for all... +AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses, + AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap, + AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses, + HaveLibTermcap=NO; LibTermcap=not-installed))) + +if test $HaveLibTermcap = YES ; then + LIBS="-l$LibTermcap $LIBS" + AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO) +fi + +if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then + AC_DEFINE(HAVE_READLINE_LIBS,1) + LibsReadline="-lreadline -l$LibTermcap" +else + AC_DEFINE(HAVE_READLINE_LIBS,0) + LibsReadline= +fi +AC_SUBST(LibsReadline) + +dnl ################################################################ +dnl Check for libraries +dnl ################################################################ + +FPTOOLS_CHECK_LIB_NOWARN(dl, dlopen) +FPTOOLS_CHECK_LIB_NOWARN(dld, shl_load) +FPTOOLS_CHECK_LIB_NOWARN(m, atan) dnl -------------------------------------------------- dnl * Miscellaneous feature tests @@ -487,11 +721,14 @@ AC_FUNC_ALLOCA dnl ** determine whether or not const works AC_C_CONST +dnl ** determine whether ANSI-function prototypes work? +AC_C_PROTOTYPES + dnl ** are we big endian? AC_C_BIGENDIAN - -dnl ** determine the return type of signal() -AC_TYPE_SIGNAL +# Allay users' general fear of warnings of any kind. +errprint((fptools configure script wizard sez: "don't worry, the above warning is harmless (to us.)") +) dnl ** check for leading underscores in symbol names FPTOOLS_UNDERSCORE