dnl configure.in
dnl
dnl Process this file with autoconf to produce a configure script.
dnl
dnl Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
dnl               2002, 2003, 2004, 2005, 2006, 2007 John W. Eaton
### 
### This file is part of Octave.
### 
### Octave 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 3 of the License, or (at
### your option) any later version.
### 
### Octave is distributed in the hope that it will be useful, but WITHOUT
### ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
### FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
### for more details.
### 
### You should have received a copy of the GNU General Public License
### along with Octave; see the file COPYING.  If not, see
### <http://www.gnu.org/licenses/>.

### Preserve CFLAGS and CXXFLAGS from the environment before doing
### anything else because we don't know which macros might call
### AC_PROG_CC or AC_PROG_CXX.

EXTERN_CFLAGS="$CFLAGS"
EXTERN_CXXFLAGS="$CXXFLAGS"

AC_INIT
AC_REVISION($Revision: 1.603 $)
AC_PREREQ(2.57)
AC_CONFIG_SRCDIR([src/octave.cc])
AC_CONFIG_HEADER(config.h)

OCTAVE_HOST_TYPE

AC_DEFINE(OCTAVE_SOURCE, 1, [Define if this is Octave.])
  
dnl FIXME -- we should probably only generate this file if it is missing.
### Produce unistd.h for MSVC target, this simplifies changes in
### Octave source tree and avoid problems with lex-generated code.
case "$canonical_host_type" in
  *-*-msdosmsvc)
    AC_MSG_NOTICE([Generating replacement for <unistd.h> for MSVC])
    cat << \EOF > unistd.h
/* File generated by configure script. */
#include <direct.h>
#include <io.h>
#include <process.h>
EOF
    CPPFLAGS="-I. $CPPFLAGS"
    ;;
esac

AC_GNU_SOURCE

AC_AIX
AC_MINIX
AC_ISC_POSIX

### Path separator.
sepchar=:
AC_ARG_WITH(sepchar,
  [AS_HELP_STRING([--with-sepchar=<char>],
     [use <char> as the path separation character])])
case $with_sepchar in
  yes | "")
    case "$canonical_host_type" in
      *-*-mingw* | *-*-msdosmsvc)
	sepchar=';'
        ;;
      esac
    ;;
  no)
    AC_MSG_ERROR([You are required to define a path separation character])
    ;;
  *)
    sepchar=$with_sepchar
    ;;
esac
AC_SUBST(sepchar)
AC_DEFINE_UNQUOTED(SEPCHAR, ['$sepchar'], [Define this to be the path separator for your system, as a character constant.])
AC_DEFINE_UNQUOTED(SEPCHAR_STR, ["$sepchar"], [Define this to the path separator, as a string.])

### some defaults

OCTAVE_SET_DEFAULT(man1dir, '$(mandir)/man1')
OCTAVE_SET_DEFAULT(man1ext, '.1')
OCTAVE_SET_DEFAULT(infofile, '$(infodir)/octave.info')
OCTAVE_SET_DEFAULT(octincludedir, '$(includedir)/octave-$(version)')
OCTAVE_SET_DEFAULT(fcnfiledir, '$(datadir)/octave/$(version)/m')
OCTAVE_SET_DEFAULT(localfcnfiledir, '$(datadir)/octave/site/m')
OCTAVE_SET_DEFAULT(localapifcnfiledir,
  '$(datadir)/octave/site/$(api_version)/m')
OCTAVE_SET_DEFAULT(localverfcnfiledir, '$(datadir)/octave/$(version)/site/m')
OCTAVE_SET_DEFAULT(octlibdir, '$(libdir)/octave-$(version)')
OCTAVE_SET_DEFAULT(archlibdir,
  '$(libexecdir)/octave/$(version)/exec/$(canonical_host_type)')
OCTAVE_SET_DEFAULT(localarchlibdir,
  '$(libexecdir)/octave/site/exec/$(canonical_host_type)')
OCTAVE_SET_DEFAULT(localapiarchlibdir,
  '$(libexecdir)/octave/$(api_version)/site/exec/$(canonical_host_type)')
OCTAVE_SET_DEFAULT(localverarchlibdir,
  '$(libexecdir)/octave/$(version)/site/exec/$(canonical_host_type)')
OCTAVE_SET_DEFAULT(octfiledir,
  '$(libexecdir)/octave/$(version)/oct/$(canonical_host_type)')
OCTAVE_SET_DEFAULT(localoctfiledir,
  '$(libexecdir)/octave/site/oct/$(canonical_host_type)')
OCTAVE_SET_DEFAULT(localapioctfiledir,
  '$(libexecdir)/octave/site/oct/$(api_version)/$(canonical_host_type)')
OCTAVE_SET_DEFAULT(localveroctfiledir,
  '$(libexecdir)/octave/$(version)/site/oct/$(canonical_host_type)')
OCTAVE_SET_DEFAULT(imagedir, '$(datadir)/octave/$(version)/imagelib')

### Make configure args available for other uses.

config_opts=$ac_configure_args
AC_SUBST(config_opts)

### Make it possible to have Octave's array and matrix classes do bounds
### checking on element references.  This slows some operations down a
### bit, so it is turned off by default.

BOUNDS_CHECKING=false
AC_ARG_ENABLE(bounds-check,
  [AS_HELP_STRING([--enable-bounds-check],
     [bounds checking for indexing in internal array classes (default is no)])],
  [if test "$enableval" = yes; then BOUNDS_CHECKING=true; fi], [])
if $BOUNDS_CHECKING; then
  AC_DEFINE(BOUNDS_CHECKING, 1, [Define to use internal bounds checking.])
fi

### If possible, use a 64-bit integer type for array dimensions and indexing.

USE_64_BIT_IDX_T=false
OCTAVE_IDX_TYPE=int
AC_ARG_ENABLE(64,
  [AS_HELP_STRING([--enable-64],
     [(EXPERIMENTAL) use 64-bit integers for array dimensions and indexing])],
  [if test "$enableval" = yes; then USE_64_BIT_IDX_T=true; fi], [])
if $USE_64_BIT_IDX_T; then
  AC_CHECK_SIZEOF(void *)
  AC_CHECK_SIZEOF(int)
  AC_CHECK_SIZEOF(long)
  if test $ac_cv_sizeof_void_p -eq 8; then
    if test $ac_cv_sizeof_int -eq 8; then
      OCTAVE_IDX_TYPE=int
    elif test $ac_cv_sizeof_long -eq 8; then
      OCTAVE_IDX_TYPE=long
      AC_DEFINE(IDX_TYPE_LONG, 1, [Define to 1 if octave index type is long])
    else
      warn_64_bit="no suitable type found for octave_idx_type so disabling 64-bit features"
      AC_MSG_WARN($warn_64_bit)
      USE_64_BIT_IDX_T=false
    fi
  else
    warn_64_bit="pointers are not 64-bits wide so disabling 64-bit features"
    AC_MSG_WARN($warn_64_bit)
    USE_64_BIT_IDX_T=false
  fi
fi
AC_SUBST(OCTAVE_IDX_TYPE)
if $USE_64_BIT_IDX_T; then
  AC_DEFINE(USE_64_BIT_IDX_T, 1, [Define if using 64-bit integers for array dimensions and indexing])
fi
AC_SUBST(USE_64_BIT_IDX_T)

### It seems that there are some broken inline assembly functions in
### the GNU libc.  Since I'm not sure how to test whether we are using
### GNU libc, just disable them for all platforms.

AC_MSG_NOTICE([defining __NO_MATH_INLINES avoids buggy GNU libc exp function])
AC_DEFINE(__NO_MATH_INLINES, 1, [Define if your version of GNU libc has buggy inline assembly code for math functions like exp.])

### See which C++ compiler to use (we expect to find g++).

AC_PROG_CXX
AC_PROG_CXXCPP

### Do special things for g++.

gxx_version=`$CXX -v 2>&1 | grep "^.*g.. version" | \
  sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//' -e 's/ .*//'`

case "$gxx_version" in
  1.* | 2.[[012345678]].*)
    AC_MSG_ERROR([g++ version $gxx_version will probably fail to compile Octave]
)
  ;;
  2.9*)
    warn_gxx_version="g++ version $gxx_version is likely to cause problems"
    AC_MSG_WARN($warn_gxx_version)
  ;;
esac

CXX_VERSION=
if test -n "$gxx_version"; then
  CXX_VERSION="$gxx_version"
fi
AC_SUBST(CXX_VERSION)

OCTAVE_CXX_NEW_FRIEND_TEMPLATE_DECL
OCTAVE_CXX_ISO_COMPLIANT_LIBRARY
OCTAVE_CXX_BROKEN_REINTERPRET_CAST

### See which C compiler to use (we expect to find gcc).

AC_PROG_CC
AC_PROG_CPP
AC_PROG_GCC_TRADITIONAL

### Do special things for gcc.

gcc_version=`$CC -v 2>&1 | grep "^.*gcc version" | \
  sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//'`
case "$gcc_version" in
  2.*)
    if test -z "$LDFLAGS"; then
      LDFLAGS="-g"
      AC_MSG_NOTICE([defining LDFLAGS to be $LDFLAGS])
    fi
  ;;
  1.*)
    warn_gcc_version="gcc version $gcc_version is likely to cause problems"
    AC_MSG_WARN($warn_gcc_version)
  ;;
esac

CC_VERSION=
if test -n "$gcc_version"; then
  CC_VERSION="$gcc_version"
fi
AC_SUBST(CC_VERSION)

### The flag to create dependency varies depending on the compier.

# Assume GCC.
INCLUDE_DEPS=true
DEPEND_FLAGS="-M"
DEPEND_EXTRA_SED_PATTERN=""
if test "$GCC" = yes; then
  true
else
  case "$canonical_host_type" in
    sparc-sun-solaris2* | i386-pc-solaris2*)
      DEPEND_FLAGS="-xM1"
      DEPEND_EXTRA_SED_PATTERN="-e '/\/opt\/SUNWspro/d'"
    ;;
    *-*-msdosmsvc)
    ;;
    *)
      INCLUDE_DEPS=false
    ;;
  esac
fi
AC_SUBST(INCLUDE_DEPS)
AC_SUBST(DEPEND_FLAGS)
AC_SUBST(DEPEND_EXTRA_SED_PATTERN)

AC_PATH_X
if test "$have_x"; then
  AC_DEFINE(HAVE_X_WINDOWS, 1, [Define if you have X11])

  X11_INCFLAGS="$x_includes"
  AC_SUBST(X11_INCFLAGS)

  AC_CHECK_LIB(X11, XrmInitialize, [X11_LIBS=-lX11], [X11_LIBS=])
  AC_SUBST(X11_LIBS)
fi

### On MacOSX system the Carbon framework is used to determine ScreenSize
OCTAVE_HAVE_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>], [CGMainDisplayID ()],
  [have_framework_carbon="yes"], [have_framework_carbon="no"])
if test $have_framework_carbon = "yes"; then
  AC_DEFINE(HAVE_FRAMEWORK_CARBON, 1, [Define if framework CARBON is available.])
  LIBS="$LIBS -Wl,-framework -Wl,Carbon"
  AC_MSG_NOTICE([adding -Wl,-framework -Wl,Carbon to LIBS])
fi

### On Intel systems with gcc, we may need to compile with -mieee-fp
### and -ffloat-store to get full support for IEEE floating point.
###
### On Alpha/OSF systems, we need -mieee.

ieee_fp_flag=
case "$canonical_host_type" in
  ## Keep this pattern first, so that it is preferred over the
  ## following pattern for x86.
  *-*-msdosmsvc)
    CXXFLAGS="$CXXFLAGS -EHs -MD"
    CFLAGS="$CFLAGS -MD"
  ;;
  i[[3456789]]86-*-*)
    if test "$GCC" = yes; then
      OCTAVE_CC_FLAG(-mieee-fp, [
        ieee_fp_flag=-mieee-fp
        XTRA_CFLAGS="$XTRA_CFLAGS -mieee-fp"
        AC_MSG_NOTICE([adding -mieee-fp to XTRA_CFLAGS])])

###      OCTAVE_CC_FLAG(-ffloat-store, [
###        float_store_flag=-ffloat-store
###        XTRA_CFLAGS="$XTRA_CFLAGS -ffloat-store"
###        AC_MSG_RESULT([adding -ffloat-store to XTRA_CFLAGS])])
    fi
    if test "$GXX" = yes; then
      OCTAVE_CXX_FLAG(-mieee-fp, [
	ieee_fp_flag=-mieee-fp
	XTRA_CXXFLAGS="$XTRA_CXXFLAGS -mieee-fp"
	AC_MSG_NOTICE([adding -mieee-fp to XTRA_CXXFLAGS])])

###      OCTAVE_CXX_FLAG(-ffloat-store, [
###        float_store_flag=-ffloat-store
###        XTRA_CXXFLAGS="$XTRA_CXXFLAGS -ffloat-store"
###        AC_MSG_RESULT([adding -ffloat-store to XTRA_CXXFLAGS])])
    fi
  ;;
  alpha*-*-*)
    if test "$GCC" = yes; then
      OCTAVE_CC_FLAG(-mieee, [
	ieee_fp_flag=-mieee
	XTRA_CFLAGS="$XTRA_CFLAGS -mieee"
	AC_MSG_NOTICE([adding -mieee to XTRA_CFLAGS])])
    else
      OCTAVE_CC_FLAG(-ieee, [
	ieee_fp_flag=-ieee
	XTRA_CFLAGS="$XTRA_CFLAGS -ieee"
	AC_MSG_NOTICE([adding -ieee to XTRA_CFLAGS])])
    fi
    if test "$GXX" = yes; then
      OCTAVE_CXX_FLAG(-mieee, [
	ieee_fp_flag=-mieee
	XTRA_CXXFLAGS="$XTRA_CXXFLAGS -mieee"
	AC_MSG_NOTICE([adding -mieee to XTRA_CXXFLAGS])])
    else
      OCTAVE_CXX_FLAG(-ieee, [
	ieee_fp_flag=-ieee
	XTRA_CXXFLAGS="$XTRA_CXXFLAGS -ieee"
	AC_MSG_NOTICE([adding -ieee to XTRA_CXXFLAGS])])
    fi
  ;;
  *ibm-aix4*)
    OCTAVE_CC_FLAG(-mminimal-toc, [
      XTRA_CFLAGS="$XTRA_CFLAGS -mminimal-toc"])

    OCTAVE_CXX_FLAG(-mminimal-toc, [
      XTRA_CXXFLAGS="$XTRA_CXXFLAGS -mminimal-toc"])
  ;;
esac

AC_SUBST(XTRA_CFLAGS)
AC_SUBST(XTRA_CXXFLAGS)

### Use -static if compiling on Alpha OSF/1 1.3 systems.

case "$canonical_host_type" in
  alpha*-dec-osf1.3)
    LD_STATIC_FLAG=-static
  ;;
esac
if test -n "$LD_STATIC_FLAG"; then
  AC_MSG_NOTICE([defining LD_STATIC_FLAG to be $LD_STATIC_FLAG])
fi
AC_SUBST(LD_STATIC_FLAG)

### Defaults for cross compiling.  BUILD_CC and BUILD_CXX are
### the compilers that we use for building tools on the build system.
### For now, we assume that the only cross compiling we can do is
### with gcc on a Unixy system, but the dedicated hacker can override these.

if test "$cross_compiling" = yes; then
  BUILD_CC="gcc"
  BUILD_CFLAGS="-O2 -g"
  BUILD_CXX="g++"
  BUILD_CXXFLAGS="-O2 -g"
  BUILD_LDFLAGS=""
  BUILD_EXEEXT=""
else
  BUILD_CC='$(CC)'
  BUILD_CFLAGS='$(CFLAGS)'
  BUILD_CXX='$(CXX)'
  BUILD_CXXFLAGS='$(CXXFLAGS)'
  BUILD_LDFLAGS='$(LDFLAGS)'
  case "$canonical_host_type" in
    sparc-sun-solaris2*)
      if test "$GCC" != yes; then
        ## The Sun C++ compiler never seems to complete compiling
	## gendoc.cc unless we reduce the optimization level...
	BUILD_CXXFLAGS="-g -O1"
      fi
    ;;
  esac
  BUILD_EXEEXT='$(EXEEXT)'
fi

AC_ARG_VAR(BUILD_CC, [build system C compiler (used if cross compiling)])
AC_ARG_VAR(BUILD_CFLAGS, [build system C compiler flags (used if cross compiling)])
AC_ARG_VAR(BUILD_CXX, [build system C++ compiler (used if cross compiling)])
AC_ARG_VAR(BUILD_CXXFLAGS, [build system C++ compiler flags (used if cross compiling)])
AC_ARG_VAR(BUILD_LDFLAGS, [build system C++ compiler link flags (used if cross compiling)])
AC_ARG_VAR(BUILD_EXEEXT, [build system executable extension (used if cross compiling)])

dnl This is bogus.  We shouldn't have to explicitly add libc too!

### Look for math library.  If found, this will add -lm to LIBS.

case "$canonical_host_type" in
  *-*-nextstep*)
  ;;  
  *-*-linux*)
    AC_CHECK_LIB(m, sin, , , -lc)
  ;;
  *)
    AC_CHECK_LIB(m, sin)
  ;;
esac

### Check for the QHull library
AC_SUBST(QHULL_LIBS)
AC_CHECK_HEADER(qhull/qhull_a.h, have_qhull=yes, have_qhull=no)
if test "$have_qhull" = yes; then
  AC_CHECK_LIB(qhull, qh_qhull, have_qhull=yes, have_qhull=no)
  if test "$have_qhull" != yes; then
    AC_CHECK_QHULL_VERSION(have_qhull=yes, have_qhull=no)
    AC_DEFINE(NEED_QHULL_VERSION, 1, [Define if the QHull library needs a wh_version variable defined.])
  fi
  if test "$have_qhull" = yes; then
    AC_CHECK_QHULL_OK(have_qhull=yes, have_qhull=bad)
  fi
fi
if test "$have_qhull" = yes; then
  AC_DEFINE(HAVE_QHULL, 1, [Define if the QHull library is used.])
  QHULL_LIBS="-lqhull"
  TEXINFO_QHULL="@set HAVE_QHULL"
else
  if test "$have_qhull" = bad; then
    warn_qhull="Qhull library found, but seems not to work properly --- This will result in loss of functionality of some geometry functions. Please try recompiling the library with -fno-strict-aliasing."
  else
    warn_qhull="Qhull library not found --- This will result in loss of functionality of some geometry functions."
  fi
  AC_MSG_WARN($warn_qhull)
fi

AC_SUBST(TEXINFO_QHULL)

### Check for pcre/regex library.

## check for pcre-config, and if so, set CPPFLAGS appropriately
AC_CHECK_PROG(WITH_PCRE_CONFIG, pcre-config, yes, no)
if test $WITH_PCRE_CONFIG = yes ; then
  CPPFLAGS="$CPPFLAGS $(pcre-config --cflags)"
fi

## NB: no need to do separate check for pcre.h header -- checking macros is good enough
AC_CACHE_CHECK([whether pcre.h defines the macros we need], [ac_cv_pcre_h_macros_present], [
  AC_EGREP_CPP([PCRE_HAS_MACROS_WE_NEED], [
#include <pcre.h>
#if defined (PCRE_INFO_NAMECOUNT) \
  && defined (PCRE_INFO_NAMEENTRYSIZE) \
  && defined (PCRE_INFO_NAMETABLE)
PCRE_HAS_MACROS_WE_NEED
#endif], ac_cv_pcre_h_macros_present=yes, ac_cv_pcre_h_macros_present=no)])
WITH_PCRE="$ac_cv_pcre_h_macros_present"

REGEX_LIBS=

using_pcre=no
using_regex=no

if test "$WITH_PCRE" = yes; then
  if test "$WITH_PCRE_CONFIG" = yes; then
    REGEX_LIBS=$(pcre-config --libs)
  else
    REGEX_LIBS=-lpcre
  fi
  save_LIBS="$LIBS"
  LIBS="$REGEX_LIBS $LIBS"
  AC_CHECK_FUNCS(pcre_compile, [using_pcre=yes
    AC_DEFINE(HAVE_PCRE, 1, [Define if PCRE library is available.])], [
      REGEX_LIBS=
      warn_pcre="PCRE library not found.  This will result in some loss of functionality for the regular expression matching functions."
      AC_MSG_WARN($warn_pcre)])
  LIBS="$save_LIBS"
else
  warn_pcre="PCRE library not found.  This will result in some loss of functionality for the regular expression matching functions."
  AC_MSG_WARN($warn_pcre)
fi

AC_CHECK_FUNCS(regexec, [using_regex=yes], [
  AC_CHECK_LIB(regex, regexec, [using_regex=yes
    REGEX_LIBS="-lregex $REGEX_LIBS"], [
      warn_regex="regular expression functions not found.  The regular expression matching functions will be disabled."
      AC_MSG_WARN($warn_regex)])])

if test "$using_regex" = yes; then
  AC_DEFINE(HAVE_REGEX, 1, [Define if regex library is available.])
fi

AC_SUBST(REGEX_LIBS)

### Check for ZLIB library.

WITH_ZLIB=true
AC_ARG_WITH(zlib,
  [AS_HELP_STRING([--without-zlib], [don't use zlib])],
  with_zlib=$withval, with_zlib=yes)

zlib_lib=
if test "$with_zlib" = yes; then
  zlib_lib="z"
elif test "$with_zlib" != no; then
  zlib_lib="$with_zlib"
fi

ZLIB_LIBS=
WITH_ZLIB=false
if test -n "$zlib_lib"; then
  AC_CHECK_LIB($zlib_lib, gzclearerr, [
      AC_CHECK_HEADERS(zlib.h, [
	WITH_ZLIB=true
        ZLIB_LIBS="-l$zlib_lib"
        LIBS="$ZLIB_LIBS $LIBS"
        AC_DEFINE(HAVE_ZLIB, 1, [Define if ZLIB is available.])])])
fi

if $WITH_ZLIB; then
  ### Check for HDF5 library.

  WITH_HDF5=true
  AC_ARG_WITH(hdf5,
    [AS_HELP_STRING([--without-hdf5], [don't use HDF5])],
    with_hdf5=$withval, with_hdf5=yes)

  hdf5_lib=
  if test "$with_hdf5" = yes; then
    hdf5_lib="hdf5"
  elif test "$with_hdf5" != no; then
    hdf5_lib="$with_hdf5"
  fi

  HDF5_LIBS=
  WITH_HDF5=false
  if test -n "$hdf5_lib"; then
    AC_CHECK_LIB($hdf5_lib, H5Pcreate, [
      AC_CHECK_HEADERS(hdf5.h, [
        WITH_HDF5=true
        HDF5_LIBS="-l$hdf5_lib"
        LIBS="$HDF5_LIBS $LIBS"
        AC_DEFINE(HAVE_HDF5, 1, [Define if HDF5 is available.])
	AC_CHECK_LIB($hdf5_lib, H5Gget_num_objs, [
	  AC_DEFINE(HAVE_H5GGET_NUM_OBJS, 1, [Define if HDF5 has H5Gget_num_objs.])])])])
  fi

  if $WITH_HDF5; then
    case "$canonical_host_type" in
      *-*-msdosmsvc)
        OCTAVE_HDF5_DLL
        ;;
    esac
    true
  else
    warn_hdf5="HDF5 library not found.  Octave will not be able to save or load HDF5 data files."
    AC_MSG_WARN($warn_hdf5)
  fi
else
  warn_zlib="ZLIB library not found.  Octave will not be able to save or load compressed data files or HDF5 files."
  AC_MSG_WARN($warn_zlib)
fi


# Checks for FFTW header and library.

# subdirectories of libcruft to build if they aren't found on the system:
FFT_DIR="fftpack"
AC_SUBST(FFT_DIR)

# Installed fftw library, if any.
FFTW_LIBS=''
AC_SUBST(FFTW_LIBS)

AC_ARG_WITH(fftw, 
  [AS_HELP_STRING([--without-fftw],
     [use included fftpack instead of installed fftw])],
  with_fftw=$withval, with_fftw=yes)

if test "$with_fftw" = yes; then
  have_fftw3_header=no
  with_fftw3=no
  AC_CHECK_HEADER(fftw3.h, [have_fftw3_header=yes])
  if test "$have_fftw3_header" = yes; then
    AC_CHECK_LIB(fftw3, fftw_plan_dft_1d, [
      AC_CHECK_LIB(fftw3f, fftwf_plan_dft_1d, [FFTW_LIBS="-lfftw3 -lfftw3f"; with_fftw3=yes])])
  fi
fi

if test "$with_fftw" = yes && test "$with_fftw3" = yes; then
  FFT_DIR=''
  AC_DEFINE(HAVE_FFTW3, 1, [Define if the FFTW3 library is used.])
else
  warn_fftw="FFTW library not found.  Octave will use the (slower) FFTPACK library instead."
  AC_MSG_RESULT($warn_fftw)
fi

# Checks for GLPK header and library.

AC_ARG_WITH(glpk,
  [AS_HELP_STRING([--without-glpk], [don't use GLPK])],
  with_glpk=$withval, with_glpk=yes)

glpk_lib=
if test "$with_glpk" = yes; then
  glpk_lib="glpk"
elif test "$with_glpk" != no; then
  glpk_lib="$with_glpk"
fi

GLPK_LIBS=
if test -n "$glpk_lib"; then
  AC_CHECK_HEADERS([glpk/glpk.h glpk.h], [
    AC_CHECK_LIB($glpk_lib, glp_lpx_simplex, [
      GLPK_LIBS="-l$glpk_lib"
      AC_DEFINE(GLPK_PRE_4_14, 1, [Define if GLPK version is less than 4.14.])], [
        AC_CHECK_LIB($glpk_lib, _glp_lpx_simplex, [
          GLPK_LIBS="-l$glpk_lib"], [])])

    if test -n "$GLPK_LIBS"; then
      AC_DEFINE(HAVE_GLPK, 1, [Define if GLPK is available.])
    fi
    break])
fi
AC_SUBST(GLPK_LIBS)
if test -z "$GLPK_LIBS"; then
  warn_glpk="GLPK library not found.  The glpk function for solving linear programs will be disabled."
fi

# Checks for CURL header and library.

AC_ARG_WITH(curl,
  [AS_HELP_STRING([--without-curl], [don't use CURL])],
  with_curl=$withval, with_curl=yes)

curl_lib=
if test "$with_curl" = yes; then
  curl_lib="curl"
elif test "$with_curl" != no; then
  curl_lib="$with_curl"
else
  curl_missing=yes
fi

CURL_LIBS=
if test -n "$curl_lib"; then
  AC_CHECK_LIB($curl_lib, curl_easy_escape, [
    AC_CHECK_HEADERS(curl/curl.h, [
      CURL_LIBS="-l$curl_lib"
      AC_DEFINE(HAVE_CURL, 1, [Define if CURL is available.])], [
      curl_missing=yes])])
fi
AC_SUBST(CURL_LIBS)
if test "$curl_missing" = yes; then
  warn_curl="cURL library not found.  The urlread and urlwrite functions will be disabled."
fi

# GraphicsMagick++

warn_magick=
AC_CHECK_PROGS(MAGICK_CONFIG, [GraphicsMagick++-config GraphicsMagick-config])
if test -z "$MAGICK_CONFIG"; then
  warn_magick="GraphicsMagick++ config script not found.  Assuming GraphicsMagic++ library and header files are missing, so imread will not be fully functional"
else
  AC_DEFINE(HAVE_MAGICK, 1, [Define if GraphicsMagick++ is available.])
fi

# ---------------------------------------------------------------------

## libraries needed for graphics

warn_freetype=""
warn_ftgl=""

OCTAVE_OPENGL
if test -n "$OPENGL_LIBS"; then
  AC_DEFINE(HAVE_OPENGL, 1, [Define if OpenGL is available])

## ftgl (needs freetype 2)
  AC_CHECK_FT2([9.0.3],[],
    [warn_freetype="FreeType library not found. Native renderer will not have on-screen text"])
  if test -z "$warn_freetype"; then
    AC_LANG_PUSH(C++)
      save_LIBS="$LIBS"
      save_CXXFLAGS="$CXXFLAGS"
      save_CPPFLAGS="$CPPFLAGS"
      LIBS="$LIBS $OPENGL_LIBS $FT2_LIBS"
      CXXFLAGS="$CXXFLAGS $FT2_CFLAGS"
      CPPFLAGS="$CPPFLAGS $FT2_CFLAGS"
      has_ftgl_h=yes
      AC_CHECK_HEADERS([FTGL/ftgl.h ftgl.h], break, [
	AC_CHECK_HEADERS([FTGL/FTGL.h FTGL.h], [
          AC_DEFINE(HAVE_FTGL_UPPERCASE,1,[Define to 1 if you have FTGL.h or FTGL/FTGL.h])
	  break
	  ], has_ftgl_h=no)])
      if test "$has_ftgl_h" = yes; then
	AC_MSG_CHECKING([for FTGLTextureFont in -lftgl])
	LIBS="$LIBS -lftgl"
        AC_TRY_LINK([
#ifdef HAVE_FTGL_FTGL_H
#ifdef HAVE_FTGL_UPPERCASE
#include <FTGL/FTGL.h>
#include <FTGL/FTGLTextureFont.h>
#else
#include <FTGL/ftgl.h>
#endif
#elif HAVE_FTGL_H
#ifdef HAVE_FTGL_UPPERCASE
#include <FTGL.h>
#include <FTGLTextureFont.h>
#else
#include <ftgl.h>
#endif
#endif], [
FTGLTextureFont font("");], [
          OPENGL_LIBS="$OPENGL_LIBS $FT2_LIBS -lftgl"
	  LIBS="$save_LIBS"
	  CPPFLAGS="$save_CPPFLAGS"
          AC_DEFINE(HAVE_FTGL, 1, [Define to 1 if FTGL is present])
	  AC_MSG_RESULT(yes)
	  XTRA_CXXFLAGS="$XTRA_CXXFLAGS $FT2_CFLAGS"],[
	  AC_MSG_RESULT(no)
          warn_ftgl="FTGL library not found. Native renderer will not have on-screen text"
        ])
	LIBS="$save_LIBS"
	CXXFLAGS="$save_CXXFLAGS"
	CPPFLAGS="$save_CPPFLAGS"
      else
        warn_ftgl="FTGL headers not found. Native renderer will not have on-screen text"
      fi
    AC_LANG_POP(C++)
  fi
fi

GRAPHICS_LIBS=
GRAPHICS_CFLAGS=

## fltk (www.fltk.org)
AC_ARG_WITH(fltk-prefix,
        [  --with-fltk-prefix=PFX   Prefix where FLTK is installed (optional)],
        fltk_prefix="$withval",
        fltk_prefix="")
AC_ARG_WITH(fltk-exec-prefix,
        [  --with-fltk-exec-prefix=PFX Exec prefix where FLTK is installed (optional)],
        fltk_exec_prefix="$withval", 
        fltk_exec_prefix="")

if test -n "$fltk_exec_prefix"; then
  fltk_args="$fltk_args --exec-prefix=$fltk_exec_prefix"
  if test "x${FLTK_CONFIG+set}" != xset ; then
    FLTK_CONFIG="$fltk_exec_prefix/bin/fltk-config"
  fi
fi

if test -n "$fltk_prefix"; then
  fltk_args="$fltk_args --prefix=$fltk_prefix"
  if test x${FLTK_CONFIG+set} != xset ; then
    FLTK_CONFIG="$fltk_prefix/bin/fltk-config"
  fi
fi

AC_PATH_PROG(FLTK_CONFIG, fltk-config, no)

warn_fltk_config=""
warn_fltk_opengl=""

if test "$FLTK_CONFIG" = "no" ; then
  warn_fltk_config="FLTK config script not found.  Native graphics will be disabled."
else
  FLTK_CFLAGS="`$FLTK_CONFIG $fltkconf_args --use-gl --cflags`"
  FLTK_LDFLAGS="`$FLTK_CONFIG $fltkconf_args --use-gl --ldflags`"
  
  AC_MSG_CHECKING(for OpenGL support in FLTK)
  cat > conftest.cc <<EOF
  #include <FL/gl.h>
  int nothing=0;
EOF
  $CXX $CXXFLAGS $FLTK_CFLAGS -c conftest.cc || \
    warn_fltk_opengl="FLTK does not have OpenGL support.  Native graphics will be disabled."

  if test -z "$warn_fltk_opengl"; then
    AC_MSG_RESULT(yes)
    AC_DEFINE(HAVE_FLTK, 1, [Define if FLTK is available])
    GRAPHICS_CFLAGS="$FLTK_CFLAGS"
    GRAPHICS_LIBS="$FLTK_LDFLAGS"
  else
    AC_MSG_RESULT(no)
  fi
fi

AC_SUBST(GRAPHICS_CFLAGS)
AC_SUBST(GRAPHICS_LIBS)

OCTAVE_IEEE754_DATA_FORMAT

# ----------------------------------------------------------------------

OCTAVE_PROG_AR

AC_PROG_RANLIB

## Default FFLAGS is -O.
if test "x$FFLAGS" = x; then
  FFLAGS="-O"
fi

## the F77 variable, if set, overrides AC_PROG_F77 automatically
AC_PROG_F77
AC_F77_LIBRARY_LDFLAGS
AC_F77_DUMMY_MAIN
AC_F77_WRAPPERS

F77_TOLOWER=true
F77_APPEND_UNDERSCORE=true
F77_APPEND_EXTRA_UNDERSCORE=true

case "$ac_cv_f77_mangling" in
  "upper case") F77_TOLOWER=false ;;
esac
case "$ac_cv_f77_mangling" in
  "no underscore") F77_APPEND_UNDERSCORE=false ;;
esac
case "$ac_cv_f77_mangling" in
  "no extra underscore") F77_APPEND_EXTRA_UNDERSCORE=false ;;
esac

case "$canonical_host_type" in
  i[[3456789]]86-*-*)
    if test "$ac_cv_f77_compiler_gnu" = yes; then
      OCTAVE_F77_FLAG(-mieee-fp)
###      OCTAVE_F77_FLAG(-ffloat-store)
    fi
  ;;
  alpha*-*-*)
    if test "$ac_cv_f77_compiler_gnu" = yes; then
      OCTAVE_F77_FLAG(-mieee)
    else
      OCTAVE_F77_FLAG(-ieee)
      OCTAVE_F77_FLAG(-fpe1)
    fi
  ;;
  powerpc-apple-machten*)
    FFLAGS=
  ;;
esac

if test -n "$FFLAGS"; then
  AC_MSG_NOTICE([defining FFLAGS to be $FFLAGS])
fi

AC_SUBST(F77_TOLOWER)
AC_SUBST(F77_APPEND_UNDERSCORE)
AC_SUBST(F77_APPEND_EXTRA_UNDERSCORE)

if test -z "$F77"; then
  AC_MSG_WARN([in order to build octave, you must have a compatible])
  AC_MSG_WARN([Fortran compiler or wrapper script for f2c that functions])
  AC_MSG_WARN([as a Fortran compiler installed and in your path.])
  AC_MSG_ERROR([See the file INSTALL for more information.])
fi

XTRA_CRUFT_SH_LDFLAGS=
case "$canonical_host_type" in
  *-*-msdosmsvc)
    FLIBS="$FLIBS -lkernel32"
    XTRA_CRUFT_SH_LDFLAGS="-Wl,-def:cruft.def"
  ;;
esac
AC_SUBST(XTRA_CRUFT_SH_LDFLAGS)

FC=$F77
AC_SUBST(FC)

OCTAVE_F77_FLAG(-ffloat-store, [
AC_MSG_RESULT([setting F77_FLOAT_STORE_FLAG to -ffloat-store])
F77_FLOAT_STORE_FLAG=-ffloat-store
AC_SUBST(F77_FLOAT_STORE_FLAG)
])

### Checks for BLAS and LAPACK libraries:
# (Build subdirectories of libcruft if they aren't found on the system.)
sinclude(acx_blas.m4)
sinclude(acx_blas_f77_func.m4)
sinclude(acx_lapack.m4)
ACX_BLAS_WITH_F77_FUNC([], [BLAS_DIR="blas"])
ACX_LAPACK([BLAS_LIBS="$LAPACK_LIBS $BLAS_LIBS"], [LAPACK_DIR="lapack"])
AC_SUBST(BLAS_DIR)
AC_SUBST(LAPACK_DIR)

if test "x$acx_blas_f77_func_ok" = "xno"; then
  warn_blas_f77_incompatible="A BLAS library was detected but found incompatible with your Fortran 77 compiler.  The reference BLAS implementation will be used. To improve performance, consider using a different Fortran compiler or a switch like -ff2c to make your Fortran compiler use a calling convention compatible with the way your BLAS library was compiled, or use a different BLAS library."
  AC_MSG_WARN($warn_blas_f77_incompatible)
fi

QRUPDATE_LIBS=
AC_SUBST(QRUPDATE_LIBS)

# Check for the qrupdate library
AC_ARG_WITH(qrupdate,
  [AS_HELP_STRING([--without-qrupdate],
     [don't use qrupdate, disable QR & Cholesky updating functions])],
  with_qrupdate=$withval, with_qrupdate=yes)

warn_qrupdate="qrupdate not found. The QR & Cholesky updating functions will be slow."
if test "$with_qrupdate" = yes; then
  with_qrupdate=no
  if $have_fortran_compiler; then 
    AC_F77_FUNC(sqr1up)
  elif $have_f2c; then
    sqr1up=sqr1up_
  fi
  AC_CHECK_LIB(qrupdate, $sqr1up, 
    [QRUPDATE_LIBS="-lqrupdate"; with_qrupdate=yes], [], [$BLAS_LIBS $FLIBS])
  if test "$with_qrupdate" = yes; then
    AC_DEFINE(HAVE_QRUPDATE, 1, [Define if the qrupdate library is used.])
    warn_qrupdate=
  fi
fi
if test -n "$warn_qrupdate"; then
  AC_MSG_WARN($warn_qrupdate)
fi

# Check for AMD library
AMD_LIBS=
AC_SUBST(AMD_LIBS)

AC_ARG_WITH(amd,
  [AS_HELP_STRING([--without-amd],
     [don't use AMD, disable some sparse functionality])],
  with_amd=$withval, with_amd=yes)

warn_amd="AMD not found. This will result in some lack of functionality for sparse matrices."
if test "$with_amd" = yes; then
  with_amd=no
  AC_CHECK_HEADERS([suitesparse/amd.h ufsparse/amd.h amd/amd.h amd.h], [
    AC_CHECK_LIB(amd, amd_postorder, [AMD_LIBS="-lamd"; with_amd=yes])
    if test "$with_amd" = yes; then
      AC_DEFINE(HAVE_AMD, 1, [Define if the AMD library is used.])
      warn_amd=
    fi
    break])
fi 
if test -n "$warn_amd"; then
  AC_MSG_WARN($warn_amd)
fi

# Check for CAMD library
CAMD_LIBS=
AC_SUBST(CAMD_LIBS)
AC_CHECK_LIB(camd, camd_postorder, [CAMD_LIBS="-lcamd"; with_camd=yes],[with_camd=no])

# Check for UMFPACK library.

UMFPACK_LIBS=
AC_SUBST(UMFPACK_LIBS)

AC_ARG_WITH(umfpack,
  [AS_HELP_STRING([--without-umfpack],
     [don't use UMFPACK, disable some sparse functionality])],
  with_umfpack=$withval, with_umfpack=yes)

warn_umfpack="UMFPACK not found.  This will result in some lack of functionality for sparse matrices."
if test "$with_umfpack" = yes && test "$with_amd" = yes; then
  with_umfpack=no
  AC_CHECK_HEADERS([suitesparse/umfpack.h ufsparse/umfpack.h umfpack/umfpack.h umfpack.h], [
    AC_CHECK_LIB(umfpack, umfpack_zi_get_determinant, [
      UMFPACK_LIBS="-lumfpack"; with_umfpack=yes], [
        ## Invalidate the cache.
	$as_unset ac_cv_lib_umfpack_umfpack_zi_get_determinant
	AC_CHECK_LIB(umfpack, umfpack_zi_get_determinant, [
          UMFPACK_LIBS="-lumfpack"; with_umfpack=yes], [

	  ## Invalidate the cache.
	  $as_unset ac_cv_lib_umfpack_umfpack_zi_get_determinant
	  AC_CHECK_LIB(umfpack, umfpack_zi_get_determinant, [
            UMFPACK_LIBS="-lumfpack -lcblas"; with_umfpack=yes], [], $AMD_LIBS -lcblas $BLAS_LIBS)], $AMD_LIBS $BLAS_LIBS $FLIBS)], $AMD_LIBS)

    if test "$with_umfpack" = yes; then
      AC_DEFINE(HAVE_UMFPACK, 1, [Define if the UMFPACK library is used.])
      OLD_LIBS=$LIBS
      LIBS="$LIBS $UMFPACK_LIBS $AMD_LIBS $BLAS_LIBS $FLIBS"
      OCTAVE_UMFPACK_SEPERATE_SPLIT
      LIBS=$OLD_LIBS
      TEXINFO_UMFPACK="@set HAVE_UMFPACK"
      warn_umfpack=
    fi
    break])
fi
if test -n "$warn_umfpack"; then
  AC_MSG_WARN($warn_umfpack)
fi

AC_SUBST(TEXINFO_UMFPACK)

COLAMD_LIBS=
AC_SUBST(COLAMD_LIBS)

AC_ARG_WITH(colamd,
  [AS_HELP_STRING([--without-colamd],
     [don't use COLAMD, disable some sparse functionality])],
  with_colamd=$withval, with_colamd=yes)

warn_colamd="COLAMD not found. This will result in some lack of functionality for sparse matrices."
if test "$with_colamd" = yes; then
  with_colamd=no
  AC_CHECK_HEADERS([suitesparse/colamd.h ufsparse/colamd.h colamd/colamd.h colamd.h], [
    AC_CHECK_LIB(colamd, colamd, [COLAMD_LIBS="-lcolamd"; with_colamd=yes])
    if test "$with_colamd" = yes; then
      AC_DEFINE(HAVE_COLAMD, 1, [Define if the COLAMD library is used.])
      TEXINFO_COLAMD="@set HAVE_COLAMD"
      warn_colamd=
    fi
    break])
fi 
if test -n "$warn_colamd"; then
  AC_MSG_WARN($warn_colamd)
fi

AC_SUBST(TEXINFO_COLAMD)

CCOLAMD_LIBS=
AC_SUBST(CCOLAMD_LIBS)

AC_ARG_WITH(ccolamd,
  [AS_HELP_STRING([--without-ccolamd],
     [don't use CCOLAMD, disable some sparse functionality])],
  with_ccolamd=$withval, with_ccolamd=yes)

warn_ccolamd="CCOLAMD not found. This will result in some lack of functionality for sparse matrices."
if test "$with_ccolamd" = yes; then
  with_ccolamd=no
  AC_CHECK_HEADERS([suitesparse/ccolamd.h ufsparse/ccolamd.h ccolamd/ccolamd.h ccolamd.h], [
    AC_CHECK_LIB(ccolamd, ccolamd, [CCOLAMD_LIBS="-lccolamd"; with_ccolamd=yes])
    if test "$with_ccolamd" = yes; then
      AC_DEFINE(HAVE_CCOLAMD, 1, [Define if the CCOLAMD library is used.])
      warn_ccolamd=
    fi
    break])
fi 
if test -n "$warn_ccolamd"; then
  AC_MSG_WARN($warn_ccolamd)
fi

CHOLMOD_LIBS=
AC_SUBST(CHOLMOD_LIBS)

AC_ARG_WITH(cholmod,
  [AS_HELP_STRING([--without-cholmod],
     [don't use CHOLMOD, disable some sparse functionality])],
  with_cholmod=$withval, with_cholmod=yes)

warn_cholmod="CHOLMOD not found. This will result in some lack of functionality for sparse matrices."
if test "$with_cholmod" = yes && test "$with_colamd" = yes &&
	test "$with_ccolamd" = yes && test "$with_amd" = yes; then
  with_cholmod=no
  AC_CHECK_HEADERS([suitesparse/cholmod.h ufsparse/cholmod.h cholmod/cholmod.h cholmod.h], [
    AC_CHECK_LIB(cholmod, cholmod_start, [CHOLMOD_LIBS="-lcholmod"; 
      with_cholmod=yes], [
      AC_CHECK_LIB(cholmod, cholmod_start, [CHOLMOD_LIBS="-lcholmod -cblas"; 
	with_cholmod=yes], [],
	$CAMD_LIBS $AMD_LIBS $COLAMD_LIBS $CCOLAMD_LIBS $BLAS_LIBS $FLIBS)],
      $CAMD_LIBS $AMD_LIBS $COLAMD_LIBS $CCOLAMD_LIBS $BLAS_LIBS $FLIBS)

    if test "$with_cholmod" = yes; then
      AC_DEFINE(HAVE_CHOLMOD, 1, [Define if the CHOLMOD library is used.])
      TEXINFO_CHOLMOD="@set HAVE_CHOLMOD"
      warn_cholmod=
    fi
    break])
fi
if test -n "$warn_cholmod"; then
  AC_MSG_WARN($warn_cholmod)
fi

AC_SUBST(TEXINFO_CHOLMOD)

CXSPARSE_LIBS=
AC_SUBST(CXSPARSE_LIBS)

AC_ARG_WITH(cxsparse,
  [AS_HELP_STRING([--without-cxsparse],
     [don't use CXSparse, disable some sparse functionality])],
  with_cxsparse=$withval, with_cxsparse=yes)

warn_cxsparse="CXSparse not found. This will result in some lack of functionality for sparse matrices."
if test "$with_cxsparse" = yes; then
  with_cxsparse=no
  AC_LANG_PUSH(C++)
  AC_CHECK_HEADERS([suitesparse/cs.h ufsparse/cs.h cxsparse/cs.h cs.h], [
    AC_CHECK_LIB(cxsparse, cs_di_sqr, [CXSPARSE_LIBS="-lcxsparse"; with_cxsparse=yes])
    if test "$with_cxsparse" = yes; then
      AC_DEFINE(HAVE_CXSPARSE, 1, [Define if the CXSparse library is used.])
      warn_cxsparse=
    fi
    break])
  AC_LANG_POP(C++)
fi
if test -n "$warn_cxsparse"; then
  AC_MSG_WARN($warn_cxsparse)
fi

ARPACK_LIBS=
AC_SUBST(ARPACK_LIBS)

AC_ARG_WITH(arpack,
  [AS_HELP_STRING([--without-arpack],
     [don't use ARPACK, disable some sparse functionality])],
  with_arpack=$withval, with_arpack=yes)

warn_arpack="arpack not found. This will result in a lack of the eigs function."
if test "$with_arpack" = yes; then
  with_arpack=no
  AC_CHECK_LIB(arpack, F77_FUNC(dseupd,DSEUPD), [ARPACK_LIBS="-larpack"; with_arpack=yes], , $LAPACK_LIBS $FLIBS)
  if test "$with_arpack" = yes; then
    AC_DEFINE(HAVE_ARPACK, 1, [Define if the ARPACK library is used.])
    warn_arpack=
  fi
fi
if test -n "$warn_arpack"; then
  AC_MSG_WARN($warn_arpack)
fi

### Handle shared library options.

### Enable creation of static libraries.

AC_ARG_ENABLE(static,
  [AS_HELP_STRING([--enable-static], [create static libraries])],
  [if test "$enableval" = no; then STATIC_LIBS=false;
   else STATIC_LIBS=true; fi],
  STATIC_LIBS=false)
AC_SUBST(STATIC_LIBS)

### Enable creation of shared libraries.  Currently only works with
### gcc on some systems.

AC_ARG_ENABLE(shared,
  [AS_HELP_STRING([--enable-shared],
     [create shared libraries (not all systems)])],
  [if test "$enableval" = no; then SHARED_LIBS=false;
   else SHARED_LIBS=true; fi],
  SHARED_LIBS=true)
AC_SUBST(SHARED_LIBS)

### Enable dynamic linking.  --enable-shared implies this, so
### --enable-dl is only need if you are only building static libraries
### and want to try dynamic linking too (works on some systems, for
### example, OS X and Windows).

AC_ARG_ENABLE(dl,
  [AS_HELP_STRING([--enable-dl],
     [create shared libraries (not all systems)])],
  [if test "$enableval" = no; then ENABLE_DYNAMIC_LINKING=false;
   else ENABLE_DYNAMIC_LINKING=true; fi],
  ENABLE_DYNAMIC_LINKING=true)

if $STATIC_LIBS || $SHARED_LIBS; then
  true
else
  AC_MSG_ERROR([You can't disable building static AND shared libraries!])
fi

AC_ARG_ENABLE(rpath,
  [AS_HELP_STRING([--enable-rpath],
     [override the default link options for rpath; e.g., --enable-rpath='-rpath $(octlibdir)'])],
  [ if test "$enableval" = no; then use_rpath=false;
    else
      use_rpath=true
      if test "$enableval" = yes; then true;
      else enable_rpath_arg="$enableval"; fi
    fi], [use_rpath=true])

CPICFLAG=-fPIC
CXXPICFLAG=-fPIC
FPICFLAG=-fPIC
SHLEXT=so
SHLLIB='$(SHLEXT)'
SHLBIN=
SHLEXT_VER='$(SHLEXT).$(version)'
SHLLIB_VER='$(SHLLIB).$(version)'
SHLBIN_VER='$(SHLBIN).$(version)'
SHLLINKEXT=
LIBPRE=lib
SHLLIBPRE=lib
SHLBINPRE=lib
SH_LD='$(CXX)'
SH_LDFLAGS=-shared
DL_LD='$(SH_LD)'
DL_LDFLAGS='$(SH_LDFLAGS)'
MKOCTFILE_DL_LDFLAGS='$(DL_LDFLAGS)'
SONAME_FLAGS=
RLD_FLAG=
NO_OCT_FILE_STRIP=false
TEMPLATE_AR='$(AR)'
TEMPLATE_ARFLAGS="$ARFLAGS"
CRUFT_DLL_DEFS=
OCTAVE_DLL_DEFS=
OCTINTERP_DLL_DEFS=
OCTGRAPHICS_DLL_DEFS=
library_path_var=LD_LIBRARY_PATH
case "$canonical_host_type" in
  *-*-386bsd* | *-*-netbsd*)
    SH_LD=ld
    SH_LDFLAGS=-Bshareable
  ;;
  *-*-openbsd*)
    SH_LDFLAGS='-shared -fPIC'
  ;;
  *-*-freebsd*)
    SH_LDFLAGS="-shared -Wl,-x"
    RLD_FLAG='-Wl,-rpath -Wl,$(octlibdir)'
  ;;
  alpha*-dec-osf*)
    CPICFLAG=
    CXXPICFLAG=
    FPICFLAG=
    SH_LDFLAGS="-shared -Wl,-expect_unresolved -Wl,'*'"
    RLD_FLAG='-Wl,-rpath -Wl,$(octlibdir)'
  ;;
  *-*-darwin*)
    DL_LDFLAGS='-bundle -bundle_loader $(TOPDIR)/src/octave $(LDFLAGS)'
    MKOCTFILE_DL_LDFLAGS='-bundle -bundle_loader $$BINDIR/octave-$$OCTAVE_VERSION$$EXEEXT'
    SH_LDFLAGS='-dynamiclib -single_module $(LDFLAGS)'
    case "$canonical_host_type" in
      powerpc-*)
        CXXPICFLAG=
        CPICFLAG=
        FPICFLAG=
      ;;
    esac
    SHLEXT=dylib 
    SHLLIB='$(SHLEXT)'
    SHLEXT_VER='$(version).$(SHLEXT)'
    SHLLIB_VER='$(version).$(SHLLIB)'
    NO_OCT_FILE_STRIP=true
    SONAME_FLAGS='-install_name $(octlibdir)/$@'
    library_path_var=DYLD_LIBRARY_PATH	
  ;;
  *-*-cygwin*)
    LIBPRE=cyg
    SHLLIBPRE=cyg
    SHLBINPRE=lib
    SHLEXT=dll
    SHLLIB=dll.a
    SHLBIN=a    
    DL_LDFLAGS="-shared -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
    SH_LDFLAGS="-shared -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--enable-auto-image-base"
    SONAME_FLAGS='-Wl,--out-implib=$(patsubst $(SHLLIBPRE)%,$(SHLBINPRE)%,$@).a'
  ;;
  *-*-mingw*)
    CPICFLAG=
    CXXPICFLAG=
    FPICFLAG=
    SHLEXT=dll
    SHLLIB=dll.a
    SHLBIN=dll
    DL_LDFLAGS="-shared -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
    SH_LDFLAGS="-shared -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--enable-auto-image-base"
    SONAME_FLAGS='-Wl,--out-implib=$@.a'
    library_path_var=PATH
  ;;

  *-*-msdosmsvc)
    DL_LDFLAGS="-shared"
    CPICFLAG=
    CXXPICFLAG=
    FPICFLAG=
    SHLEXT=dll
    SHLLIB=lib
    SHLBIN=dll
    LIBPRE=
    SHLLIBPRE=
    SHLBINPRE=
    SH_LDFLAGS="-shared"
      if test -n "`echo $CFLAGS | grep -e '-g'`" -o -n "`echo $CXXFLAGS | grep -e '-g'`"; then
      DL_LDFLAGS="$DL_LDFLAGS -g"
      SH_LDFLAGS="$SH_LDFLAGS -g"
    fi
    NO_OCT_FILE_STRIP=true
    library_path_var=PATH
    NO_OCT_FILE_STRIP=true
    ## Extra compilation flags.
    CRUFT_DLL_DEFS="-DCRUFT_DLL"
    OCTAVE_DLL_DEFS="-DOCTAVE_DLL"
    OCTINTERP_DLL_DEFS="-DOCTINTERP_DLL"
    OCTGRAPHICS_DLL_DEFS="-DOCTGRAPHICS_DLL"
  ;;
  *-*-linux* | *-*-gnu*)
    MKOCTFILE_DL_LDFLAGS="-shared -Wl,-Bsymbolic"
    SONAME_FLAGS='-Wl,-soname -Wl,$@'
    RLD_FLAG='-Wl,-rpath -Wl,$(octlibdir)'
  ;;
  i[[3456]]86-*-sco3.2v5*)
    SONAME_FLAGS='-Wl,-h -Wl,$@'
    RLD_FLAG=
    SH_LDFLAGS=-G
  ;;
  rs6000-ibm-aix* | powerpc-ibm-aix*)
    CPICFLAG=
    CXXPICFLAG=
    FPICFLAG=
  ;;
  hppa*-hp-hpux*)
    if test "$ac_cv_f77_compiler_gnu" = yes; then
      FPICFLAG=-fPIC
    else
      FPICFLAG=+Z
    fi
    SHLEXT=sl
    SH_LDFLAGS="-shared -fPIC"
    RLD_FLAG='-Wl,+b -Wl,$(octlibdir)'
  ;;
  *-sgi-*)
    CPICFLAG=
    CXXPICFLAG=
    FPICFLAG=
    RLD_FLAG='-rpath $(octlibdir)'
  ;;
  sparc-sun-sunos4*)
    if test "$ac_cv_f77_compiler_gnu" = yes; then
      FPICFLAG=-fPIC
    else
      FPICFLAG=-PIC
    fi
    SH_LD=ld
    SH_LDFLAGS="-assert nodefinitions"
    RLD_FLAG='-L$(octlibdir)'
  ;;
  sparc-sun-solaris2* | i386-pc-solaris2*)
    if test "$ac_cv_f77_compiler_gnu" = yes; then
      FPICFLAG=-fPIC
    else
      FPICFLAG=-KPIC
    fi
    if test "$GCC" = yes; then
      CPICFLAG=-fPIC
    else
      CPICFLAG=-KPIC
    fi
    if test "$GXX" = yes; then
      CXXPICFLAG=-fPIC
      SH_LDFLAGS=-shared
    else
      CXXPICFLAG=-KPIC
      SH_LDFLAGS=-G
    fi
    RLD_FLAG='-R $(octlibdir)'
    ## Template closures in archive libraries need a different mechanism.
    if test "$GXX" = yes; then
      true
    else
      TEMPLATE_AR='$(CXX)'
      TEMPLATE_ARFLAGS="-xar -o"
    fi
  ;;
esac

if $use_rpath; then
  if test -n "$enable_rpath_arg"; then
    RLD_FLAG="$enable_rpath_arg"
  fi
else
  RLD_FLAG=""
fi

AC_MSG_NOTICE([defining FPICFLAG to be $FPICFLAG])
AC_MSG_NOTICE([defining CPICFLAG to be $CPICFLAG])
AC_MSG_NOTICE([defining CXXPICFLAG to be $CXXPICFLAG])
AC_MSG_NOTICE([defining SHLEXT to be $SHLEXT])
AC_MSG_NOTICE([defining SHLLIB to be $SHLLIB])
AC_MSG_NOTICE([defining SHLBIN to be $SHLBIN])
AC_MSG_NOTICE([defining SHLEXT_VER to be $SHLEXT_VER])
AC_MSG_NOTICE([defining SHLLIB_VER to be $SHLLIB_VER])
AC_MSG_NOTICE([defining SHLBIN_VER to be $SHLBIN_VER])
AC_MSG_NOTICE([defining SHLLINKEXT to be $SHLLINKEXT])
AC_MSG_NOTICE([defining LIBPRE to be $LIBPRE])
AC_MSG_NOTICE([defining SHLLIBPRE to be $SHLLIBPRE])
AC_MSG_NOTICE([defining SHLBINPRE to be $SHLBINPRE])
AC_MSG_NOTICE([defining SH_LD to be $SH_LD])
AC_MSG_NOTICE([defining SH_LDFLAGS to be $SH_LDFLAGS])
AC_MSG_NOTICE([defining DL_LD to be $DL_LD])
AC_MSG_NOTICE([defining DL_LDFLAGS to be $DL_LDFLAGS])
AC_MSG_NOTICE([defining MKOCTFILE_DL_LDFLAGS to be $MKOCTFILE_DL_LDFLAGS])
AC_MSG_NOTICE([defining SONAME_FLAGS to be $SONAME_FLAGS])
AC_MSG_NOTICE([defining NO_OCT_FILE_STRIP to be $NO_OCT_FILE_STRIP])
AC_MSG_NOTICE([defining RLD_FLAG to be $RLD_FLAG])
AC_MSG_NOTICE([defining TEMPLATE_AR to be $TEMPLATE_AR])
AC_MSG_NOTICE([defining TEMPLATE_ARFLAGS to be $TEMPLATE_ARFLAGS])
AC_MSG_NOTICE([defining CRUFT_DLL_DEFS to be $CRUFT_DLL_DEFS])
AC_MSG_NOTICE([defining OCTAVE_DLL_DEFS to be $OCTAVE_DLL_DEFS])
AC_MSG_NOTICE([defining OCTINTERP_DLL_DEFS to be $OCTINTERP_DLL_DEFS])
AC_MSG_NOTICE([defining OCTGRAPHICS_DLL_DEFS to be $OCTGRAPHICS_DLL_DEFS])
AC_MSG_NOTICE([defining library_path_var to be $library_path_var])
AC_SUBST(FPICFLAG)
AC_SUBST(CPICFLAG)
AC_SUBST(CXXPICFLAG)
AC_SUBST(SHLEXT)
AC_SUBST(SHLLIB)
AC_SUBST(SHLBIN)
AC_SUBST(SHLEXT_VER)
AC_SUBST(SHLLIB_VER)
AC_SUBST(SHLBIN_VER)
AC_SUBST(SHLLINKEXT)
AC_SUBST(LIBPRE)
AC_SUBST(SHLLIBPRE)
AC_SUBST(SHLBINPRE)
AC_SUBST(SH_LD)
AC_SUBST(SH_LDFLAGS)
AC_SUBST(DL_LD)
AC_SUBST(DL_LDFLAGS)
AC_SUBST(MKOCTFILE_DL_LDFLAGS)
AC_SUBST(SONAME_FLAGS)
AC_SUBST(NO_OCT_FILE_STRIP)
AC_SUBST(RLD_FLAG)
AC_SUBST(TEMPLATE_AR)
AC_SUBST(TEMPLATE_ARFLAGS)
AC_SUBST(CRUFT_DLL_DEFS)
AC_SUBST(OCTAVE_DLL_DEFS)
AC_SUBST(OCTINTERP_DLL_DEFS)
AC_SUBST(OCTGRAPHICS_DLL_DEFS)
AC_SUBST(library_path_var)

### special checks for odd OS specific things.
###
### I am told that on some SCO systems, the only place to find some
### functions like gethostname and gettimeofday is in libsocket.

AC_CHECK_FUNCS(gethostname, [], [AC_CHECK_LIB(socket, gethostname)])
AC_CHECK_FUNCS(getpwnam, [], [AC_CHECK_LIB(sun, getpwnam)])

case "$canonical_host_type" in
  *-*-cygwin*)
   AC_CHECK_LIB(wsock32, gethostname)
   LIBS="$LIBS -lwsock32"
  ;;
  *-*-msdosmsvc* | *-*-mingw*)
  LIBS="$LIBS -lgdi32 -lws2_32 -lkernel32"
  ;;
esac

### Type stuff.

AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_UID_T
AC_CHECK_TYPES([dev_t, ino_t, nlink_t, nlink_t])
AC_CHECK_TYPES([long long int, unsigned long long int])
AC_CHECK_TYPES([sigset_t, sig_atomic_t], , , [
#if defined (HAVE_SYS_TYPES_H)
#include <sys/types.h>
#endif
#include <signal.h>])

### How big are ints and how are they oriented?  These could probably
### be eliminated in favor of run-time checks.

AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)

### Does the C compiler handle alloca() and const correctly?

AC_FUNC_ALLOCA
AC_C_CONST

### See if we should use placement delete.

OCTAVE_PLACEMENT_DELETE

### See if we can auto allocate variable sized arrays.

OCTAVE_DYNAMIC_AUTO_ARRAYS

### See if we can use fast integer arithmetics

OCTAVE_FAST_INT_OPS

### Check for long double type (for 64-bit integers)

AC_CHECK_SIZEOF(long double)

### Checks for header files.

AC_HEADER_STDC
AC_HEADER_DIRENT
AC_HEADER_TIME
AC_HEADER_SYS_WAIT

### C headers

AC_CHECK_HEADERS(assert.h curses.h direct.h dlfcn.h fcntl.h float.h \
  floatingpoint.h grp.h ieeefp.h inttypes.h limits.h locale.h memory.h nan.h \
  ncurses.h poll.h pthread.h pwd.h stdint.h stdlib.h string.h sunmath.h sys/ioctl.h \
  sys/param.h sys/poll.h sys/resource.h sys/select.h sys/stat.h \
  sys/time.h sys/times.h sys/types.h sys/utsname.h sys/utime.h termcap.h \
  unistd.h utime.h varargs.h)

### C++ headers

AC_LANG_PUSH(C++)
AC_CHECK_HEADERS(sstream)
AC_LANG_POP(C++)

have_termios_h=no
AC_CHECK_HEADERS($TERMIOS_H, have_termios_h=yes)
AC_CHECK_HEADERS(termio.h, have_termio_h=yes, have_termio_h=no)
AC_CHECK_HEADERS(sgtty.h, have_sgtty_h=yes, have_sgtty_h=no)
AC_CHECK_HEADERS(glob.h, have_glob_h=yes, have_glob_h=no)
AC_CHECK_HEADERS(fnmatch.h, have_fnmatch_h=yes, have_fnmatch_h=no)
AC_CHECK_HEADERS(conio.h, have_conio_h=yes, have_conio_h=no)

### I'm told that termios.h is broken on NeXT systems.

case "$canonical_host_type" in
  *-*-nextstep*)
    if test "$have_termios_h" = yes; then
      AC_MSG_WARN([Ignoring termios.h on NeXT systems.])
      have_termios_h=no
    fi
  ;;
esac

if test "$have_termios_h" = yes \
    || test "$have_termio_h" = yes \
    || test "$have_sgtty_h" = yes; then
  true
else
  AC_MSG_WARN([I couldn't find termios.h, termio.h, or sgtty.h!])
fi

LIBGLOB=
AC_SUBST(LIBGLOB)
if test "$have_fnmatch_h" = yes && test "$have_glob_h" = yes; then
  AC_CHECK_FUNCS(fnmatch, have_fnmatch=yes, [
    AC_CHECK_LIB(glob, fnmatch, [have_fnmatch=yes; LIBGLOB=-lglob],
      have_fnmatch=no)])
  AC_CHECK_FUNCS(glob, have_glob=yes, [
    AC_CHECK_LIB(glob, glob, [have_glob=yes; LIBGLOB=-lglob],
      have_glob=no)])

  if test "$have_fnmatch" != yes || test "$have_glob" != yes; then
    AC_MSG_ERROR([You are required to have fnmatch and glob])
  fi
else
  AC_MSG_ERROR([You are required to have fnmatch.h and glob.h])
fi

### Checks for functions and variables.

AC_CHECK_FUNCS(atexit basename bcopy bzero canonicalize_file_name \
  chmod dup2 endgrent endpwent execvp expm1 expm1f fcntl fork fstat getcwd \
  getegid geteuid getgid getgrent getgrgid getgrnam getpgrp getpid \
  getppid getpwent getpwuid gettimeofday getuid getwd _kbhit kill \
  lgamma lgammaf lgamma_r lgammaf_r link localtime_r log1p log1pf lstat \
  memmove mkdir mkfifo mkstemp on_exit pipe poll putenv raise readlink \
  realpath rename resolvepath rindex rmdir round roundl select setgrent setlocale \
  setpwent setvbuf sigaction siglongjmp sigpending sigprocmask sigsuspend \
  snprintf stat strcasecmp strdup strerror stricmp strncasecmp \
  strnicmp strptime strsignal symlink tempnam tgamma tgammaf trunc umask \
  uname unlink usleep utime vfprintf vsprintf vsnprintf waitpid \
  _chmod _snprintf x_utime _utime32)

case "$canonical_host_type" in
  *-*-msdosmsvc)
    ## The %T format specifier for strftime is reportedly broken,
    ## so use our version.  We could use an actual configure test
    ## for this.
  ;;
  *)
    AC_CHECK_FUNCS(strftime)
  ;;
esac

OCTAVE_STRPTIME_BROKEN
OCTAVE_SMART_PUTENV

case "$canonical_host_type" in
  *-*-msdosmsvc | *-*-mingw*)
    AC_MSG_CHECKING([for required _WIN32_WINNT])
    AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[
#include <windows.h>
#if _WIN32_WINNT < 0x0403
#error "Wrong version"
#endif]], []),
      AC_MSG_RESULT([none]), [
	AC_DEFINE(_WIN32_WINNT, 0x0403, [Define to 0x0403 to access InitializeCriticalSectionAndSpinCount])
	AC_MSG_RESULT([0x0403])])
    AC_MSG_CHECKING([whether _USE_MATH_DEFINES needs to be defined])
    AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[#include <math.h>]],
[[int x = M_LN2;]]),
      AC_MSG_RESULT([no]), [
	AC_DEFINE(_USE_MATH_DEFINES, 1, [Define if your system needs it to define math constants like M_LN2])
	AC_MSG_RESULT([yes])])
  ;;
esac

### Dynamic linking is now enabled only if we are building shared
### libs and some API for dynamic linking is detected.

LD_CXX='$(CXX)'
RDYNAMIC_FLAG=
DL_API_MSG=""
dlopen_api=false
shl_load_api=false
loadlibrary_api=false
dyld_api=false

if $SHARED_LIBS || $ENABLE_DYNAMIC_LINKING; then

  ## Check for dyld first since OS X can have a non-standard libdl	

  AC_CHECK_HEADER(mach-o/dyld.h)  
  if test "$ac_cv_header_mach_o_dyld_h" = yes; then
    dyld_api=true
  else 
    AC_CHECK_LIB(dld, shl_load)
    AC_CHECK_FUNCS(shl_load shl_findsym)
    if test "$ac_cv_func_shl_load" = yes \
      && test "$ac_cv_func_shl_findsym" = yes; then
      shl_load_api=true
    else
      AC_CHECK_LIB(wsock32, LoadLibrary)
      AC_CHECK_FUNCS(LoadLibrary)
      if test "$ac_cv_func_loadlibrary" = yes; then
        loadlibrary_api=true
      else
        AC_CHECK_LIB(dl, dlopen)
        AC_CHECK_FUNCS(dlopen dlsym dlerror dlclose)
        if test "$ac_cv_func_dlclose" = yes \
          && test "$ac_cv_func_dlerror" = yes \
          && test "$ac_cv_func_dlopen" = yes \
          && test "$ac_cv_func_dlsym" = yes; then
          dlopen_api=true
        else
	  case "$canonical_host_type" in
	    i[[3456]]86-*-sco3.2v5*)
	      LD_CXX='LD_RUN_PATH=$LD_RUN_PATH:$(octlibdir) $(CXX)'
	      dlopen_api=true
	    ;;
	  esac
	fi
      fi
    fi
  fi

  ## autoconf test for LoadLibrary appears broken. Bypass for cygwin/mingw 
  if $dlopen_api || $shl_load_api || $loadlibrary_api || $dyld_api; then
    true
  else
    case "$canonical_host_type" in
      *-*-cygwin* | *-*-mingw* | *-*-msdosmsvc)
       loadlibrary_api=true;
      ;;
    esac
  fi

  if $dlopen_api; then
    DL_API_MSG="(dlopen)"
    AC_DEFINE(HAVE_DLOPEN_API, 1, [Define if your system has dlopen, dlsym, dlerror, and dlclose for dynamic linking])
    OCTAVE_CXX_FLAG(-rdynamic, [RDYNAMIC_FLAG=-rdynamic])
  elif $shl_load_api; then
    DL_API_MSG="(shl_load)"
    AC_DEFINE(HAVE_SHL_LOAD_API, 1, [Define if your system has shl_load and shl_findsym for dynamic linking])
  elif $loadlibrary_api; then
    DL_API_MSG="(LoadLibrary)"
    AC_DEFINE(HAVE_LOADLIBRARY_API, 1, [Define if your system has LoadLibrary for dynamic linking])
  elif $dyld_api; then
    DL_API_MSG="(dyld)"
    AC_DEFINE(HAVE_DYLD_API, 1, [Define if your system has dyld for dynamic linking])
  fi

  if $dlopen_api || $shl_load_api || $loadlibrary_api || $dyld_api; then
    ENABLE_DYNAMIC_LINKING=true
    AC_DEFINE(ENABLE_DYNAMIC_LINKING, 1, [Define if using dynamic linking])
  fi
fi

if $SHARED_LIBS; then
   LIBOCTINTERP=-loctinterp$SHLLINKEXT
   LIBOCTAVE=-loctave$SHLLINKEXT
   LIBCRUFT=-lcruft$SHLLINKEXT
else
  LIBOCTINTERP='$(TOPDIR)/src/liboctinterp.$(LIBEXT)'
  LIBOCTAVE='$(TOPDIR)/liboctave/liboctave.$(LIBEXT)'
  LIBCRUFT='$(TOPDIR)/libcruft/libcruft.$(LIBEXT)'
fi

AC_SUBST(LD_CXX)
AC_SUBST(RDYNAMIC_FLAG)
AC_SUBST(ENABLE_DYNAMIC_LINKING)
AC_SUBST(LIBOCTINTERP)
AC_SUBST(LIBOCTAVE)
AC_SUBST(LIBCRUFT)

### There is more than one possible prototype for gettimeofday.  See
### which one (if any) appears in sys/time.h.  These tests are from
### Emacs 19.

AC_MSG_CHECKING(for struct timeval)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef TIME_WITH_SYS_TIME
#include <sys/time.h>
#include <time.h>
#else
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#else
#include <time.h>
#endif
#endif]], [[static struct timeval x; x.tv_sec = x.tv_usec;]])],
  [AC_MSG_RESULT(yes)
   HAVE_TIMEVAL=yes
   AC_DEFINE(HAVE_TIMEVAL, 1, [Define if struct timeval is defined.])],
  [AC_MSG_RESULT(no)
   HAVE_TIMEVAL=no])

if test "x$HAVE_TIMEVAL" = xyes; then
AC_MSG_CHECKING(whether gettimeofday can't accept two arguments)
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifdef TIME_WITH_SYS_TIME
#include <sys/time.h>
#include <time.h>
#else
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#else
#include <time.h>
#endif
#endif]], [[struct timeval time;
  struct timezone dummy;
  gettimeofday (&time, &dummy);]])],
  [AC_MSG_RESULT(no)],
  [AC_MSG_RESULT(yes)
   AC_DEFINE(GETTIMEOFDAY_NO_TZ, 1,
     [Define if your system has a single-arg prototype for gettimeofday.])])
fi

dnl Would like to get rid of this cruft, and just have
dnl
dnl   AC_CHECK_FUNCS(finite isnan isinf)
dnl
dnl instead, but that used to fail on some systems...
dnl
dnl Also just using AC_CHECK_FUNCS doesn't seem to work to find isinf
dnl and isnan on Linux systems, so we use AC_CHECK_FUNC, and if that
dnl fails, we try again by including math.h and invoking the function
dnl with an argument. 

### I am told that Inf and NaN don't work on m68k HP sytems, and that
### on SCO systems, isnan and isinf don't work, but they can be
### replaced by something that does.

case "$canonical_host_type" in
  m68k-hp-hpux*)
  ;;
  *-*-sco*)
    AC_MSG_NOTICE([defining SCO to be 1])
    AC_DEFINE(SCO, 1, [Define if using an SCO system.])
    AC_MSG_NOTICE([forcing HAVE_ISINF for SCO])
    AC_DEFINE(HAVE_ISINF, 1, [Define if you have isinf().])
    AC_MSG_NOTICE([forcing HAVE_ISNAN for SCO])
    AC_DEFINE(HAVE_ISNAN, 1, [Define if you have isnan().])
  ;;
  *)
    AC_CHECK_FUNCS(finite isnan isinf copysign signbit)
    AC_CHECK_FUNCS(_finite _isnan _copysign)
    AC_CHECK_DECLS(signbit, , , [#include <math.h>])
  ;;
esac

### Check for nonstandard but common math functions that we need.

AC_CHECK_FUNCS(acosh acoshf asinh asinhf atanh atanhf erf erff erfc erfcf exp2 exp2f log2 log2f)
AC_CHECK_FUNCS(hypotf _hypotf)

### Checks for OS specific cruft.

AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct stat.st_rdev])

AC_STRUCT_TM
AC_STRUCT_TIMEZONE
AC_FUNC_CLOSEDIR_VOID

AC_CHECK_MEMBERS(struct group.gr_passwd)

# mkdir takes a single argument on some systems.
OCTAVE_MKDIR_TAKES_ONE_ARG

octave_found_termlib=no
for termlib in ncurses curses termcap terminfo termlib; do
  AC_CHECK_LIB(${termlib}, tputs, [TERMLIBS="${TERMLIBS} -l${termlib}"])
  case "${TERMLIBS}" in
    *-l${termlib}*)
      LIBS="$TERMLIBS $LIBS"
      AC_SUBST(TERMLIBS)
      octave_found_termlib=yes
      break
    ;;
  esac
done

if test "$octave_found_termlib" = no; then
  warn_termlibs="I couldn't find -ltermcap, -lterminfo, -lncurses, -lcurses, o\
r -ltermlib!"
  AC_MSG_WARN($warn_termlibs)
fi

OCTAVE_ENABLE_READLINE

AC_MSG_CHECKING([for struct exception in math.h])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
  [[struct exception *x; x->type; x->name;]])],
  [AC_MSG_RESULT(yes)
   AC_DEFINE(EXCEPTION_IN_MATH, 1,
     [Define if your math.h declares struct exception for matherr().])],
  [AC_MSG_RESULT(no)])

### Signal stuff.

AC_TYPE_SIGNAL
AC_CHECK_DECLS([sys_siglist], [], [],
[#include <signal.h>
/* NetBSD declares sys_siglist in unistd.h.  */
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
])
OCTAVE_SIGNAL_CHECK
OCTAVE_REINSTALL_SIGHANDLERS
if test "$ac_cv_type_signal" = "void"; then
  AC_DEFINE(RETSIGTYPE_IS_VOID, 1, [Define if this if RETSIGTYPE is defined to be void.  Needed because preprocessor comparisons to void fail on some systems.])
fi

### A system dependent kluge or two.

AC_CHECK_FUNCS(getrusage times)
case "$canonical_host_type" in
  *-*-cygwin*)
    AC_DEFINE(RUSAGE_TIMES_ONLY, 1, [Define if your struct rusage only has time information.])
  ;;
esac

### Checks for other programs used for building, testing, installing,
### and running Octave.

AC_PROG_AWK
OCTAVE_PROG_FIND
OCTAVE_PROG_SED
OCTAVE_PROG_PERL
OCTAVE_PROG_PYTHON

OCTAVE_PROG_FLEX
OCTAVE_PROG_BISON

AC_PROG_LN_S

AC_PROG_INSTALL
INSTALL_SCRIPT='${INSTALL}'
AC_SUBST(INSTALL_SCRIPT)

OCTAVE_PROG_DESKTOP_FILE_INSTALL

OCTAVE_PROG_GNUPLOT
OCTAVE_PROG_PAGER
OCTAVE_PROG_GPERF

OCTAVE_PROG_GHOSTSCRIPT
OCTAVE_PROG_MAKEINFO
OCTAVE_PROG_TEXI2DVI
OCTAVE_PROG_TEXI2PDF

### Even though we include config.h, we need to have the preprocessor
### defines available in a variable for the octave-bug script.  Use
### UGLY_DEFS for that.

AC_OUTPUT_MAKE_DEFS

### We have to insert extra levels of backslash quoting here so that
### the right thing ends up in oct-conf.h.
UGLY_DEFS=`echo $DEFS | $SED 's,\\",\\\\\\\\\\\\\\\\\\",g'`
AC_MSG_NOTICE([defining UGLY_DEFS to be $UGLY_DEFS])
AC_SUBST(UGLY_DEFS)

### Maybe add -Wall, -W, and -Wshadow to compiler flags now that we're
### done feature testing. 

if test -z "$EXTERN_CFLAGS"; then
  OCTAVE_CC_FLAG(-Wall, [
	WARN_CFLAGS="$WARN_CFLAGS -Wall";
	AC_MSG_RESULT([adding -Wall to WARN_CFLAGS])])
  OCTAVE_CC_FLAG(-W, [
	WARN_CFLAGS="$WARN_CFLAGS -W";
	AC_MSG_RESULT([adding -W to WARN_CFLAGS])])
  OCTAVE_CC_FLAG(-Wshadow, [
	WARN_CFLAGS="$WARN_CFLAGS -Wshadow";
	AC_MSG_RESULT([adding -Wshadow to WARN_CFLAGS])])
fi

if test -z "$EXTERN_CXXFLAGS"; then
  OCTAVE_CXX_FLAG(-Wall, [
    WARN_CXXFLAGS="$WARN_CXXFLAGS -Wall";
    AC_MSG_RESULT([adding -Wall to WARN_CXXFLAGS])])
  OCTAVE_CXX_FLAG(-W, [
    WARN_CXXFLAGS="$WARN_CXXFLAGS -W";
    AC_MSG_RESULT([adding -W to WARN_CXXFLAGS])])
  OCTAVE_CXX_FLAG(-Wshadow, [
    WARN_CXXFLAGS="$WARN_CXXFLAGS -Wshadow";
    AC_MSG_RESULT([adding -Wshadow to WARN_CXXFLAGS])])
  OCTAVE_CXX_FLAG(-Wold-style-cast, [
    WARN_CXXFLAGS="$WARN_CXXFLAGS -Wold-style-cast";
    AC_MSG_RESULT([adding -Wold-style-cast to WARN_CXXFLAGS])])
fi

GCC_PICKY_FLAGS="-Wcast-align -Wcast-qual -Wmissing-prototypes \
  -Wpointer-arith -Wstrict-prototypes -Wwrite-strings"

GXX_PICKY_FLAGS="-Wcast-align -Wcast-qual -Wpointer-arith \
  -Wwrite-strings -Weffc++ -Wenum-clash"

AC_ARG_ENABLE(picky-flags,
  [AS_HELP_STRING([--enable-picky-flags],
     [add extra warning options to CFLAGS, CXXFLAGS, FFLAGS])],
  [if test "$enableval" = no; then
     true
   elif test "$enableval" = yes; then
     if test -z "$EXTERN_CFLAGS"; then
       for flag in $GCC_PICKY_FLAGS; do
	 OCTAVE_CC_FLAG($flag, [
	   WARN_CFLAGS="$WARN_CFLAGS $flag";
	   AC_MSG_RESULT([adding $flag to WARN_CFLAGS])])
       done
     fi
     if test -z "$EXTERN_CXXFLAGS"; then
       for flag in $GXX_PICKY_FLAGS; do
	 OCTAVE_CXX_FLAG($flag, [
	   WARN_CXXFLAGS="$WARN_CXXFLAGS $flag";
	   AC_MSG_RESULT([adding $flag to WARN_CXXFLAGS])])
       done
     fi
   fi], [])

AC_SUBST(WARN_CFLAGS)
AC_SUBST(WARN_CXXFLAGS)

### Run configure in subdirectories.

export CC
export CXX
export F77

AC_CONFIG_SUBDIRS(scripts)

### Some things to add to the bottom of config.h.

AH_BOTTOM([
#if defined (__GNUC__)
#define GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__))
#define GCC_ATTR_NORETURN __attribute__ ((__noreturn__))
#define GCC_ATTR_UNUSED __attribute__ ((__unused__))
#else
#define GCC_ATTR_DEPRECATED
#define GCC_ATTR_NORETURN
#define GCC_ATTR_UNUSED
#endif

#define X_CAST(T, E) (T) (E)

#if defined (CXX_BROKEN_REINTERPRET_CAST)
#define FCN_PTR_CAST(T, E) (T) (E)
#else
#define FCN_PTR_CAST(T, E) reinterpret_cast<T> (E)
#endif

#if defined(HAVE_F2C) && !defined(F77_FUNC)
#  define F77_FUNC(x,X) x ## _
#  define F77_FUNC_(x,X) x ## __
#endif

#if !defined(HAVE_DEV_T)
typedef short dev_t;
#endif

#if !defined(HAVE_INO_T)
typedef unsigned long ino_t;
#endif

#if !defined(HAVE_NLINK_T)
typedef short nlink_t;
#endif

#if !defined(HAVE_SIGSET_T)
typedef int sigset_t;
#endif

#if !defined(HAVE_SIG_ATOMIC_T)
typedef int sig_atomic_t;
#endif

#if defined (_MSC_VER)
#define __WIN32__
#define WIN32
/* missing parameters in macros */
#pragma warning (disable: 4003)
/* missing implementations in template instantiation */
#pragma warning (disable: 4996)
/* deprecated function names (FIXME?) */
#pragma warning (disable: 4661)
#endif

#if defined (__WIN32__) && ! defined (__CYGWIN__)
#define OCTAVE_HAVE_WINDOWS_FILESYSTEM 1
#elif defined (__CYGWIN__)
#define OCTAVE_HAVE_WINDOWS_FILESYSTEM 1
#define OCTAVE_HAVE_POSIX_FILESYSTEM 1
#else
#define OCTAVE_HAVE_POSIX_FILESYSTEM 1
#endif

/* Define if we expect to have <windows.h>, Sleep, etc. */
#if defined (__WIN32__) && ! defined (__CYGWIN__)
#define OCTAVE_USE_WINDOWS_API 1
#endif

#if defined (__APPLE__) && defined (__MACH__)
#define OCTAVE_USE_OS_X_API 1
#endif

/* sigsetjmp is a macro, not a function. */
#if defined (sigsetjmp) && defined (HAVE_SIGLONGJMP)
#define OCTAVE_HAVE_SIG_JUMP
#endif

#if defined (__DECCXX)
#define __USE_STD_IOSTREAM
#endif

#if defined (_UNICOS)
#define F77_USES_CRAY_CALLING_CONVENTION
#endif

#if 0
#define F77_USES_VISUAL_FORTRAN_CALLING_CONVENTION
#endif

#ifdef USE_64_BIT_IDX_T
#define SIZEOF_OCTAVE_IDX_TYPE 8
#else
#define SIZEOF_OCTAVE_IDX_TYPE SIZEOF_INT
#endif

// To be able to use long doubles for 64-bit mixed arithmetics, we need them at
// least 80 bits wide and we need roundl declared in math.h.
// FIXME -- maybe substitute this by a more precise check in the future.
#if (SIZEOF_LONG_DOUBLE >= 10) && defined (HAVE_ROUNDL)
#define OCTAVE_INT_USE_LONG_DOUBLE
#endif

#define OCTAVE_EMPTY_CPP_ARG

#include "oct-dlldefs.h"
#include "oct-types.h"
])

### Do the substitutions in all the Makefiles.

AC_CONFIG_FILES([Makefile octMakefile Makeconf test/Makefile
  doc/Makefile doc/faq/Makefile doc/interpreter/Makefile
  doc/liboctave/Makefile doc/refcard/Makefile emacs/Makefile
  examples/Makefile examples/@polynomial/Makefile liboctave/Makefile
  liboctave/oct-types.h src/Makefile src/mxarray.h libcruft/Makefile
  libcruft/Makerules libcruft/amos/Makefile libcruft/blas/Makefile
  libcruft/daspk/Makefile libcruft/dasrt/Makefile
  libcruft/dassl/Makefile libcruft/fftpack/Makefile
  libcruft/lapack/Makefile 
  libcruft/misc/Makefile libcruft/odepack/Makefile
  libcruft/ordered-qz/Makefile libcruft/quadpack/Makefile
  libcruft/ranlib/Makefile libcruft/slatec-fn/Makefile
  libcruft/slatec-err/Makefile libcruft/villad/Makefile
  libcruft/blas-xtra/Makefile libcruft/lapack-xtra/Makefile])
AC_OUTPUT

AC_CONFIG_COMMANDS([default-1],[[chmod +x install-octave]],[[]])

### Print a summary so that important information isn't missed.

if test -z "$F77"; then
  FORT="$F2C $F2CFLAGS"
else
  FORT="$F77 $FFLAGS"
fi

AC_MSG_NOTICE([

Octave is now configured for $canonical_host_type

  Source directory:     $srcdir
  Installation prefix:  $prefix
  C compiler:           $CC $XTRA_CFLAGS $WARN_CFLAGS $CFLAGS
  C++ compiler:         $CXX $XTRA_CXXFLAGS $WARN_CXXFLAGS $CXXFLAGS
  Fortran compiler:     $FORT
  Fortran libraries:    $FLIBS
  BLAS libraries:       $BLAS_LIBS
  FFTW libraries:       $FFTW_LIBS
  GLPK libraries:       $GLPK_LIBS
  UMFPACK libraries:    $UMFPACK_LIBS
  AMD libraries:        $AMD_LIBS
  CAMD libraries:       $CAMD_LIBS
  COLAMD libraries:     $COLAMD_LIBS
  CCOLAMD libraries:    $CCOLAMD_LIBS
  CHOLMOD libraries:    $CHOLMOD_LIBS
  CXSPARSE libraries:   $CXSPARSE_LIBS
  ARPACK libraries:     $ARPACK_LIBS
  QRUPDATE libraries:	$QRUPDATE_LIBS
  HDF5 libraries:       $HDF5_LIBS
  CURL libraries:       $CURL_LIBS
  REGEX libraries:      $REGEX_LIBS
  QHULL libraries:	$QHULL_LIBS
  OPENGL libraries:     $OPENGL_LIBS
  FLTK backend libs:    $GRAPHICS_LIBS
  X11 include flags:    $X11_INCFLAGS
  X11 libraries:        $X11_LIBS
  LIBS:                 $LIBS
  Default pager:        $DEFAULT_PAGER
  gnuplot:              $GNUPLOT
  Magick config:        $MAGICK_CONFIG

  Do internal array bounds checking:  $BOUNDS_CHECKING
  Build static libraries:             $STATIC_LIBS
  Build shared libraries:             $SHARED_LIBS
  Dynamic Linking:                    $ENABLE_DYNAMIC_LINKING $DL_API_MSG
  Include support for GNU readline:   $USE_READLINE
  64-bit array dims and indexing:     $USE_64_BIT_IDX_T
])

warn_msg_printed=false

if $ENABLE_DYNAMIC_LINKING; then
  if $SHARED_LIBS; then
    true
  else
    AC_MSG_WARN([You used --enable-dl but not --enable-shared.])
    AC_MSG_WARN([Are you sure that is what you want to do?])
    warn_msg_printed=true
  fi
fi

if test -n "$gxx_only"; then
  AC_MSG_WARN($gxx_only)
  warn_msg_printed=true
fi

if test -n "$warn_gcc_version"; then
  AC_MSG_WARN($warn_gcc_version)
  warn_msg_printed=true
fi

if test -n "$warn_gcc_only"; then
  AC_MSG_WARN($warn_gcc_only)
  warn_msg_printed=true
fi

if test -n "$warn_readline"; then
  AC_MSG_WARN($warn_readline)
  warn_msg_printed=true
fi

if test -n "$warn_termlibs"; then
  AC_MSG_WARN($warn_termlibs)
  warn_msg_printed=true
fi

if test -n "$warn_gperf"; then
  AC_MSG_WARN($warn_gperf)
  warn_msg_printed=true
fi

if test -n "$warn_flex"; then
  AC_MSG_WARN($warn_flex)
  warn_msg_printed=true
fi

if test -n "$warn_bison"; then
  AC_MSG_WARN($warn_bison)
  warn_msg_printed=true
fi

if test -n "$warn_less"; then
  AC_MSG_WARN($warn_less)
  warn_msg_printed=true
fi

if test -n "$warn_blas_f77_incompatible"; then
  AC_MSG_WARN($warn_blas_f77_incompatible)
  warn_msg_printed=true
fi

if test -n "$warn_umfpack"; then
  AC_MSG_WARN($warn_umfpack)
  warn_msg_printed=true
fi

if test -n "$warn_qrupdate"; then
  AC_MSG_WARN($warn_qrupdate)
  warn_msg_printed=true
fi

if test -n "$warn_amd"; then
  AC_MSG_WARN($warn_amd)
  warn_msg_printed=true
fi

if test -n "$warn_colamd"; then
  AC_MSG_WARN($warn_colamd)
  warn_msg_printed=true
fi

if test -n "$warn_ccolamd"; then
  AC_MSG_WARN($warn_ccolamd)
  warn_msg_printed=true
fi

if test -n "$warn_cholmod"; then
  AC_MSG_WARN($warn_cholmod)
  warn_msg_printed=true
fi

if test -n "$warn_cxsparse"; then
  AC_MSG_WARN($warn_cxsparse)
  warn_msg_printed=true
fi

if test -n "$warn_arpack"; then
  AC_MSG_WARN($warn_arpack)
  warn_msg_printed=true
fi

if test -n "$warn_curl"; then
  AC_MSG_WARN($warn_curl)
  warn_msg_printed=true
fi

if test -n "$warn_fftw"; then
  AC_MSG_WARN($warn_fftw)
  warn_msg_printed=true
fi

if test -n "$warn_glpk"; then
  AC_MSG_WARN($warn_glpk)
  warn_msg_printed=true
fi

if test -n "$warn_magick"; then
  AC_MSG_WARN($warn_magick)
  warn_msg_printed=true
fi

if test -n "$warn_hdf5"; then
  AC_MSG_WARN($warn_hdf5)
  warn_msg_printed=true
fi

if test -n "$warn_regex"; then
  AC_MSG_WARN($warn_regex)
  warn_msg_printed=true
fi

if test -n "$warn_pcre"; then
  AC_MSG_WARN($warn_pcre)
  warn_msg_printed=true
fi

if test -n "$warn_qhull"; then
  AC_MSG_WARN($warn_qhull)
  warn_msg_printed=true
fi

if test -n "$warn_zlib"; then
  AC_MSG_WARN($warn_zlib)
  warn_msg_printed=true
fi

if test -n "$warn_ghostscript"; then
  AC_MSG_WARN($warn_ghostscript)
  warn_msg_printed=true
fi

if test -n "$warn_makeinfo"; then
  AC_MSG_WARN($warn_makeinfo)
  warn_msg_printed=true
fi

if test -n "$warn_texi2dvi"; then
  AC_MSG_WARN($warn_texi2dvi)
  warn_msg_printed=true
fi

if test -n "$warn_texi2pdf"; then
  AC_MSG_WARN($warn_texi2pdf)
  warn_msg_printed=true
fi

if test -n "$warn_64_bit"; then
  AC_MSG_WARN($warn_64_bit)
  warn_msg_printed=true
fi

if test -n "$warn_gnuplot"; then

  ## If you change this text, be sure to also change the corresponding
  ## set of warnings above.

  AC_MSG_WARN([])
  AC_MSG_WARN([I didn't find gnuplot.  It isn't necessary to have gnuplot])
  AC_MSG_WARN([installed, but you won't be able to use any of Octave's])
  AC_MSG_WARN([plotting commands without it.])
  AC_MSG_WARN([])
  AC_MSG_WARN([If gnuplot is installed but it isn't in your path, you can])
  AC_MSG_WARN([tell Octave where to find it by typing the command])
  AC_MSG_WARN([])
  AC_MSG_WARN([gnuplot_binary = "/full/path/to/gnuplot/binary"])
  AC_MSG_WARN([])
  AC_MSG_WARN([at the Octave prompt.])
  AC_MSG_WARN([])
  warn_msg_printed=true
fi

if $USE_64_BIT_IDX_T; then
  AC_MSG_WARN([])
  AC_MSG_WARN([You used the EXPERIMENTAL --enable-64 option.])
  AC_MSG_WARN([Are you sure that is what you want to do?])
  AC_MSG_WARN([])
  AC_MSG_WARN([You must ensure that the Fortran compiler generates])
  AC_MSG_WARN([code with 8 byte signed INTEGER values, and that your])
  AC_MSG_WARN([BLAS and LAPACK libraries are compiled to use 8 byte])
  AC_MSG_WARN([signed integers for array indexing.])
  AC_MSG_WARN([])
  warn_msg_printed=true
fi

native_graphics=true
if test -n "$warn_freetype"; then
  AC_MSG_WARN("$warn_freetype")
  native_graphics=false
  warn_msg_printed=true
fi

if test -n "$warn_ftgl"; then
  AC_MSG_WARN("$warn_ftgl")
  native_graphics=false
  warn_msg_printed=true
fi

if test -n "$warn_fltk_config"; then
  AC_MSG_WARN("$warn_fltk_config")
  native_graphics=false
  warn_msg_printed=true
fi

if test -n "$warn_fltk_opengl"; then
  AC_MSG_WARN("$warn_fltk_opengl")
  native_graphics=false
  warn_msg_printed=true
fi

if $native_graphics; then
  true;
else
  AC_MSG_WARN([])
  AC_MSG_WARN([I didn't find the necessary libraries to compile native])
  AC_MSG_WARN([graphics. It isn't necessary to have native graphics])
  AC_MSG_WARN([but you will have to use gnuplot or you won't be able])
  AC_MSG_WARN([to use any of Octave's plotting commands])
  AC_MSG_WARN([])
  warn_msg_printed=true
fi

if $warn_msg_printed; then
  AC_MSG_NOTICE([

NOTE: libraries may be skipped if a library is not found OR
      if the library on your system is missing required features.
])
fi

### End of configure.
