dnl Process this file with autoconf to produce a configure script

dnl ------------------------------------------------
dnl Initialization and Versioning
dnl ------------------------------------------------

AC_INIT
AC_PREREQ(2.52)
AC_CONFIG_SRCDIR(src/gs.c)

dnl --------------------------------------------------  
dnl Check for programs
dnl --------------------------------------------------  

dnl AC_PROG_CC likes to add '-g -O2' to CFLAGS. however,
dnl we ignore those flags and construct our own.
AC_PROG_CC
AC_PROG_CPP

AC_PROG_RANLIB
#AC_PROG_INSTALL

dnl --------------------------------------------------
dnl Set build flags based on environment
dnl --------------------------------------------------

#AC_CANONICAL_HOST

dnl Add our standard set of gcc flags if possible
if test $ac_cv_prog_gcc = yes; then
cflags_to_try="-Wall -Wstrict-prototypes -Wmissing-declarations \
-Wmissing-prototypes -Wcast-qual -Wwrite-strings \
-fno-builtin -fno-common"
else
	cflags_to_try=
fi

AC_MSG_CHECKING([supported compiler flags])
old_cflags=$CFLAGS
echo
for flag in $cflags_to_try; do
	CFLAGS="$CFLAGS $flag"
	AC_TRY_COMPILE(, [return 0;], [
		echo "   $flag"
		GCFLAGS="$GCFLAGS $flag"
	])
	CFLAGS=$old_cflags
done
AC_MSG_RESULT([ ...done.])


dnl --------------------------------------------------
dnl Check for headers
dnl --------------------------------------------------

AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS([errno.h fcntl.h limits.h malloc.h memory.h stdlib.h string.h strings.h sys/ioctl.h sys/param.h sys/time.h syslog.h unistd.h])

# for gdev3b1.c (AT&T terminal interface)
AC_CHECK_HEADER([sys/window.h])

dnl --------------------------------------------------
dnl Check for typedefs, structures, etc
dnl --------------------------------------------------

AC_C_CONST
AC_C_INLINE
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_SIZE_T
AC_STRUCT_ST_BLOCKS
AC_HEADER_TIME
AC_STRUCT_TM

dnl we aren't interested in all of DEFS, so manually insert
dnl the flags we care about
if test "$ac_cv_c_const" = yes; then
	GCCFLAGS="$GCCFLAGS -Dconst="
fi

dnl --------------------------------------------------
dnl Check for libraries
dnl --------------------------------------------------

AC_CHECK_LIB(m, cos)
dnl AC_CHECK_LIB(pthread, pthread_create)

AC_MSG_CHECKING([for local jpeg library source])
dnl At present, we give the local source priority over the shared
dnl build, so that the D_MAX_BLOCKS_IN_MCU patch will be applied.
dnl A more sophisticated approach would be to test the shared lib
dnl to see whether it has already been patched.
LIBJPEGDIR=src
if test -d jpeg; then
	AC_MSG_RESULT([jpeg])
	SHARE_LIBJPEG=0
	LIBJPEGDIR=jpeg
elif test -d jpeg-6b; then
	AC_MSG_RESULT([jpeg-6b])
	SHARE_LIBJPEG=0
	LIBJPEGDIR=jpeg-6b
else
	AC_MSG_RESULT([no])
	AC_CHECK_LIB(jpeg, jpeg_set_defaults, [SHARE_LIBJPEG=1], [
		AC_MSG_ERROR([I wasn't able to find a copy
  of the jpeg library. This is required for compiling
  ghostscript. Please download a copy of the source,  e.g.
  from http://www.ijg.org/, unpack it at the top level of 
  the gs source tree, and rename the directory to 'jpeg'.
		])
	])
fi
AC_SUBST(SHARE_LIBJPEG)
AC_SUBST(LIBJPEGDIR)

dnl these are technically optional

AC_MSG_CHECKING([for local zlib source])
dnl zlib is needed for language level 3, and libpng
# we must define ZLIBDIR regardless because libpng.mak does a -I$(ZLIBDIR)
# this seems a harmless default
ZLIBDIR=src
if test -d zlib; then
	AC_MSG_RESULT([zlib])
	SHARE_ZLIB=0
	ZLIBDIR=zlib
elif test -d zlib-1.1.4; then
	AC_MSG_RESULT([zlib-1.1.4])
	SHARE_ZLIB=0
	ZLIBDIR=zlib-1.1.4
else
	AC_MSG_RESULT([no])
	AC_CHECK_LIB(z, deflate, [SHARE_ZLIB=1], [
		AC_MSG_ERROR([I did not find a copy of libz on your system.
  Please either install it, or unpack a copy of the source in a
  local directory named 'zlib'.
		])
	])
fi
AC_SUBST(SHARE_ZLIB)
AC_SUBST(ZLIBDIR)

dnl png for the png output device; it also requires zlib
AC_MSG_CHECKING([for local png library source])
LIBPNGDIR=src
PNGDEVS='$(DD)png16m.dev $(DD)pnggray.dev $(DD)pngmono.dev $(DD)png256.dev $(DD)png16.dev'
if test -d libpng; then
	AC_MSG_RESULT([libpng])
	SHARE_LIBPNG=0
	LIBPNGDIR=libpng
elif test -d libpng-1.2.2; then
	AC_MSG_RESULT([libpng-1.2.2])
	SHARE_LIBPNG=0
	LIBPNGDIR=libpng-1.2.2
else
	AC_MSG_RESULT([no])
	AC_CHECK_LIB(png, png_check_sig, [
		SHARE_LIBPNG=1
	], [
		SHARE_LIBPNG=0
		AC_MSG_NOTICE([disabling png output devices])
		PNGDEVS=''
	])
fi
AC_SUBST(SHARE_LIBPNG)
AC_SUBST(LIBPNGDIR)
AC_SUBST(PNGDEVS)

dnl look for IJS implementation
AC_ARG_WITH(ijs, AC_HELP_STRING([--with-ijs],[include IJS driver support]))
dnl set safe defaults
    IJSDIR=src
    IJSDEVS=''
if test x$with_ijs != xno; then
    AC_MSG_CHECKING([for local ijs library source])
    if test -d ijs; then
        AC_MSG_RESULT([yes])
        IJSDIR=ijs
        IJSDEVS='$(DD)ijs.dev'
    else
        AC_MSG_RESULT([no])
    fi
fi
AC_SUBST(IJSDIR)
AC_SUBST(IJSDEVS)

dnl look for gimp-print (stp) library implementation
AC_ARG_WITH([gimp-print], AC_HELP_STRING([--with-gimp-print],
	[build the gimp-print (stp) driver]))
dnl set safe defaults
    STPLIB=gimpprint
    STPDEVS=''
if test x$with_gimp_print != xno; then
    AC_CHECK_LIB($STPLIB, stp_init, [
       AC_CHECK_HEADER([gimp-print/gimp-print.h], [
           STPDEVS='$(DD)stp.dev'
       ])
    ])
fi
AC_SUBST(STPLIB)
AC_SUBST(STPDEVS)

dnl optional X11 for display devices
AC_PATH_XTRA
if test x"$no_x" = x"yes"; then
	AC_MSG_NOTICE([disabling X11 output devices])
	X11DEVS=''
else
	X11DEVS='$(DD)x11.dev $(DD)x11alpha.dev $(DD)x11cmyk.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev'
fi
AC_SUBST(X11DEVS)


dnl --------------------------------------------------
dnl Check for library functions
dnl --------------------------------------------------

AC_CHECK_FUNCS([mkstemp], [HAVE_MKSTEMP=-DHAVE_MKSTEMP])
AC_SUBST(HAVE_MKSTEMP)

AC_FUNC_FORK
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MALLOC
AC_FUNC_MEMCMP
AC_TYPE_SIGNAL
AC_FUNC_STAT
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([bzero dup2 floor gettimeofday memchr memmove memset mkdir mkfifo modf pow putenv rint setenv sqrt strchr strerror strrchr strspn strstr])

dnl --------------------------------------------------
dnl Do substitutions
dnl --------------------------------------------------

AC_SUBST(GCFLAGS)
AC_OUTPUT(Makefile)
