home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / configure.in < prev    next >
Text File  |  1996-09-28  |  23KB  |  794 lines

  1. dnl configure.in
  2. dnl
  3. dnl Process this file with autoconf to produce a configure script.
  4. dnl Requires GNU autoconf 1.8 or later.
  5. dnl
  6. dnl Copyright (C) 1992, 1993, 1994, 1995 John W. Eaton
  7. ### 
  8. ### This file is part of Octave.
  9. ### 
  10. ### Octave is free software; you can redistribute it and/or modify it
  11. ### under the terms of the GNU General Public License as published by the
  12. ### Free Software Foundation; either version 2, or (at your option) any
  13. ### later version.
  14. ### 
  15. ### Octave is distributed in the hope that it will be useful, but WITHOUT
  16. ### ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  17. ### FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  18. ### for more details.
  19. ### 
  20. ### You should have received a copy of the GNU General Public License
  21. ### along with Octave; see the file COPYING.  If not, write to the Free
  22. ### Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  
  24. AC_REVISION($Revision: 1.92 $)
  25. AC_PREREQ(2.0)
  26. AC_INIT(src/octave.cc)
  27. AC_CONFIG_HEADER(config.h kpathsea/c-auto.h)
  28.  
  29. AC_DEFINE(OCTAVE_SOURCE, 1)
  30.  
  31. AC_CANONICAL_HOST
  32. if test -z "$host"; then
  33.   host=unknown
  34. fi
  35. target_host_type=$host
  36. canonical_host_type=$host
  37. if test "$host" = unknown; then
  38.   AC_MSG_WARN([configuring Octave for unknown system type
  39. ])
  40. fi
  41. AC_SUBST(target_host_type)
  42.  
  43. ### Allow the user to force us to use f2c.
  44. ### Amiga hack -- the GNU f77 compiler won't quite work yet so force this.
  45.  
  46. AC_ARG_WITH(f2c,
  47.   [  --with-f2c              use f2c even if Fortran compiler is available],
  48.   use_f2c=true, use_f2c=true)
  49.  
  50. ### Allow the user to experiment with dynamic linking using GNU dld.
  51.  
  52. AC_ARG_ENABLE(dld,
  53.   [  --enable-dld            use DLD for dynamic linking (not all systems)],
  54.   use_dld=true, use_dld=false)
  55. AC_SUBST(use_dld)
  56.  
  57. ### Allow compilation of smaller kernel.  This only works if some form
  58. ### of dynamic linking is also supported and used.
  59.  
  60. AC_ARG_ENABLE(lite-kernel,
  61.   [  --enable-lite-kernel    compile smaller kernel (requires DLD)],
  62.   lite_kernel=true, lite_kernel=false)
  63. if $lite_kernel; then
  64.   AC_DEFINE(OCTAVE_LITE, 1)
  65. fi
  66. AC_SUBST(lite_kernel)
  67.  
  68. ### some defaults
  69.  
  70. AC_PREFIX_DEFAULT(/usr/local)
  71.  
  72. exec_prefix='$(prefix)'
  73. bindir='$(exec_prefix)/bin'
  74. datadir='$(prefix)/lib'
  75. libdir='$(exec_prefix)/lib'
  76. includedir='$(prefix)/include/octave'
  77. mandir='$(prefix)/man/man1'
  78. infodir='$(prefix)/info'
  79. fcnfiledir='$(datadir)/octave/$(version)/m'
  80. localfcnfiledir='$(datadir)/octave/site/m'
  81. localfcnfilepath='$(localfcnfiledir)//'
  82. archlibdir='$(libdir)/octave/$(version)/exec/$(target_host_type)'
  83. octfiledir='$(libdir)/octave/$(version)/oct/$(target_host_type)'
  84. localoctfiledir='$(datadir)/octave/site/oct/$(target_host_type)'
  85. localoctfilepath='$(localoctfiledir)//'
  86. fcnfilepath='.:$(localoctfilepath):$(localfcnfilepath):$(octfiledir)//:$(fcnfiledir)//'
  87. imagedir='$(datadir)/octave/$(version)/imagelib'
  88. imagepath='.:$(imagedir)//'
  89.  
  90. AC_MSG_RESULT([defining prefix to be $prefix])
  91. AC_MSG_RESULT([defining exec_prefix to be $exec_prefix])
  92. AC_MSG_RESULT([defining bindir to be $bindir])
  93. AC_MSG_RESULT([defining datadir to be $datadir])
  94. AC_MSG_RESULT([defining libdir to be $libdir])
  95. AC_MSG_RESULT([defining includedir to be $includedir])
  96. AC_MSG_RESULT([defining mandir to be $mandir])
  97. AC_MSG_RESULT([defining infodir to be $infodir])
  98. AC_MSG_RESULT([defining fcnfiledir to be $fcnfiledir])
  99. AC_MSG_RESULT([defining localfcnfiledir to be $localfcnfiledir])
  100. AC_MSG_RESULT([defining localfcnfilepath to be $localfcnfilepath])
  101. AC_MSG_RESULT([defining archlibdir to be $archlibdir])
  102. AC_MSG_RESULT([defining octfiledir to be $octfiledir])
  103. AC_MSG_RESULT([defining localoctfiledir to be $localoctfiledir])
  104. AC_MSG_RESULT([defining localoctfilepath to be $localoctfilepath])
  105. AC_MSG_RESULT([defining fcnfilepath to be $fcnfilepath])
  106. AC_MSG_RESULT([defining imagedir to be $imagedir])
  107. AC_MSG_RESULT([defining imagepath to be $imagepath])
  108. AC_SUBST(exec_prefix)
  109. AC_SUBST(bindir)
  110. AC_SUBST(datadir)
  111. AC_SUBST(libdir)
  112. AC_SUBST(includedir)
  113. AC_SUBST(mandir)
  114. AC_SUBST(infodir)
  115. AC_SUBST(fcnfiledir)
  116. AC_SUBST(localfcnfiledir)
  117. AC_SUBST(localfcnfilepath)
  118. AC_SUBST(archlibdir)
  119. AC_SUBST(octfiledir)
  120. AC_SUBST(localoctfiledir)
  121. AC_SUBST(localoctfilepath)
  122. AC_SUBST(fcnfilepath)
  123. AC_SUBST(imagedir)
  124. AC_SUBST(imagepath)
  125.  
  126. ### Path separator.
  127.  
  128. AC_DEFINE(SEPCHAR, [':'])
  129. AC_DEFINE(SEPCHAR_STR, [":"])
  130.  
  131. ### Do special stuff if using dld.
  132.  
  133. DLD_DIR=
  134. LIBDLD=
  135. LIBOCTDLD='liboctdld.a'
  136. LD_STATIC_FLAG=
  137. if $use_dld; then
  138.   DLD_DIR=dld
  139.   LIBDLD='../dld/libdld.a'
  140. # don't link them in only if doing dynamic linking and small kernel
  141. # requested.
  142.   if $lite_kernel; then
  143.     LIBOCTDLD=
  144.   fi
  145.   LD_STATIC_FLAG=-static
  146.   AC_DEFINE(WITH_DLD, 1)
  147. fi
  148.  
  149. ### Also use -static if compiling on Alpha OSF/1 1.3 systems.
  150.  
  151. case "$canonical_host_type" in
  152.   alpha-dec-osf1.3)
  153.     LD_STATIC_FLAG=-static
  154.   ;;
  155. esac
  156.  
  157. if test -n "$DLD_DIR"; then
  158.   AC_MSG_RESULT([defining DLD_DIR to be $DLD_DIR])
  159. fi
  160. if test -n "$LIBDLD"; then
  161.   AC_MSG_RESULT([defining LIBDLD to be $LIBDLD])
  162. fi
  163. if test -n "$LIBOCTDLD"; then
  164.   AC_MSG_RESULT([defining LIBOCTDLD to be $LIBOCTDLD])
  165. fi
  166. if test -n "$LD_STATIC_FLAG"; then
  167.   AC_MSG_RESULT([defining LD_STATIC_FLAG to be $LD_STATIC_FLAG])
  168. fi
  169. AC_SUBST(DLD_DIR)
  170. AC_SUBST(LIBDLD)
  171. AC_SUBST(LIBOCTDLD)
  172. AC_SUBST(LD_STATIC_FLAG)
  173.  
  174. ### See if the optional nonlinear programming code is present.
  175.  
  176. AC_MSG_CHECKING([for npsol])
  177. if test -f $srcdir/libcruft/npsol/npsol.f; then
  178.   AC_MSG_RESULT([yes])
  179. else
  180.   AC_MSG_RESULT([no])
  181.   AC_DEFINE(NPSOL_MISSING, 1)
  182. fi
  183.  
  184. AC_MSG_CHECKING([for qpsol])
  185. if test -f $srcdir/libcruft/qpsol/qpsol.f; then
  186.   AC_MSG_RESULT([yes])
  187. else
  188.   AC_MSG_RESULT([no])
  189.   AC_DEFINE(QPSOL_MISSING, 1)
  190. fi
  191.  
  192. AC_MSG_CHECKING([for fsqp])
  193. if test -f $srcdir/libcruft/fsqp/fsqpd.f; then
  194.   AC_MSG_RESULT([yes])
  195. else
  196.   AC_MSG_RESULT([no])
  197.   AC_DEFINE(FSQP_MISSING, 1)
  198. fi
  199.  
  200. ### See which C++ compiler to use (we expect to find g++).
  201.  
  202. AC_PROG_CXX
  203. AC_PROG_CXXCPP
  204.  
  205. ### Do special things for g++.
  206.  
  207. ADD_CXX_WALL=false
  208. NO_IMPLICIT_TEMPLATES=
  209. gxx_version=`$CXX -v 2>&1 | grep "^g.. version" | sed 's/^g.. version *//'`
  210. case "$gxx_version" in
  211. changequote(,)dnl
  212.   2.[6789].*|2.[123456789][0123456789].*)
  213. changequote([,])dnl
  214.     if test -z "$CXXFLAGS"; then
  215.       CXXFLAGS="-g -O"
  216.       AC_MSG_RESULT([defining CXXFLAGS to be $CXXFLAGS])
  217.       ADD_CXX_WALL=true
  218.     fi
  219.     NO_IMPLICIT_TEMPLATES="-fno-implicit-templates"
  220.     AC_MSG_RESULT([defining NO_IMPLICIT_TEMPLATES to be $NO_IMPLICIT_TEMPLATES])
  221.   ;;
  222. changequote(,)dnl
  223.   1.*|2.[012345].*)
  224. changequote([,])dnl
  225.     AC_MSG_WARN([g++ version $gxx_version will not work to compile Octave])
  226.   ;;
  227.   *)
  228.     AC_MSG_WARN([Octave has only been tested with g++, and I can't find it])
  229.   ;;
  230. esac
  231.  
  232. HOST_CXXFLAGS=
  233. case "$gxx_version" in
  234.   2.6.*)
  235.     case "$canonical_host_type" in
  236.       rs6000-ibm-aix*)
  237.         HOST_CXXFLAGS="-Wa,-u"
  238.         AC_MSG_RESULT([defining HOST_CXXFLAGS to be $HOST_CXXFLAGS])
  239.       ;;
  240.     esac
  241.   ;;
  242. esac
  243.  
  244. AC_SUBST(HOST_CXXFLAGS)
  245.  
  246. ### See what libraries are used by the C++ compiler.  Need this for
  247. ### dynamic linking.
  248.  
  249. CXXLIBS=`sh $srcdir/cxxlibs.sh`
  250. AC_MSG_RESULT([defining CXXLIBS to be $CXXLIBS])
  251.  
  252. AC_SUBST(CXXFLAGS)
  253. AC_SUBST(NO_IMPLICIT_TEMPLATES)
  254. AC_SUBST(CXXLIBS)
  255.  
  256. ### See which C compiler to use (we expect to find gcc).
  257.  
  258. AC_PROG_CC
  259. AC_PROG_CPP
  260. AC_PROG_GCC_TRADITIONAL
  261.  
  262. ### Do special things for gcc.
  263.  
  264. ADD_CC_WALL=false
  265. gcc_version=`$CC -v 2>&1 | grep "^gcc version" | sed 's/^gcc version *//'`
  266. case "$gcc_version" in
  267.   2.*)
  268.     if test -z "$CFLAGS"; then
  269.       CFLAGS="-O"    # Amiga version requires >50 Mb to link with -g objs
  270.       AC_MSG_RESULT([defining CFLAGS to be $CFLAGS])
  271.       ADD_CC_WALL=true
  272.     fi
  273.     if test -z "$LDFLAGS"; then
  274.       LDFLAGS="-s"    # Amiga version won't run if not stripped -FIXME!
  275.       AC_MSG_RESULT([defining LDFLAGS to be $LDFLAGS])
  276.     fi
  277.   ;;
  278.   1.*)
  279.     AC_MSG_WARN([gcc version $gcc_version is likely to cause problems])
  280.   ;;
  281.   *)
  282.     AC_MSG_WARN([Octave has only been tested with gcc, and I can't find it])
  283.   ;;
  284. esac
  285.  
  286. AC_SUBST(CFLAGS)
  287. AC_SUBST(LDFLAGS)
  288.  
  289. ### On Linux systems we need to compile with -mieee-fp to get full
  290. ### support for IEEE floating point.
  291.  
  292. case "$canonical_host_type" in
  293.   i386-*-linux | i486-*-linux | i586-*-linux)
  294.     GCC_IEEE_FP_FLAG="-mieee-fp"
  295.     AC_MSG_RESULT([defining GCC_IEEE_FP_FLAG to be $GCC_IEEE_FP_FLAG])
  296.   ;;
  297. esac
  298.  
  299. AC_SUBST(GCC_IEEE_FP_FLAG)
  300.  
  301. ### Special checks for odd OS specific things.
  302.  
  303. AC_ISC_POSIX
  304. AC_MINIX
  305. AC_AIX
  306. AC_FUNC_STRFTIME
  307. AC_CHECK_LIB(sun, getpwnam)
  308.  
  309. ### How big are ints and how are they oriented?  These could probably
  310. ### be eliminated in favor of run-time checks.
  311.  
  312. AC_CHECK_SIZEOF(short)
  313. AC_CHECK_SIZEOF(int)
  314. AC_CHECK_SIZEOF(long)
  315. AC_C_BIGENDIAN
  316.  
  317. ### Try to determine the floating point format.  This could probably
  318. ### be eliminated in favor of run-time checks.
  319.  
  320. AC_MSG_CHECKING([floating point format])
  321. changequote(,)dnl
  322. XCFLAGS=`echo $CFLAGS | sed 's/-O[^ \t]*//'`
  323. changequote([,])dnl
  324. ${CC-cc} -DDP $XCFLAGS $LDFLAGS $srcdir/float-type.c -o conftest >/dev/null 2>&1
  325. FLOAT_FORMAT=`./conftest`
  326. # Amiga Hack - floating point bugs cause conftest to fail.
  327. FLOAT_FORMAT="IEEE_BIG_ENDIAN"
  328. case "$FLOAT_FORMAT" in
  329.   IEEE_BIG_ENDIAN)
  330.     AC_MSG_RESULT([IEEE big endian])
  331.     AC_DEFINE(IEEE_BIG_ENDIAN, 1)
  332.   ;;
  333.   IEEE_LITTLE_ENDIAN)
  334.     AC_MSG_RESULT([IEEE little endian])
  335.     AC_DEFINE(IEEE_LITTLE_ENDIAN, 1)
  336.   ;;
  337.   VAX_D_FLOAT)
  338.     AC_MSG_RESULT([VAX D floating])
  339.     AC_DEFINE(VAX_D_FLOAT, 1)
  340.   ;;
  341.   VAX_G_FLOAT)
  342.     AC_MSG_RESULT([VAX G floating])
  343.     AC_DEFINE(VAX_G_FLOAT, 1)
  344.   ;;
  345.   *)
  346.     AC_MSG_RESULT()
  347.     AC_MSG_WARN("unrecognized floating point format!")
  348.   ;;
  349. esac
  350.  
  351. ### Does the C compiler handle alloca() and const correctly?
  352.  
  353. AC_ALLOCA
  354.  
  355. ### This one is for kpathsea.
  356. ###
  357. ### It would be nicer to test for the requisite putenv features directly,
  358. ### but can't figure out how to do that.
  359.  
  360. if test "`(uname) 2>/dev/null`" = NetBSD \
  361.    || test "`(uname) 2>/dev/null`" = FreeBSD; then
  362.   AC_DEFINE(SMART_PUTENV)
  363. fi
  364.  
  365. AC_C_CONST
  366.  
  367. ### If we haven't been forced to use f2c, try to find a Fortran compiler
  368. ### under any one of several common Un*x Fortran compiler names. 
  369. ### Put fc last to avoid confusion with some vendor's /bin/sh fc
  370. ### builtin.
  371. ###
  372. ###    xlf : IBM / AIX
  373. ###   cf77 : Cray / Unicos
  374. ###    g77 : GNU Fortran (someday...)
  375. ###     fc : Convex
  376. ###
  377. ### I don't think the Cray compiler will ever work like f2c...
  378.  
  379. if $use_f2c; then
  380.   true
  381. else
  382.   AC_CHECK_PROGS(F77, xlf cf77 f77 g77 fc)
  383.  
  384.   # If it looks like we have a Fortran compiler, try to determine
  385.   # whether it might be compatible with f2c.
  386.  
  387.   if test -n "$F77"; then
  388.     AC_MSG_CHECKING([$F77/f2c compatibility])
  389.     export F77
  390.     export CC
  391.     tmpdef=`sh $srcdir/f2c-compat.sh $srcdir/flibs.sh`
  392.     status=$?
  393.     if test $status -eq 0; then
  394.       AC_MSG_RESULT([yes])
  395.       if test "$tmpdef" = '-DF77_APPEND_UNDERSCORE=1'; then
  396.         AC_DEFINE(F77_APPEND_UNDERSCORE, 1)
  397.       fi
  398.     else
  399.       AC_MSG_RESULT([no])
  400.       F77=
  401.     fi
  402.   fi
  403. fi
  404.  
  405. ### If we can't find a Fortran compiler, or if it looks like it isn't
  406. ### compatible with f2c, try to find f2c.
  407.  
  408. if test -z "$F77"; then
  409.   AC_CHECK_PROG(F2C, f2c, f2c, [])
  410. fi
  411.  
  412. if test -z "$F2CFLAGS"; then
  413.   F2CFLAGS=
  414. fi
  415.  
  416. if test -z "$FFLAGS"; then
  417.   FFLAGS="-O"
  418.   AC_MSG_RESULT([defining FFLAGS to be $FFLAGS])
  419. fi
  420.  
  421. if test -n "$F77"; then
  422.   export F77
  423.   FLIBS=`sh $srcdir/flibs.sh`
  424.   AC_MSG_RESULT([defining FLIBS to be $FLIBS])
  425.   DOT_C_FROM_DOT_F_CMD=
  426.   DOT_O_FROM_DOT_F_PAT=
  427. elif test -n "$F2C" || $use_f2c; then
  428.   AC_CHECK_LIB(f2c, main, FLIBS=-lf2c, [])
  429.   if test -z "$FLIBS" ; then
  430.     AC_CHECK_LIB(F77, main, FLIBS=-lF77, [])
  431.     if test -n "$FLIBS" ; then
  432.       AC_CHECK_LIB(I77, main, FLIBS="$FLIBS -lI77", [])
  433.     fi
  434.   fi
  435.   if test -z "$FLIBS" ; then
  436.     AC_MSG_WARN([I found f2c but not libf2c.a, or libF77.a and libI77.a])
  437.   fi
  438.   DOT_C_FROM_DOT_F_CMD='    cat $< | $(F2C) $(F2CFLAGS) > $(@F)'
  439.   AC_MSG_RESULT([defining DOT_C_FROM_DOT_F_CMD to be $DOT_C_FROM_DOT_F_CMD])
  440.   DOT_O_FROM_DOT_F_PAT='%.o : %.f'
  441.   AC_MSG_RESULT([defining DOT_O_FROM_DOT_F_PAT to be $DOT_O_FROM_DOT_F_PAT])
  442.   AC_DEFINE(F77_APPEND_UNDERSCORE, 1)
  443. else
  444.   AC_MSG_WARN([in order to build octave, you must have a compatible])
  445.   AC_MSG_WARN([Fortran compiler or f2c installed and in your path.])
  446.   AC_MSG_WARN([See the file INSTALL for more information.])
  447.   AC_MSG_WARN([Continuing anyway...])
  448. fi
  449.  
  450. AC_SUBST(F77)
  451. AC_SUBST(FFLAGS)
  452. AC_SUBST(FLIBS)
  453. AC_SUBST(F2C)
  454. AC_SUBST(F2CFLAGS)
  455. AC_SUBST(DOT_C_FROM_DOT_F_CMD)
  456. AC_SUBST(DOT_O_FROM_DOT_F_PAT)
  457.  
  458. ### Extract libraries and directories from FLIBS and CXXLIBS.
  459. ###
  460. ### Leave only libraries, with -lfoo converted to libfoo.a:
  461.  
  462. changequote(,)dnl
  463. FLIB_LIST=`echo " $FLIBS " | sed -e 's/ -Xlinker *[^ ]*/ /g' \
  464.     -e 's/ -L *[^ ]*/ /g' \
  465.     -e 's/ -l *\([^ ]*\)/ lib\1.a/g' -e 's/ -u *[^ ]*/ /g' \
  466.     -e 's/ [^ ]*\.o//g' \
  467.     -e 's/^ *//' -e 's/ *$//' -e 's/  */:/g'`
  468.  
  469. CXXLIB_LIST=`echo " $CXXLIBS " | sed -e 's/ -Xlinker *[^ ]*/ /g' \
  470.     -e 's/ -L *[^ ]*/ /g' \
  471.     -e 's/ -l *\([^ ]*\)/ lib\1.a/g' -e 's/ -u *[^ ]*/ /g' \
  472.     -e 's/ [^ ]*\.o//g' \
  473.     -e 's/^ *//' -e 's/ *$//' -e 's/  */:/g'`
  474.  
  475. ### Leave only directories where libraries might be found:
  476.  
  477. FLIB_PATH=`echo " $FLIBS " | sed \
  478.     -e 's/ /  /g' -e 's/ -Xlinker *[^ ]*/ /g' \
  479.     -e 's/ -L *\([^ ]*\)/ \1/g' -e 's, /[^ ]*\.a , ,g' \
  480.     -e 's/ -l *[^ ]*/ /g' -e 's/ -u *[^ ]*/ /g' \
  481.     -e 's/ [^ ]*\.o//g' \
  482.     -e 's/^ *//' -e 's/ *$//' -e 's/  */:/g'`
  483.  
  484. CXXLIB_PATH=`echo " $CXXLIBS " | sed -e 's/ -Xlinker *[^ ]*/ /g' \
  485.     -e 's/ -L *\([^ ]*\)/ \1/g' -e 's, /[^ ]*\.a , ,g' \
  486.     -e 's/ /  /g' -e 's/ -Xlinker *[^ ]*/ /g' \
  487.     -e 's/ -l *[^ ]*/ /g' -e 's/ -u *[^ ]*/ /g' \
  488.     -e 's/ [^ ]*\.o//g' \
  489.     -e 's/^ *//' -e 's/ *$//' -e 's/  */:/g'`
  490. changequote([,])dnl
  491.  
  492. AC_MSG_RESULT([defining FLIB_LIST to be $FLIB_LIST])
  493. AC_MSG_RESULT([defining FLIB_PATH to be $FLIB_PATH])
  494.  
  495. AC_MSG_RESULT([defining CXXLIB_LIST to be $CXXLIB_LIST])
  496. AC_MSG_RESULT([defining CXXLIB_PATH to be $CXXLIB_PATH])
  497.  
  498. AC_SUBST(FLIB_LIST)
  499. AC_SUBST(FLIB_PATH)
  500.  
  501. AC_SUBST(CXXLIB_LIST)
  502. AC_SUBST(CXXLIB_PATH)
  503.  
  504. ### Checks for header files.
  505.  
  506. AC_HEADER_STDC
  507. AC_CHECK_HEADERS(assert.h float.h limits.h memory.h pwd.h stdlib.h)
  508. AC_CHECK_HEADERS(string.h varargs.h unistd.h floatingpoint.h)
  509. AC_CHECK_HEADERS(sys/utsname.h sys/time.h sys/fcntl.h)
  510. AC_CHECK_HEADERS(sys/ttold.h sys/ptem.h sys/select.h sys/resource.h)
  511. AC_HEADER_DIRENT
  512. AC_TIME_WITH_SYS_TIME
  513.  
  514. ### Use sgtty on Ultrix so that using DEC Migrate to convert a Mips
  515. ### binary to an Alpha binary will work.  Also on Alpha/OSF to avoid
  516. ### a readline bug.
  517.  
  518. case "$canonical_host_type" in
  519.   mips-dec-ultrix* | alpha-dec-osf*)
  520.     AC_CHECK_HEADER(sgtty.h, [AC_DEFINE(HAVE_SGTTY_H, 1)], [])
  521.  
  522.     if test "$ac_cv_header_sgtty_h" = no; then
  523.       AC_CHECK_HEADERS(termios.h termio.h sgtty.h, [break], [])
  524.     fi
  525.   ;;
  526.   *)
  527.     AC_CHECK_HEADERS(termios.h termio.h sgtty.h, [break], [])
  528.   ;;
  529. esac
  530.  
  531. if test "$ac_cv_header_termios_h" = yes \
  532.     || test "$ac_cv_header_termio_h" = yes \
  533.     || test "$ac_cv_header_sgtty_h" = yes; then
  534.   true
  535. else
  536.   AC_MSG_ERROR([I couldn't find termios.h, termio.h, or sgtty.h!])
  537. fi
  538.  
  539. ### Checks for functions.
  540.  
  541. AC_CHECK_FUNCS(setvbuf getcwd gethostname bzero bcopy rindex vfprintf vsprintf)
  542. AC_CHECK_FUNCS(stricmp strnicmp strcasecmp strncasecmp strerror atexit)
  543. AC_CHECK_FUNCS(on_exit tempnam memmove putenv gettimeofday getrusage)
  544.  
  545. dnl Would like to get rid of this cruft, and just have
  546. dnl
  547. dnl   AC_CHECK_FUNCS(finite isnan isinf)
  548. dnl
  549. dnl instead, but that used to fail on some systems...
  550. dnl
  551. dnl Also just using AC_CHECK_FUNCS doesn't seem to work to find isinf
  552. dnl and isnan on Linux systems, so we use AC_CHECK_FUNC, and if that
  553. dnl fails, we try again by including math.h and invoking the function
  554. dnl with an argument. 
  555.  
  556. ### Check to see if we have IEEE math functions, and if so, which ones.
  557. ###
  558. ### For Linux: add -mieee-fp flag to CFLAGS when checking for IEEE FP
  559. ### functions, otherwise we may not find them.
  560. ###
  561. ### Also check for some additional trig functions that aren't ANSI but
  562. ### are often available.  If they are missing, we try to replace them
  563. ### with functions from the BSD/NET2 math library.
  564.  
  565. AC_CHECK_LIB(sunmath, main)
  566.  
  567. dnl This is bogus.  We shouldn't have to explicitly add libc too!
  568.  
  569. case "$canonical_host_type" in
  570.   *-*-linux*)
  571.     AC_CHECK_LIB(m, main, , , -lc)
  572.   ;;
  573.   *)
  574.     AC_CHECK_LIB(m, main)
  575.   ;;
  576. esac
  577.  
  578. XCFLAGS="$CFLAGS"
  579. CFLAGS="$CFLAGS $GCC_IEEE_FP_FLAG"
  580.  
  581. ### Inf and NaN don't work with gcc on the Alpha yet.  I am also told
  582. ### that they don't work on m68k HP sytems either.
  583.  
  584. case "$canonical_host_type" in
  585.   alpha-dec-osf* | m68k-hp-hpux*)
  586.   ;;
  587.   *)
  588.     AC_CHECK_FUNCS(finite isnan isinf infinity quiet_nan)
  589.   ;;
  590. esac
  591.  
  592. ### Check for nonstandard but common math functions that we need.
  593.  
  594. AC_CHECK_FUNCS(acosh asinh atanh erf erfc lgamma)
  595.  
  596. AC_MSG_CHECKING([for signgam declaration in math.h])
  597. AC_TRY_LINK([#include <math.h>],
  598.   [int foo = signgam + 1;],
  599.   AC_MSG_RESULT(yes)
  600.   AC_DEFINE(SIGNGAM_DECLARED, 1),
  601.   AC_MSG_RESULT(no))
  602.  
  603. CFLAGS="$XCFLAGS"
  604.  
  605. ### Checks for OS specific cruft.
  606.  
  607. AC_STRUCT_TM
  608. AC_FUNC_SETVBUF_REVERSED
  609. TERMLIBS=""
  610. for termlib in termcap terminfo curses termlib ; do
  611.   AC_CHECK_LIB(${termlib}, main, [TERMLIBS="${TERMLIBS} -l${termlib}"])
  612.   case "${TERMLIBS}" in
  613.     *-l${termlib}*)
  614.       AC_MSG_RESULT([defining TERMLIBS to be $TERMLIBS])
  615.       break
  616.     ;;
  617.   esac
  618. done
  619.  
  620. AC_MSG_CHECKING([for struct exception in math.h])
  621. AC_TRY_LINK([#include <math.h>],
  622.   [struct exception *x; x->type; x->name;],
  623.   AC_MSG_RESULT(yes)
  624.   AC_DEFINE(EXCEPTION_IN_MATH, 1),
  625.   AC_MSG_RESULT(no))
  626.  
  627. AC_SUBST(TERMLIBS)
  628.  
  629. ### Signal stuff.
  630.  
  631. AC_TYPE_SIGNAL
  632. AC_DECL_SYS_SIGLIST
  633. AC_MSG_CHECKING([for sys_siglist variable])
  634. AC_TRY_LINK([#include <stdio.h>],
  635.   [extern char *sys_siglist[]; printf ("%s\n", sys_siglist[1]);],
  636.   AC_MSG_RESULT(yes)
  637.   AC_DEFINE(HAVE_SYS_SIGLIST, 1),
  638.   AC_MSG_RESULT(no))
  639.  
  640. ### Define VOID_SIGHANDLER for readline.
  641.  
  642. case "$RETSIGTYPE" in
  643.   int)
  644.   ;;
  645.   *)
  646.     VOID_SIGHANDLER="-DVOID_SIGHANDLER=1"
  647.     AC_MSG_RESULT([defining VOID_SIGHANDLER to be 1])
  648.   ;;
  649. esac
  650. AC_SUBST(VOID_SIGHANDLER)
  651.  
  652. ### Checks for other programs used for building, testing, installing,
  653. ### and running Octave.
  654. ###
  655. ### For now, don't define LEXLIB to be -lfl -- we don't use anything in
  656. ### it, and it might not be installed.
  657. ###
  658. ### Also make sure that we generate an interactive scanner if we are
  659. ### using flex.
  660.  
  661. AC_PROG_LEX
  662. case "$LEX" in
  663.   flex*)
  664.     LFLAGS="-t -I"
  665.     AC_MSG_RESULT([defining LFLAGS to be $LFLAGS])
  666.     LEXLIB=
  667.   ;;
  668.   *)
  669.     LFLAGS="-t"
  670.     AC_MSG_RESULT([defining LFLAGS to be $LFLAGS])
  671.     AC_MSG_WARN([I didn't find flex, but that's only a problem])
  672.     AC_MSG_WARN([if you need to reconstruct lex.cc])
  673.   ;;
  674. esac
  675. AC_SUBST(LFLAGS)
  676.  
  677. AC_PROG_YACC
  678. case "$YACC" in
  679.   bison*)
  680.   ;;
  681.   *)
  682.     AC_MSG_WARN([I didn't find bison, but that's only a problem])
  683.     AC_MSG_WARN([if you need to reconstruct parse.cc])
  684.   ;;
  685. esac
  686.  
  687. AC_PROG_RANLIB
  688.  
  689. AC_CHECK_PROG(RUNTEST, runtest, runtest, [])
  690. AC_CHECK_PROG(EXPECT, expect, expect, [])
  691. if test -z "$EXPECT" ; then
  692.   RUNTEST=
  693. fi
  694. AC_SUBST(RUNTEST)
  695.  
  696. AC_PROG_INSTALL
  697.  
  698. AC_CHECK_PROG(GNUPLOT_BINARY, gnuplot, gnuplot, [])
  699. if test -z "$GNUPLOT_BINARY"; then
  700.   AC_MSG_WARN([I didn't find gnuplot.  It isn't necessary to have gnuplot])
  701.   AC_MSG_WARN([installed, but you won't be able to use any of Octave's])
  702.   AC_MSG_WARN([plotting commands without it.])
  703.   AC_MSG_WARN([])
  704.   AC_MSG_WARN([If gnuplot is installed but it isn't in your path, you can])
  705.   AC_MSG_WARN([tell Octave where to find it by typing the command])
  706.   AC_MSG_WARN([])
  707.   AC_MSG_WARN([gnuplot_binary = "/full/path/to/gnuplot/binary"])
  708.   AC_MSG_WARN([])
  709.   AC_MSG_WARN([at the Octave prompt.])
  710. fi
  711.  
  712. AC_CHECK_PROGS(DEFAULT_PAGER, less more page pg, [])
  713. if test -z "$DEFAULT_PAGER"; then
  714.   AC_MSG_WARN([I couldn't find `less', `more', `page', or `pg'])
  715. elif test "$DEFAULT_PAGER" = less; then
  716.   DEFAULT_PAGER="less -e"
  717.   AC_MSG_RESULT([defining DEFAULT_PAGER to be $DEFAULT_PAGER])
  718. fi
  719.  
  720. ### Even though we include config.h in most files, some need to be
  721. ### compiled with the -D options on the compiler command line.  Use
  722. ### UGLY_DEFS for that.
  723.  
  724. AC_OUTPUT_MAKE_DEFS
  725. UGLY_DEFS="$DEFS"
  726. AC_MSG_RESULT([defining UGLY_DEFS to be $UGLY_DEFS])
  727. AC_SUBST(UGLY_DEFS)
  728.  
  729. ### Maybe add -Wall to compiler flags now that we're done feature
  730. ### testing. 
  731. ###
  732. ### To get gcc and g++ to be really picky, try these adding these
  733. ### options to CFLAGS and CXXFLAGS along with -Wall:
  734. ###
  735. ###   -ansi
  736. ###   -pedantic
  737. ###   -Wwrite-strings
  738. ###   -Wid-clash-31
  739. ###   -Wpointer-arith
  740. ###   -Wcast-qual
  741. ###   -Wenum-clash
  742. ###   -Wcast-align
  743. ###   -Wtraditional
  744. ###   -Wstrict-prototypes
  745. ###   -Wmissing-prototypes
  746. ###   -Wnested-externs
  747. ###   -Woverloaded-virtual
  748. ###   -Winline
  749. ###   -felide-constructors
  750. ###   -fnonnull-objects
  751.  
  752. if $ADD_CXX_WALL; then
  753.   CXXFLAGS="$CXXFLAGS -Wall"
  754.   AC_MSG_RESULT([adding -Wall to CXXFLAGS])
  755. fi
  756. if $ADD_CC_WALL; then
  757.   CFLAGS="$CFLAGS -Wall"
  758.   AC_MSG_RESULT([adding -Wall to CFLAGS])
  759. fi
  760.  
  761. ### Do the substitutions in all the Makefiles.
  762.  
  763. define([tmpA], [Makefile octMakefile Makeconf])dnl
  764. define([tmpB], [libcruft/Makefile libcruft/Makerules])dnl
  765. define([tmpC], [liboctave/Makefile src/Makefile dld/Makefile])dnl
  766. define([tmpD], [info/Makefile readline/Makefile readline/doc/Makefile])dnl
  767. define([tmpE], [readline/examples/Makefile doc/Makefile])dnl
  768. define([tmpF], [test/Makefile kpathsea/Makefile])dnl
  769. define([srcdirs], [tmpA tmpB tmpC tmpD tmpE tmpF])dnl
  770.  
  771. define([tmpa], [libcruft/blas/Makefile libcruft/balgen/Makefile])dnl
  772. define([tmpb], [libcruft/dassl/Makefile libcruft/eispack/Makefile])dnl
  773. define([tmpc], [libcruft/fftpack/Makefile libcruft/fsqp/Makefile])dnl
  774. define([tmpd], [libcruft/lapack/Makefile libcruft/linpack/Makefile])dnl
  775. define([tmpe], [libcruft/minpack/Makefile libcruft/misc/Makefile])dnl
  776. define([tmpf], [libcruft/npsol/Makefile libcruft/odepack/Makefile])dnl
  777. define([tmpg], [libcruft/qpsol/Makefile libcruft/quadpack/Makefile])dnl
  778. define([tmph], [libcruft/ranlib/Makefile libcruft/slatec-fn/Makefile])dnl
  779. define([tmpi], [libcruft/villad/Makefile])dnl
  780.  
  781. define([cruftdirs], [tmpa tmpb tmpc tmpd tmpe tmpf tmpg tmph tmpi])dnl
  782. define([tmpSA], [scripts/Makefile scripts/control/Makefile])dnl
  783. define([tmpSB], [scripts/general/Makefile scripts/image/Makefile])
  784. define([tmpSC], [scripts/linear-algebra/Makefile])dnl
  785. define([tmpSD], [scripts/miscellaneous/Makefile scripts/plot/Makefile])dnl
  786. define([tmpSE], [scripts/polynomial/Makefile scripts/set/Makefile])dnl
  787. define([tmpSF], [scripts/signal/Makefile scripts/special-matrix/Makefile])dnl
  788. define([tmpSG], [scripts/startup/Makefile scripts/statistics/Makefile])dnl
  789. define([tmpSH], [scripts/elfun/Makefile scripts/specfun/Makefile])dnl
  790. define([tmpSI], [scripts/strings/Makefile])dnl
  791. define([mdirs], [tmpSA tmpSB tmpSC tmpSD tmpSE tmpSF tmpSG tmpSH tmpSI])dnl
  792.  
  793. AC_OUTPUT([srcdirs cruftdirs mdirs])
  794.