1 dnl == autoconf source for the Glasgow FP tools ==
2 dnl (run "grep '^dnl \*' configure.in | sed -e 's/dnl / /g; s/\*\*/ +/g;'"
3 dnl (or some such) to see the outline of this file)
6 # (c) The AQUA Project, Glasgow University, 1994-1998
8 # Configure script template for the Glasgow functional programming tools
10 # Process with 'autoconf' to get a working configure script.
12 # For the generated configure script, do "./configure --help" to
13 # see what flags are available. (Better yet, read the documentation!)
16 # First off, a distrib sanity check..
17 AC_INIT(mk/config.mk.in)
19 dnl * Declare subdirectories that have a private configure script
21 dnl After the toplevel configuration is complete, the script will recurse into
22 dnl these subdirectories (the use of cache values makes repeated checks cheap)
23 AC_CONFIG_SUBDIRS(ghc)
25 # -------------------------------------------------------------------------
26 # Prepare to generate the following header files
29 AC_CONFIG_HEADER(mk/config.h)
31 # No, semi-sadly, we don't do `--srcdir'...
32 if test x"$srcdir" != 'x.' ; then
33 echo "This configuration does not support the \`--srcdir' option.."
38 # Remove common automounter nonsense + convert from UNC to DOS style paths
39 # (UNC awareness isn't quite there yet for cygwin32-beta18 and consituent tools.)
42 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|' | sed 's|^/grasp_tmp|/local/grasp_tmp|' | sed 's|^//\(.\)/|\1:/|' `
45 echo "*** The top of your build tree is: $hardtop"
48 dnl--------------------------------------------------------------------
49 dnl * Choose host(/target/build) platform
50 dnl--------------------------------------------------------------------
52 dnl Guess host/target/build platform(s) if necessary.
55 # "$host" defaults to "$target"
56 if test "x$host" = xNONE ; then
60 dnl ** canonicalize platform names
61 BuildPlatform=`/bin/sh $srcdir/config.sub $build` || exit 1
62 HostPlatform=`/bin/sh $srcdir/config.sub $host` || exit 1
63 TargetPlatform=`/bin/sh $srcdir/config.sub $target` || exit 1
65 if test x"$TargetPlatform" != x"$HostPlatform" ; then
66 echo "GHC configuration does not support differing host/target (i.e., cross-compiling)"
72 # The following will be more difficult when we *are* cross-compiling.
73 # Suitable names to slam in *_CPP are in platform.h.in.
74 # We also record the architecture, vendor, and operating system (OS)
78 HostPlatform=alpha-dec-osf1 # canonicalise for our purposes
79 TargetPlatform=alpha-dec-osf1 # this will work for now... (hack)
80 BuildPlatform=alpha-dec-osf1 # hack
81 HostPlatform_CPP='alpha_dec_osf1'
87 HostPlatform=alpha-dec-osf3 # canonicalise for our purposes
88 TargetPlatform=alpha-dec-osf3 # this will work for now... (hack)
89 BuildPlatform=alpha-dec-osf3 # hack
90 HostPlatform_CPP='alpha_dec_osf3'
96 HostPlatform=hppa1.1-hp-hpux # canonicalise for our purposes (hack)
97 TargetPlatform=hppa1.1-hp-hpux
98 BuildPlatform=hppa1.1-hp-hpux
99 HostPlatform_CPP='hppa1_1_hp_hpux'
100 HostArch_CPP='hppa1_1'
104 i[[3456]]86-*-linuxaout*)
105 HostPlatform=i386-unknown-linuxaout # hack again
106 TargetPlatform=i386-unknown-linuxaout
107 BuildPlatform=i386-unknown-linuxaout
108 HostPlatform_CPP='i386_unknown_linuxaout'
110 HostVendor_CPP='unknown'
111 HostOS_CPP='linuxaout'
113 i[[3456]]86-*-linux*)
114 HostPlatform=i386-unknown-linux # hack again
115 TargetPlatform=i386-unknown-linux
116 BuildPlatform=i386-unknown-linux
117 HostPlatform_CPP='i386_unknown_linux'
119 HostVendor_CPP='unknown'
122 i[[3456]]86-*-freebsd3*) # FreeBSD 3.0+ uses ELF
123 HostPlatform=i386-unknown-freebsd3 # hack again
124 TargetPlatform=i386-unknown-freebsd3
125 BuildPlatform=i386-unknown-freebsd3
126 HostPlatform_CPP='i386_unknown_freebsd3'
128 HostVendor_CPP='unknown'
129 HostOS_CPP='freebsd3'
131 i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out
132 HostPlatform=i386-unknown-freebsd2 # hack again
133 TargetPlatform=i386-unknown-freebsd2
134 BuildPlatform=i386-unknown-freebsd2
135 HostPlatform_CPP='i386_unknown_freebsd2'
137 HostVendor_CPP='unknown'
138 HostOS_CPP='freebsd2'
140 i[[3456]]86-*-netbsd*)
141 HostPlatform=i386-unknown-netbsd # hack again
142 TargetPlatform=i386-unknown-netbsd
143 BuildPlatform=i386-unknown-netbsd
144 HostPlatform_CPP='i386_unknown_netbsd'
146 HostVendor_CPP='unknown'
149 i[[3456]]86-*-solaris2*)
150 HostPlatform=i386-unknown-solaris2 # hack again
151 TargetPlatform=i386-unknown-solaris2
152 BuildPlatform=i386-unknown-solaris2
153 HostPlatform_CPP='i386_unknown_solaris2'
155 HostVendor_CPP='unknown'
156 HostOS_CPP='solaris2'
158 i[[3456]]86-*-cygwin32*)
159 HostPlatform=i386-unknown-cygwin32 # hack again
160 TargetPlatform=i386-unknown-cygwin32
161 BuildPlatform=i386-unknown-cygwin32
162 HostPlatform_CPP='i386_unknown_cygwin32'
164 HostVendor_CPP='unknown'
165 HostOS_CPP='cygwin32'
168 i[[3456]]86-*-mingw32*)
169 HostPlatform=i386-unknown-mingw32 # hack again
170 TargetPlatform=i386-unknown-mingw32
171 BuildPlatform=i386-unknown-mingw32
172 HostPlatform_CPP='i386_unknown_mingw32'
174 HostVendor_CPP='unknown'
177 # We assume you're using mingw32 via the gcc that comes
178 # with cygwin, and not the native port, so let's augment
179 # the gcc command-line used here with -mno-cygwin to
180 # arrange for good things to happen.
181 CFLAGS="-mno-cygwin $CFLAGS"
184 HostPlatform_CPP='m68k_next_nextstep2'
186 HostVendor_CPP='next'
187 HostOS_CPP='nextstep2'
190 HostPlatform_CPP='m68k_next_nextstep3'
192 HostVendor_CPP='next'
193 HostOS_CPP='nextstep3'
195 i[[3456]]86-next-nextstep3)
196 HostPlatform=i386-next-nextstep3 # hack again
197 TargetPlatform=i386-next-nextstep3
198 BuildPlatform=i386-next-nextstep3
199 HostPlatform_CPP='i386_next_nextstep3'
201 HostVendor_CPP='next'
202 HostOS_CPP='nextstep3'
205 HostPlatform=m68k-sun-sunos4
206 TargetPlatform=m68k-sun-sunos4 #hack
207 BuildPlatform=m68k-sun-sunos4 #hack
208 HostPlatform_CPP='m68k_sun_sunos4'
214 HostPlatform_CPP='mips_dec_ultrix'
215 HostArch_CPP='mipsel' # NB a little different
220 HostPlatform=mips-sgi-irix
221 TargetPlatform=mips-sgi-irix #hack
222 BuildPlatform=mips-sgi-irix #hack
223 HostPlatform_CPP='mips_sgi_irix'
224 HostArch_CPP='mipseb' # NB a little different
229 HostPlatform=rs6000-ibm-aix
230 TargetPlatform=rs6000-ibm-aix #hack
231 BuildPlatform=rs6000-ibm-aix #hack
232 HostPlatform_CPP='rs6000_ibm_aix'
233 HostArch_CPP='rs6000'
238 HostPlatform=powerpc-ibm-aix
239 TargetPlatform=powerpc-ibm-aix #hack
240 BuildPlatform=powerpc-ibm-aix #hack
241 HostPlatform_CPP='powerpc_ibm_aix'
242 HostArch_CPP='powerpc'
247 HostPlatform=sparc-sun-sunos4
248 TargetPlatform=sparc-sun-sunos4 #hack
249 BuildPlatform=sparc-sun-sunos4 #hack
250 HostPlatform_CPP='sparc_sun_sunos4'
256 HostPlatform=sparc-sun-solaris2
257 TargetPlatform=sparc-sun-solaris2 #hack
258 BuildPlatform=sparc-sun-solaris2 #hack
259 HostPlatform_CPP='sparc_sun_solaris2'
262 HostOS_CPP='solaris2'
265 echo "Unrecognised platform: $HostPlatform"
269 echo "Canonicalised to: $HostPlatform"
270 test x"$HostPlatform" != x"$TargetPlatform" && echo "Target platform set to $TargetPlatform"
271 test x"$BuildPlatform" != x"$HostPlatform" && echo "Build platform set to $BuildPlatform"
273 BuildPlatform_CPP=$HostPlatform_CPP
274 TargetPlatform_CPP=$HostPlatform_CPP
275 BuildArch_CPP=$HostArch_CPP
276 TargetArch_CPP=$HostArch_CPP
277 BuildOS_CPP=$HostOS_CPP
279 TargetOS_CPP=$HostOS_CPP
280 BuildVendor_CPP=$HostVendor_CPP
281 TargetVendor_CPP=$HostVendor_CPP
283 dnl Cannot afford all these SUBSTs (because of braindead seds w/ 99 cmd limits)
284 dnl AC_SUBST(BuildPlatform)
286 AC_SUBST(HostPlatform)
287 AC_SUBST(TargetPlatform)
288 AC_SUBST(HostPlatform_CPP)
289 dnl AC_SUBST(BuildPlatform_CPP)
290 dnl AC_SUBST(TargetPlatform_CPP)
292 AC_SUBST(HostArch_CPP)
293 dnl AC_SUBST(BuildArch_CPP)
294 dnl AC_SUBST(TargetArch_CPP)
297 AC_SUBST(HostOS_Full)
298 dnl AC_SUBST(BuildOS_CPP)
299 dnl AC_SUBST(TargetOS_CPP)
301 AC_SUBST(HostVendor_CPP)
302 dnl AC_SUBST(BuildVendor_CPP)
303 dnl AC_SUBST(TargetVendor_CPP)
307 dnl --------------------------------------------------------------
308 dnl * Project specific configuration options
309 dnl --------------------------------------------------------------
310 dnl What follows is a bunch of options that can either be configured
311 dnl through command line options to the configure script or by
312 dnl supplying defns in the build tree's mk/build.mk. Having the option to
313 dnl use either is considered a Feature.
315 dnl ** What command to use to compile compiler sources ?
316 dnl --------------------------------------------------------------
318 [ --with-hc=<haskell compiler>
319 Use a command different from 'ghc' to compile up Haskell code.
320 (no claims currently made that this will work with a compiler other than a
321 recent version of GHC, but you could always try...)
328 dnl ** Which gcc to use?
329 dnl --------------------------------------------------------------
331 [ --with-gcc=<gcc command>
332 Use a different command instead of 'gcc' for the GNU C compiler.
334 [WhatGccIsCalled="$withval"],
335 [WhatGccIsCalled="gcc"]
337 AC_SUBST(WhatGccIsCalled)
339 dnl ** Booting from .hc files?
340 dnl --------------------------------------------------------------
341 AC_ARG_ENABLE(hc-boot,
343 Boot the Glasgow Haskell Compiler from intermediate .hc files.
344 (This option is mostly of interest to porters.)
349 AC_SUBST(BootingFromHc)
352 dnl ** Enable the construction of Win32 DLLs?
353 dnl --------------------------------------------------------------
354 AC_ARG_ENABLE(win32-dlls,
355 [ --enable-win32-dlls
356 If on a Win32 platform running mingw32/cygwin, enable the
357 construction of DLLs containing ghc-compiled code.
363 *) echo "Unrecognised win32 platform: $HostPlatform"
371 AC_SUBST(EnableWin32DLLs)
372 if test x"$EnableWin32DLLs" = "xYES" ; then
373 AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
376 dnl --------------------------------------------------------------
377 dnl End of configure script option section
378 dnl --------------------------------------------------------------
381 dnl --------------------------------------------------------------
382 dnl * General configuration checks
383 dnl --------------------------------------------------------------
388 dnl ** look for `perl', but watch out for version 4.035
389 AC_PATH_PROG(PerlCmd,perl)
390 if test -z "$PerlCmd"; then
391 echo "You must install perl before you can continue"
392 echo "Perhaps it is already installed, but not in your PATH?"
395 FPTOOLS_CHECK_PERL_VERSION
398 dnl ** does #! path/to/perl work? (sometimes it's too long...)
402 dnl ** look for GCC and find out which version
403 dnl Figure out which C compiler to use. Gcc is preferred.
404 dnl If gcc, make sure it's at least 2.1
409 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
412 dnl ** figure out how to do context diffs
416 dnl ** look for a decent parser generator (bison preferred)
417 dnl (FPTOOLS_PROG_YACCY is AC_PROG_YACC, but with some extra testing
418 dnl on the suitability of the 'yacc' returned.)
421 dnl ** Find lex command (lex or flex) and library (-ll or -lfl)
422 dnl ( not that we care about the latter, see mk/config.mk.in )
426 dnl ** figure out how to do a BSD-ish install
429 dnl If you can run configure, you certainly have /bin/sh
430 AC_DEFINE(HAVE_BIN_SH)
432 dnl ** how to invoke `ar' and `ranlib'
433 FPTOOLS_PROG_AR_AND_RANLIB
436 dnl ** Check to see whether ln -s works
440 dnl ** Find the path to sed
441 AC_PATH_PROG(SedCmd,sed)
444 dnl ** check for time command
445 AC_PATH_PROG(TimeCmd,time)
449 dnl if GNU tar is named gtar, look for it first.
450 AC_PATH_PROGS(TarCmd,gtar tar,tar)
452 dnl ** check for gzip/compress
453 AC_PATH_PROGS(CompressCmd,gzip compress,gzip)
455 compress_nm=`basename $CompressCmd`
456 if test x"$compress_nm" = xgzip; then
457 CompressCmd="$CompressCmd -d"
462 AC_SUBST(CompressCmd)
463 AC_SUBST(CompressSuffix)
465 dnl ** check for installed happy binary + version
466 dnl (don't do it if we're booting from .hc files though.)
467 if (test "$BootingFromHc" = "NO"); then
471 dnl --------------------------------------------------
472 dnl ### program checking section ends here ###
473 dnl --------------------------------------------------
475 dnl --------------------------------------------------
476 dnl * Platform header file and syscall feature tests
477 dnl ### checking the state of the local header files and syscalls ###
479 dnl ** check for full ANSI header (.h) files
482 dnl ** check for specific header (.h) files that we are interested in
483 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 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 readline/readline.h readline/history.h bfd.h winsock.h)
485 dnl ** check for DOS include files
486 AC_CHECK_HEADERS(dos.h conio.h io.h std.h)
488 dnl ** check for Windows include files
489 AC_CHECK_HEADERS(windows.h)
491 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
494 dnl dynamic loading include files
495 AC_CHECK_HEADERS(dlfcn.h dl.h)
497 dnl ** check for farcalloc (in bcc)
498 AC_CHECK_HEADER(alloc.h,AC_CHECK_FUNCS(farcalloc))
500 dnl ** check for valloc (in sunos, solaris, mips, amiga, next, minix, ultrix)
501 AC_CHECK_HEADER(malloc.h,AC_CHECK_FUNCS(valloc))
503 dnl ** how do we get a timezone name, and UTC offset ?
506 dnl ** what's the type of timezone?
507 FPTOOLS_HAVE_TIMEZONE
508 FPTOOLS_TYPE_TIMEZONE
510 dnl ** do we have altzone?
513 dnl ** does struct stat contain st_blksize?
516 dnl ** what are the sizes of various types
517 dnl (these must come before GHC_CHECK_ALIGNMENT)
518 AC_CHECK_SIZEOF(unsigned int,4)
519 AC_CHECK_SIZEOF(float, 4)
520 AC_CHECK_SIZEOF(double, 8)
521 AC_CHECK_SIZEOF(long, 4)
522 AC_CHECK_SIZEOF(void *, 4)
524 dnl ** what are alignment constraints on various types
525 FPTOOLS_CHECK_ALIGNMENT(unsigned int) dnl redundant but harmless
526 FPTOOLS_CHECK_ALIGNMENT(long)
527 FPTOOLS_CHECK_ALIGNMENT(float)
528 FPTOOLS_CHECK_ALIGNMENT(double)
530 dnl ** do we have long longs?
533 dnl ** can we open files in binary mode?
536 dnl ** check for GetModuleFileName and WinExec (windows only)
537 dnl Old: AC_CHECK_FUNCS(WinExec GetModuleFileName) dnl Windows
538 dnl Doesn't work because the linker can't see the functions if
539 dnl you omit the #include <windows.h>. (I've no idea why not...)
541 FPTOOLS_TRY_LINK_NOWARN(,[
552 if test "$have_winexec" = "1"; then
553 AC_DEFINE(HAVE_WINEXEC)
556 FPTOOLS_TRY_LINK_NOWARN(,[
562 GetModuleFileName((HMODULE)0,dir,0);
566 [have_getmodulefilename=1],
567 [have_getmodulefilename=0])
568 if test "$have_getmodulefilename" = "1"; then
569 AC_DEFINE(HAVE_GETMODULEFILENAME)
572 dnl ** check return type of signal handlers
573 dnl Foo: assumes we can use prototypes.
574 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
575 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
576 dnl [AC_TRY_COMPILE([#include <sys/types.h>
577 dnl #include <signal.h>
581 dnl void (*signal (int, void (*)(int)))(int);
584 dnl ac_cv_type_signal_handler=void_int,
585 dnl ac_cv_type_signal_handler=int_void)])
586 dnl if test "$ac_cv_type_signal_handler" = void_int; then
587 dnl AC_DEFINE(VOID_INT_SIGNALS)
590 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
592 if test "$ac_cv_type_signal" = void; then
593 AC_DEFINE(VOID_INT_SIGNALS)
596 dnl ** check for more functions
597 AC_CHECK_FUNCS(strcasecmp _stricmp stricmp strcmpi)
598 AC_CHECK_FUNCS(strcmp)
599 AC_CHECK_FUNCS(realpath _fullpath)
600 AC_CHECK_FUNCS(PBHSetVolSync macsystem)
601 AC_CHECK_FUNCS(fgetpos fsetpos fseek ftell)
602 AC_CHECK_FUNCS(vsnprintf _vsnprintf)
603 AC_CHECK_FUNCS(snprintf _snprintf )
604 AC_CHECK_FUNCS(popen _popen )
605 AC_CHECK_FUNCS(pclose _pclose )
608 dnl ** check for specific library functions that we are interested in
609 AC_CHECK_FUNCS(access ftime getclock getpagesize getrusage gettimeofday mktime mprotect readlink setitimer stat symlink sysconf timelocal times vadvise vfork)
611 dnl ** check whether this machine has gmp2 installed
612 AC_CHECK_LIB(gmp, mpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
613 AC_CHECK_LIB(gmp2, mpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp2,
614 HaveLibGmp=No; LibGmp=not-installed))
618 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
619 dnl the order of these tests matters: bfd needs liberty
620 AC_CHECK_LIB(iberty, xmalloc)
621 AC_CHECK_LIB(bfd, bfd_init)
623 dnl ** check for readline, for Hugs
624 AC_CHECK_LIB(readline, readline,
626 AC_DEFINE(HAVE_LIBREADLINE,1)
630 AC_DEFINE(HAVE_LIBREADLINE,0)
634 AC_SUBST(HaveLibReadline)
637 dnl ################################################################
638 dnl Check for libraries
639 dnl ################################################################
641 FPTOOLS_CHECK_LIB_NOWARN(dl, dlopen)
642 FPTOOLS_CHECK_LIB_NOWARN(dld, shl_load)
643 FPTOOLS_CHECK_LIB_NOWARN(m, atan)
645 dnl --------------------------------------------------
646 dnl * Miscellaneous feature tests
647 dnl --------------------------------------------------
649 dnl ** can we get alloca?
652 dnl ** determine whether or not const works
655 dnl ** determine whether ANSI-function prototypes work?
658 dnl ** are we big endian?
660 # Allay users' general fear of warnings of any kind.
661 errprint((fptools configure script wizard sez: "don't worry, the above warning is harmless (to us.)")
664 dnl ** determine the return type of signal()
667 dnl ** check for leading underscores in symbol names
670 dnl ** how is the end of text section signalled?
671 FPTOOLS_END_TEXT_SECTION
673 dnl ** how is the end of data section signalled?
674 FPTOOLS_END_DATA_SECTION
676 dnl ** code before data?
677 FPTOOLS_CODE_BEFORE_DATA
679 AC_OUTPUT(mk/config.mk, echo timestamp > mk/stamp-h )
682 echo '************************************************'
683 echo '*** NOW DO: gmake boot followed by gmake all'
684 echo '*** (where gmake == GNU make)'
685 echo '************************************************'