dnl Process this file with autoconf to produce a configure script.
dnl Author: Michael Patra   <micky@marie.physik.tu-berlin.de>
dnl                         <patra@itp1.physik.tu-berlin.de>
AC_REVISION([configure.in 1.00])
AC_INIT(controls/edit.c)		
AC_CONFIG_HEADER(include/config.h)
AC_CONFIG_AUX_DIR(tools)

# We want these before the checks, so the checks can modify their values.

test -z "$PROGEXT" && PROGEXT="" AC_SUBST(PROGEXT)

dnl **** Command-line arguments ****

dnl Default values
MAIN_TARGET=emu
LIB_TARGET=libwine.a
ALT_LINK="-L\$(TOPOBJDIR) -lwine"
TRACE_MSGS=yes	# the TRACE() macro
DEBUG_MSGS=yes	# the TRACE(), WARN(), and FIXME() macros.

AC_ARG_ENABLE(emulator,
[  --disable-emulator      build only the Wine library, not the emulator],
[if test "$enableval" = "no"; then MAIN_TARGET="lib"; fi])

AC_ARG_ENABLE(dll,
[  --enable-dll            build the Wine library as a DLL],
[if test "$enableval" = "no"; then : ; else LIB_TARGET="libwine.so.1.0"; fi])

AC_ARG_ENABLE(lib,
[  --disable-lib           build the Wine without building libwine.a],
[if test "$enableval" = "no"; then ALT_LINK="\$(LIBOBJS) \$(X11OBJS)"; LIB_TARGET=""; fi])

AC_ARG_ENABLE(debug,
[  --disable-debug         compile out all debugging messages],
[if test "$enableval" = "no"; then DEBUG_MSGS="no"; fi])

AC_ARG_ENABLE(trace,
[  --disable-trace         compile out TRACE messages],
[if test "$enableval" = "no"; then TRACE_MSGS="no"; fi])

AC_ARG_WITH(reentrant-x,
[  --without-reentrant-x   compile for use with non-reentrant X libraries])

AC_SUBST(MAIN_TARGET)
AC_SUBST(LIB_TARGET)
AC_SUBST(ALT_LINK)
AC_SUBST(OPTIONS)

if test "$DEBUG_MSGS" = "no"
then
    AC_DEFINE(NO_DEBUG_MSGS)
    AC_DEFINE(NO_TRACE_MSGS)
else
    if test "$TRACE_MSGS" = "no"
    then
        AC_DEFINE(NO_TRACE_MSGS)
    fi
fi

dnl **** Check for some programs ****

AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_CPP
AC_PATH_XTRA
AC_PROG_YACC
AC_PROG_LEX
AC_PROG_RANLIB
AC_PROG_INSTALL
AC_PROG_LN_S
AC_CHECK_PROG(C2MAN,c2man,c2man,true)
AC_PATH_PROG(LDCONFIG, ldconfig, false, /sbin:/usr/sbin:$PATH)

dnl Check for lint
AC_CHECK_PROGS(LINT, lclint lint)
if test "$LINT" = "lint"
then
  LINTFLAGS="$LINTFLAGS -errchk=%all,no%longptr64 -errhdr=%user -Ncheck=macro -Nlevel=4"
  dnl LINTFLAGS='-D_SIZE_T "-Dsize_t=unsigned long" -errchk=longptr64'
fi
AC_SUBST(LINT)
AC_SUBST(LINTFLAGS)

dnl **** Check for some libraries ****

dnl Check for -lm for BeOS
AC_CHECK_LIB(m,sqrt)
dnl Check for -li386 for NetBSD and OpenBSD
AC_CHECK_LIB(i386,i386_set_ldt)
dnl Check for -lossaudio for NetBSD
AC_CHECK_LIB(ossaudio,_oss_ioctl)
dnl Check for -lw for Solaris
AC_CHECK_LIB(w,iswalnum)
dnl Check for -lnsl for Solaris
AC_CHECK_FUNCS(gethostbyname,, AC_CHECK_LIB(nsl, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl", AC_CHECK_LIB(socket, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl", , -lnsl), -lsocket))
dnl Check for -lsocket for Solaris
AC_CHECK_FUNCS(connect,,AC_CHECK_LIB(socket,connect))
dnl Check for -lxpg4 for FreeBSD
AC_CHECK_LIB(xpg4,setrunelocale)
dnl Check for -lmmap for OS/2
AC_CHECK_LIB(mmap,mmap)
dnl Check for openpty
AC_CHECK_FUNCS(openpty,,
	AC_CHECK_LIB(util,openpty,
		AC_DEFINE(HAVE_OPENPTY)
		LIBS="$LIBS -lutil"
	))

AC_CHECK_HEADERS(dlfcn.h,
	AC_CHECK_FUNCS(dlopen,
		AC_DEFINE(HAVE_DL_API),
    		AC_CHECK_LIB(dl,dlopen,
			AC_DEFINE(HAVE_DL_API)
			LIBS="$LIBS -ldl"
		)
	)
)
AC_SUBST(XLIB)
if test "$have_x" = "yes"
then
    XLIB="-lXext -lX11"
    ac_save_CPPFLAGS="$CPPFLAGS"
    CPPFLAGS="$CPPFLAGS $X_CFLAGS"

    dnl Check for -lXpm
    AC_CHECK_HEADERS(X11/xpm.h)
    if test "$ac_cv_header_X11_xpm_h" = "yes"
    then 
        AC_CHECK_LIB(Xpm,XpmCreatePixmapFromData,AC_DEFINE(HAVE_LIBXXPM) X_PRE_LIBS="$X_PRE_LIBS -lXpm",,$X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
    else
    	echo "When compiling with X support, you need the Xpm library, or"
	echo "WINE will not work. This Xpm library is within the following RPM,"
	echo "which you need to install:"
	echo "Redhat		:	xpm, xpm-devel"
	echo "Caldera OpenLinux	:	xpm, xpm-devel, xpm-devel-static"
	echo "SuSE:			xpm"
	echo
	echo "Or get the sources from ftp.x.org and all its mirror sites from "
	echo "the directory /contrib/libraries."
	echo
	exit 1
    fi


    dnl Check for X Shm extension
    AC_CHECK_HEADERS(X11/Xlib.h X11/extensions/XShm.h)
    if test "$ac_cv_header_X11_Xlib_h" = "yes" -a "$ac_cv_header_X11_extensions_XShm_h" = "yes"
    then 
        AC_CHECK_LIB(Xext,XShmQueryExtension,AC_DEFINE(HAVE_LIBXXSHM),,$X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
    fi
    dnl Check for XFree86 DGA / DGA 2.0 extension
    AC_CHECK_HEADERS(X11/Xlib.h X11/extensions/xf86dga.h)
    if test "$ac_cv_header_X11_Xlib_h" = "yes" -a "$ac_cv_header_X11_extensions_xf86dga_h" = "yes"
    then 
         AC_CHECK_LIB(Xxf86dga,XDGAQueryExtension,AC_DEFINE(HAVE_LIBXXF86DGA2) X_PRE_LIBS="$X_PRE_LIBS -lXxf86dga",,$X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
	 if test "$ac_cv_lib_Xxf86dga_XDGAQueryExtension" = "no"
	 then
           AC_CHECK_LIB(Xxf86dga,XF86DGAQueryExtension,AC_DEFINE(HAVE_LIBXXF86DGA) X_PRE_LIBS="$X_PRE_LIBS -lXxf86dga",,$X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
	 fi
    fi

    dnl Check for XFree86 VMODE extension
    AC_CHECK_HEADERS(X11/Xlib.h X11/extensions/xf86vmode.h)
    if test "$ac_cv_header_X11_Xlib_h" = "yes" -a "$ac_cv_header_X11_extensions_xf86vmode_h" = "yes"
    then 
        AC_CHECK_LIB(Xxf86vm,XF86VidModeQueryExtension,AC_DEFINE(HAVE_LIBXXF86VM) X_PRE_LIBS="$X_PRE_LIBS -lXxf86vm",,$X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
    fi

    dnl Check for the presence of Mesa
    AC_CHECK_HEADERS(GL/gl.h GL/glx.h GL/osmesa.h)
    if test "$ac_cv_header_GL_gl_h" = "yes" -a "$ac_cv_header_GL_glx_h" = "yes"
    then
        dnl Check for some problems due to old Mesa versions
        AC_CACHE_CHECK("for up-to-date Mesa version", wine_cv_mesa_version_OK,
          AC_TRY_COMPILE(
            [#include <GL/gl.h>],
            [GLenum test = GL_UNSIGNED_SHORT_5_6_5;],
            [wine_cv_mesa_version_OK="yes"],
            [wine_cv_mesa_version_OK="no"]
	  )
        )

        if test "$wine_cv_mesa_version_OK" = "yes"
        then
	    dnl Check for the presense of the library
            AC_CHECK_LIB(GL,glXCreateContext,AC_DEFINE(HAVE_LIBMESAGL) X_PRE_LIBS="$X_PRE_LIBS -lGL",,$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
	    if test "$ac_cv_lib_GL_glXCreateContext" = "no"
	    then
		AC_CHECK_LIB(MesaGL,glXCreateContext,AC_DEFINE(HAVE_LIBMESAGL) X_PRE_LIBS="$X_PRE_LIBS -lMesaGL",,$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
	    fi

	    dnl Check for the Color Table and Paletted Texture extensions
	    AC_CACHE_CHECK("for the OpenGL Color Index extension",dummy,
              AC_TRY_COMPILE(
		[#include <GL/gl.h>],
		[GLenum test = GL_COLOR_INDEX8_EXT;],
		[AC_DEFINE(HAVE_GL_COLOR_TABLE)],
	      )
	    )
    	    if test "$ac_cv_lib_GL_glXCreateContext" = "no"
	    then
		AC_CHECK_LIB(MesaGL,glColorTableEXT,AC_DEFINE(HAVE_GL_PALETTED_TEXTURE),,$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
	    else
		AC_CHECK_LIB(GL,glColorTableEXT,AC_DEFINE(HAVE_GL_PALETTED_TEXTURE),,$X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)
	    fi
        fi
    fi

    CPPFLAGS="$ac_save_CPPFLAGS"
else
    XLIB=""
    X_CFLAGS=""
    X_LIBS=""
fi

dnl **** Check which curses lib to use ***
AC_CHECK_HEADERS(ncurses.h)
if test "$ac_cv_header_ncurses_h" = "yes"
then 
    AC_CHECK_LIB(ncurses,waddch)
fi
if test "$ac_cv_lib_ncurses_waddch" = "yes"
then
    AC_CHECK_LIB(ncurses,resizeterm,AC_DEFINE(HAVE_RESIZETERM))
    AC_CHECK_LIB(ncurses,getbkgd,AC_DEFINE(HAVE_GETBKGD))
else
    AC_CHECK_HEADERS(curses.h)
    if test "$ac_cv_header_curses_h" = "yes"
    then    
       AC_CHECK_LIB(curses,waddch)
       AC_CHECK_LIB(curses,resizeterm,AC_DEFINE(HAVE_RESIZETERM))
       AC_CHECK_LIB(curses,getbkgd,AC_DEFINE(HAVE_GETBKGD))
    fi
fi

dnl **** Check for IPX (currently Linux only) ****
AC_CACHE_CHECK("for GNU style IPX support", ac_cv_c_ipx_gnu,
 AC_TRY_COMPILE(
   [#include <sys/socket.h>
    #include <netipx/ipx.h>],
   [((struct sockaddr_ipx *)0)->sipx_family == AF_IPX],
   [AC_DEFINE(HAVE_IPX_GNU)
    ac_cv_c_ipx_gnu="yes"],
   [ac_cv_c_ipx_gnu="no"])
 )

if test "$ac_cv_c_ipx_gnu" = "no"
then
 AC_CACHE_CHECK("for linux style IPX support", ac_cv_c_ipx_linux,
  AC_TRY_COMPILE(
    [#include <sys/socket.h>
     #include <asm/types.h>
     #include <linux/ipx.h>],
    [((struct sockaddr_ipx *)0)->sipx_family == AF_IPX],
    [AC_DEFINE(HAVE_IPX_LINUX)
     ac_cv_c_ipx_linux="yes"],
    [ac_cv_c_ipx_linux="no"])
  )
fi

dnl **** Check for Open Sound System ****
AC_CHECK_HEADERS(sys/soundcard.h machine/soundcard.h soundcard.h, break)

AC_CACHE_CHECK("for Open Sound System",
	ac_cv_c_opensoundsystem,
	AC_TRY_COMPILE([
	#if defined(HAVE_SYS_SOUNDCARD_H)
		#include <sys/soundcard.h>
	#elif defined(HAVE_MACHINE_SOUNDCARD_H)
		#include <machine/soundcard.h>
	#elif defined(HAVE_SOUNDCARD_H)
		#include <soundcard.h>
	#endif
	],[

/* check for one of the Open Sound System specific SNDCTL_ defines */
#if !defined(SNDCTL_DSP_STEREO)
#error No open sound system
#endif
],ac_cv_c_opensoundsystem="yes",ac_cv_c_opensoundsystem="no"))

if test "$ac_cv_c_opensoundsystem" = "yes"
then
    AC_DEFINE(HAVE_OSS)
fi

AC_CACHE_CHECK("for Open Sound System/MIDI interface",
	ac_cv_c_opensoundsystem_midi,
	AC_TRY_COMPILE([
	#if defined(HAVE_SYS_SOUNDCARD_H)
		#include <sys/soundcard.h>
	#elif defined(HAVE_MACHINE_SOUNDCARD_H)
		#include <machine/soundcard.h>
	#elif defined(HAVE_SOUNDCARD_H)
		#include <soundcard.h>
	#endif
	],[

/* check for one of the Open Sound System specific SNDCTL_SEQ defines */
#if !defined(SNDCTL_SEQ_SYNC)
#error No open sound system MIDI interface
#endif
],ac_cv_c_opensoundsystem_midi="yes",ac_cv_c_opensoundsystem_midi="no"))

if test "$ac_cv_c_opensoundsystem_midi" = "yes"
then
    AC_DEFINE(HAVE_OSS_MIDI)
fi

dnl **** If ln -s doesn't work, use cp instead ****
if test "$ac_cv_prog_LN_S" = "ln -s"; then : ; else LN_S=cp ; fi

dnl **** Check for gcc strength-reduce bug ****

if test "x${GCC}" = "xyes"
then
  CFLAGS="$CFLAGS -Wall"
  AC_CACHE_CHECK( "for gcc strength-reduce bug", ac_cv_c_gcc_strength_bug,
                  AC_TRY_RUN([
int main(void) {
  static int Array[[3]];
  unsigned int B = 3;
  int i;
  for(i=0; i<B; i++) Array[[i]] = i - 3;
  exit( Array[[1]] != -2 );
}],
    ac_cv_c_gcc_strength_bug="no",
    ac_cv_c_gcc_strength_bug="yes",
    ac_cv_c_gcc_strength_bug="yes") )
  if test "$ac_cv_c_gcc_strength_bug" = "yes"
  then
    CFLAGS="$CFLAGS -fno-strength-reduce"
  fi
fi

dnl **** Check for underscore on external symbols ****

AC_CACHE_CHECK("whether external symbols need an underscore prefix",
               ac_cv_c_extern_prefix,
[saved_libs=$LIBS
LIBS="conftest_asm.s $LIBS"
cat > conftest_asm.s <<EOF
	.globl _ac_test
_ac_test:
	.long 0
EOF
AC_TRY_LINK([extern int ac_test;],[if (ac_test) return 1],
            ac_cv_c_extern_prefix="yes",ac_cv_c_extern_prefix="no")
LIBS=$saved_libs])
if test "$ac_cv_c_extern_prefix" = "yes"
then
  AC_DEFINE(NEED_UNDERSCORE_PREFIX)
fi

dnl **** Check for .string in assembler ****

AC_CACHE_CHECK("whether assembler accepts .string",
               ac_cv_c_asm_string,
[saved_libs=$LIBS
LIBS="conftest_asm.s $LIBS"
cat > conftest_asm.s <<EOF
	.string "test"
EOF
AC_TRY_LINK(,,ac_cv_c_asm_string="yes",ac_cv_c_asm_string="no")
LIBS=$saved_libs])
if test "$ac_cv_c_asm_string" = "yes"
then
  AC_DEFINE(HAVE_ASM_STRING)
fi

dnl **** Check for working dll ****

DLLFLAGS=""
BUILDFLAGS=""
LDSHARED=""
if test "$LIB_TARGET" = "libwine.so.1.0"
then
  AC_CACHE_CHECK("whether we can build a Linux dll",
                 ac_cv_c_dll_linux,
  [saved_cflags=$CFLAGS
  CFLAGS="$CFLAGS -fPIC -shared -Wl,-soname,conftest.so.1.0"
  AC_TRY_LINK(,[return 1],ac_cv_c_dll_linux="yes",ac_cv_c_dll_linux="no")
  CFLAGS=$saved_cflags
  ])
  if test "$ac_cv_c_dll_linux" = "yes"
  then
    BUILDFLAGS="-pic"
    DLLFLAGS="-fPIC"
    LDSHARED="\$(CC) -shared -Wl,-soname,libwine.so,-rpath,\$(libdir)"
  else
    AC_CACHE_CHECK("whether we can build a UnixWare dll",
                 ac_cv_c_dll_unixware,
    [saved_cflags=$CFLAGS
    CFLAGS="$CFLAGS -fPIC -Wl,-G,conftest.so.1.0"
    AC_TRY_LINK(,[return 1],ac_cv_c_dll_unixware="yes",ac_cv_c_dll_unixware="no")
    CFLAGS=$saved_cflags
    ])
    if test "$ac_cv_c_dll_unixware" = "yes"
    then
      BUILDFLAGS="-pic"
      DLLFLAGS="-fPIC"
      LDSHARED="\$(CC) -Wl,-G,-h,\$(libdir)/libwine.so"
    else
      AC_CACHE_CHECK("whether we can build a NetBSD dll",
                   ac_cv_c_dll_netbsd,
      [saved_cflags=$CFLAGS
      CFLAGS="$CFLAGS -fPIC -Bshareable -Bforcearchive"
      AC_TRY_LINK(,[return 1],ac_cv_c_dll_netbsd="yes",ac_cv_c_dll_netbsd="no")
      CFLAGS=$saved_cflags
      ])
      if test "$ac_cv_c_dll_netbsd" = "yes"
      then
        BUILDFLAGS="-pic"
        DLLFLAGS="-fPIC"
        LDSHARED="ld -Bshareable -Bforcearchive"
      fi
    fi
  fi
  if test "$ac_cv_c_dll_linux" = "no" -a "$ac_cv_c_dll_unixware" = "no" -a "$ac_cv_c_dll_netbsd" = "no"
  then
    LIB_TARGET="libwine.a"
  fi
fi
AC_SUBST(BUILDFLAGS)
AC_SUBST(DLLFLAGS)
AC_SUBST(LDSHARED)

dnl **** Check for reentrant libc ****
dnl
dnl For cross-compiling we blindly assume that libc is reentrant. This is
dnl ok since non-reentrant libc is quite rare (mostly old libc5 versions).

wine_cv_libc_reentrant=no 
dnl 
dnl Linux style errno location
dnl 
AC_CACHE_CHECK("for reentrant libc: __errno_location", wine_cv_libc_r__errno_location,
  [AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *__errno_location(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
  wine_cv_libc_r__errno_location=yes, wine_cv_libc_r__errno_location=no,
  wine_cv_libc_r__errno_location=yes )
])
if test "$wine_cv_libc_r__errno_location" = "yes"
then
    AC_DEFINE(HAVE__ERRNO_LOCATION)
    wine_cv_libc_reentrant=__errno_location 
fi
dnl
dnl FreeBSD style errno location
dnl 
AC_CACHE_CHECK("for reentrant libc: __error", wine_cv_libc_r__error,
  [AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *__error(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
    wine_cv_libc_r__error=yes, wine_cv_libc_r__error=no,
    wine_cv_libc_r__error=yes )
])
if test "$wine_cv_libc_r__error" = "yes"
then
    AC_DEFINE(HAVE__ERROR)
    wine_cv_libc_reentrant=__error 
fi
dnl
dnl Solaris style errno location
dnl 
AC_CACHE_CHECK("for reentrant libc: ___errno", wine_cv_libc_r___errno,
  [AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *___errno(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
    wine_cv_libc_r___errno=yes, wine_cv_libc_r___errno=no,
    wine_cv_libc_r___errno=yes )
])
if test "$wine_cv_libc_r___errno" = "yes"
then
    AC_DEFINE(HAVE___ERRNO)
    wine_cv_libc_reentrant=___errno 
fi
dnl
dnl UnixWare style errno location
dnl 
AC_CACHE_CHECK("for reentrant libc: __thr_errno", wine_cv_libc_r__thr_errno,
  [AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *__thr_errno(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
    wine_cv_libc_r__thr_errno=yes, wine_cv_libc_r__thr_errno=no,
    wine_cv_libc_r__thr_errno=yes )
])
if test "$wine_cv_libc_r__thr_errno" = "yes"
then
    AC_DEFINE(HAVE__THR_ERRNO)
    wine_cv_libc_reentrant=__thr_errno 
fi
if test "$wine_cv_libc_reentrant" = "no" 
then
  AC_DEFINE(NO_REENTRANT_LIBC)
fi

dnl **** Check for reentrant X libraries ****
dnl
dnl This may fail to determine whether X libraries are reentrant if
dnl AC_PATH_XTRA does not set x_libraries. In this case manual configuration
dnl is possible with the --without-reentrant-x option.

if test "$have_x" = "yes" -a "$wine_cv_libc_reentrant" != "no"
then
AC_CACHE_CHECK( "for reentrant X libraries", wine_cv_x_reentrant,
  [ if test "x$with_reentrant_x" = "xno" 
    then
        wine_cv_x_reentrant=no
    else
	libX11_check=none
	for dir in "$x_libraries" /usr/lib /usr/local/lib /lib; do
	    if test -r $dir/libX11.so; then
		libX11_check="-D $dir/libX11.so"
		break 1
	    fi
	    if test -r $dir/libX11.a; then
		libX11_check="$dir/libX11.a"
		break 1
	    fi
	done
	if test "$libX11_check" != "none"; then
	    if nm $libX11_check | grep $wine_cv_libc_reentrant >/dev/null 2>&1
	    then
		wine_cv_x_reentrant=yes
	    else
		wine_cv_x_reentrant=no
	    fi
	else
	    wine_cv_x_reentrant=unknown
	fi
    fi ] )
else
    wine_cv_x_reentrant=no
fi
if test "$wine_cv_x_reentrant" = "no"
then
  AC_DEFINE(NO_REENTRANT_X11)
fi

dnl **** Check for endianness ****

AC_C_BIGENDIAN

dnl **** Check for functions ****

AC_FUNC_ALLOCA()
AC_CHECK_FUNCS(\
	_lwp_create \
	clone \
	getnetbyaddr \
	getnetbyname \
	getpagesize \
	getprotobyname \
	getprotobynumber \
	getservbyport \
	getsockopt \
	inet_network \
	memmove \
	rfork \
	select \
	sendmsg \
	settimeofday \
	sigaltstack \
	statfs \
	strcasecmp \
	strerror \
	strncasecmp \
	tcgetattr \
	timegm \
	usleep \
	vfscanf \
	wait4 \
	waitpid \
)

dnl **** Check for header files ****

AC_CHECK_HEADERS(\
	a.out.h \
	a_out.h \
	arpa/inet.h \
	arpa/nameser.h \
	curses.h \
	elf.h \
	float.h \
	libio.h \
	link.h \
	linux/cdrom.h \
	linux/joystick.h \
	linux/ucdrom.h \
	ncurses.h \
	net/if.h \
	netinet/in.h \
	netinet/tcp.h \
	pty.h \
	resolv.h \
	sched.h \
	socket.h \
	strings.h \
	sys/cdio.h \
	sys/errno.h \
	sys/file.h \
	sys/filio.h \
	sys/ipc.h \
	sys/lwp.h \
	sys/mman.h \
	sys/modem.h \
	sys/mount.h \
	sys/msg.h \
	sys/param.h \
	sys/signal.h \
	sys/shm.h \
	sys/socket.h \
	sys/sockio.h \
	sys/statfs.h \
	sys/strtio.h \
	sys/syscall.h \
	sys/wait.h \
	sys/v86.h \
	sys/v86intr.h \
	sys/vfs.h \
	sys/vm86.h \
	syscall.h \
	ucontext.h \
	wctype.h \
)
AC_HEADER_STAT()

dnl **** Check for types ****

AC_C_CONST()
AC_C_INLINE()
AC_TYPE_SIZE_T()
AC_CHECK_SIZEOF(long long,0)

if test "$ac_cv_header_linux_joystick_h" = "yes"
then
   AC_CACHE_CHECK("whether linux/joystick.h uses the Linux 2.2+ API",
   	wine_cv_linux_joystick_22_api,
	AC_TRY_COMPILE([
	#include <sys/ioctl.h>
	#include <linux/joystick.h>

	struct js_event blub;
	#if !defined(JS_EVENT_AXIS) || !defined(JS_EVENT_BUTTON)
	#error "no 2.2 header"
	#endif
	],/*empty*/,
	wine_cv_linux_joystick_22_api=yes,
	wine_cv_linux_joystick_22_api=no,
	wine_cv_linux_joystick_22_api=no
	)
   )
   if test "$wine_cv_linux_joystick_22_api"
   then
      AC_DEFINE(HAVE_LINUX_22_JOYSTICK_API)
   fi
fi

dnl **** statfs checks ****

if test "$ac_cv_header_sys_vfs_h" = "yes"
then
    AC_CACHE_CHECK( "whether sys/vfs.h defines statfs",
		    wine_cv_sys_vfs_has_statfs,
	AC_TRY_COMPILE([
	#include <sys/types.h>
	#ifdef HAVE_SYS_PARAM_H
	# include <sys/param.h>
	#endif
	#include <sys/vfs.h>
	],[
		struct statfs stfs;

		memset(&stfs,0,sizeof(stfs));
	],wine_cv_sys_vfs_has_statfs=yes,wine_cv_sys_vfs_has_statfs=no
	)
    )
    if test "$wine_cv_sys_vfs_has_statfs" = "yes"
    then
      AC_DEFINE(STATFS_DEFINED_BY_SYS_VFS)
    fi
fi

if test "$ac_cv_header_sys_statfs_h" = "yes"
then
    AC_CACHE_CHECK( "whether sys/statfs.h defines statfs",
		    wine_cv_sys_statfs_has_statfs,
	AC_TRY_COMPILE([
	#include <sys/types.h>
	#ifdef HAVE_SYS_PARAM_H
	# include <sys/param.h>
	#endif
	#include <sys/statfs.h>
	],[
		struct statfs stfs;
	],wine_cv_sys_statfs_has_statfs=yes,wine_cv_sys_statfs_has_statfs=no
	)
    )
    if test "$wine_cv_sys_statfs_has_statfs" = "yes"
    then
      AC_DEFINE(STATFS_DEFINED_BY_SYS_STATFS)
    fi
fi

if test "$ac_cv_header_sys_mount_h" = "yes"
then
    AC_CACHE_CHECK( "whether sys/mount.h defines statfs",
		    wine_cv_sys_mount_has_statfs,
	AC_TRY_COMPILE([
	#include <sys/types.h>
	#ifdef HAVE_SYS_PARAM_H
	# include <sys/param.h>
	#endif
	#include <sys/mount.h>
	],[
		struct statfs stfs;
	],wine_cv_sys_mount_has_statfs=yes,wine_cv_sys_mount_has_statfs=no
	)
    )
    if test "$wine_cv_sys_mount_has_statfs" = "yes"
    then
      AC_DEFINE(STATFS_DEFINED_BY_SYS_MOUNT)
    fi
fi

dnl **** FIXME: what about mixed cases, where we need two of them? ***

AC_CACHE_CHECK( "for statfs.f_bfree", wine_cv_statfs_bfree,
  [ if test "x$statfs_bfree" = "xno"
    then
        wine_cv_statfs_bfree=no
    else
    	AC_TRY_COMPILE([
	#include <sys/types.h>
	#ifdef HAVE_SYS_PARAM_H
	# include <sys/param.h>
	#endif
	#ifdef STATFS_DEFINED_BY_SYS_MOUNT
	# include <sys/mount.h>
	#else
	# ifdef STATFS_DEFINED_BY_SYS_VFS
	#  include <sys/vfs.h>
	# else
	#  ifdef STATFS_DEFINED_BY_SYS_STATFS
	#   include <sys/statfs.h>
	#  endif
	# endif
	#endif
	],[
		struct statfs stfs;

		stfs.f_bfree++;
	],wine_cv_statfs_bfree=yes,wine_cv_statfs_bfree=no
	)
    fi ] )
if test "$wine_cv_statfs_bfree" = "yes"
then
  AC_DEFINE(STATFS_HAS_BFREE)
fi

AC_CACHE_CHECK( "for statfs.f_bavail", wine_cv_statfs_bavail,
  [ if test "x$statfs_bavail" = "xno"
    then
        wine_cv_statfs_bavail=no
    else
    	AC_TRY_COMPILE([
	#include <sys/types.h>
	#ifdef HAVE_SYS_PARAM_H
	# include <sys/param.h>
	#endif
	#ifdef STATFS_DEFINED_BY_SYS_MOUNT
	# include <sys/mount.h>
	#else
	# ifdef STATFS_DEFINED_BY_SYS_VFS
	#  include <sys/vfs.h>
	# else
	#  ifdef STATFS_DEFINED_BY_SYS_STATFS
	#   include <sys/statfs.h>
	#  endif
	# endif
	#endif
	],[
		struct statfs stfs;

		stfs.f_bavail++;
	],wine_cv_statfs_bavail=yes,wine_cv_statfs_bavail=no
	)
    fi ] )
if test "$wine_cv_statfs_bavail" = "yes"
then
  AC_DEFINE(STATFS_HAS_BAVAIL)
fi

dnl *** check for working sigaltstack
dnl glibc 2.0x defines it, but it always fails... so it is useless for us.

AC_CACHE_CHECK("for working sigaltstack",
	ac_cv_c_working_sigaltstack,
	AC_TRY_RUN([
	#include <stdio.h>
	#include <time.h> /* <sys/time.h> ? bad magic without end */
	#include <sys/types.h>
	#include <sys/signal.h>
	#ifdef HAVE_SYS_PARAM_H
	# include <sys/param.h>
	#endif
	#ifdef HAVE_SYSCALL_H
	# include <syscall.h>
	#else
	# ifdef HAVE_SYS_SYSCALL_H
	#  include <sys/syscall.h>
	# endif
	#endif
	
	unsigned char *xaltstack;

	int
	main(int argc,char **argv) {
	    struct sigaltstack	ss;

	    xaltstack = malloc(16384);
	    ss.ss_sp    = xaltstack;
	    ss.ss_size  = 16384;
	    ss.ss_flags = 0;
	    if (sigaltstack(&ss, NULL) < 0) {
	    	/* this catches the glibc case */
		perror("sigaltstack");
	    	return (1); /* aka exit(1) aka fail */
	    }
	    /* assume it works. */
	    return 0; /* OK */
	}
	],
	ac_cv_c_working_sigaltstack="yes",
	ac_cv_c_working_sigaltstack="no",
	ac_cv_c_working_sigaltstack="no"
))

if test "$ac_cv_c_working_sigaltstack" = "yes"
then
    AC_DEFINE(HAVE_WORKING_SIGALTSTACK)
fi


dnl *** check for file descriptor passing with msg_accrights

AC_CACHE_CHECK("for msg_accrights in struct msghdr", ac_cv_c_msg_accrights,
 AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/socket.h>],[struct msghdr hdr; hdr.msg_accrights=0],
                ac_cv_c_msg_accrights="yes", ac_cv_c_msg_accrights="no"))
if test "$ac_cv_c_msg_accrights" = "yes"
then
    AC_DEFINE(HAVE_MSGHDR_ACCRIGHTS)
fi

dnl *** check for the need to define __i386__

AC_CACHE_CHECK("whether we need to define __i386__",ac_cv_cpp_def_i386,
 AC_EGREP_CPP(yes,[#if (defined(i386) || defined(__i386)) && !defined(__i386__)
yes
#endif],
 ac_cv_cpp_def_i386="yes", ac_cv_cpp_def_i386="no"))
if test "$ac_cv_cpp_def_i386" = "yes"
then
    CFLAGS="$CFLAGS -D__i386__"
    LINTFLAGS="$LINTFLAGS -D__i386__"
fi

dnl $GCC is set by autoconf
GCC_NO_BUILTIN=""
if test "$GCC" = "yes"
then
    GCC_NO_BUILTIN="-fno-builtin"
fi
AC_SUBST(GCC_NO_BUILTIN)

dnl **** Generate output files ****

MAKE_RULES=Make.rules
AC_SUBST_FILE(MAKE_RULES)

AC_OUTPUT([
Make.rules
Makefile
console/Makefile
controls/Makefile
debugger/Makefile
dlls/Makefile
dlls/advapi32/Makefile
dlls/avifil32/Makefile
dlls/comctl32/Makefile
dlls/commdlg/Makefile
dlls/crtdll/Makefile
dlls/dciman32/Makefile
dlls/display/Makefile
dlls/dplayx/Makefile
dlls/dsound/Makefile
dlls/icmp/Makefile
dlls/imagehlp/Makefile
dlls/imm32/Makefile
dlls/lzexpand/Makefile
dlls/mouse/Makefile
dlls/mpr/Makefile
dlls/msacm/Makefile
dlls/msacm32/Makefile
dlls/msnet32/Makefile
dlls/msvideo/Makefile
dlls/ntdll/Makefile
dlls/odbc32/Makefile
dlls/ole32/Makefile
dlls/oleaut32/Makefile
dlls/olecli/Makefile
dlls/oledlg/Makefile
dlls/olesvr/Makefile
dlls/psapi/Makefile
dlls/rasapi32/Makefile
dlls/shell32/Makefile
dlls/sound/Makefile
dlls/stress/Makefile
dlls/tapi32/Makefile
dlls/ver/Makefile
dlls/version/Makefile
dlls/win32s/Makefile
dlls/win87em/Makefile
dlls/winaspi/Makefile
dlls/windebug/Makefile
dlls/wing/Makefile
dlls/winmm/Makefile
dlls/winmm/mcianim/Makefile
dlls/winmm/mciavi/Makefile
dlls/winmm/mcicda/Makefile
dlls/winmm/mciseq/Makefile
dlls/winmm/mciwave/Makefile
dlls/winmm/midimap/Makefile
dlls/winmm/wavemap/Makefile
dlls/winmm/wineoss/Makefile
dlls/winspool/Makefile
dlls/wnaspi32/Makefile
documentation/Makefile
documentation/wine.conf.man
documentation/wine.man
files/Makefile
graphics/Makefile
graphics/enhmetafiledrv/Makefile
graphics/metafiledrv/Makefile
graphics/psdrv/Makefile
graphics/ttydrv/Makefile
graphics/win16drv/Makefile
graphics/x11drv/Makefile
if1632/Makefile
include/Makefile
library/Makefile
libtest/Makefile
loader/Makefile
loader/ne/Makefile
loader/dos/Makefile
memory/Makefile
misc/Makefile
miscemu/Makefile
msdos/Makefile
objects/Makefile
ole/Makefile
programs/Makefile
programs/clock/Makefile
programs/cmdlgtst/Makefile
programs/control/Makefile
programs/avitools/Makefile
programs/osversioncheck/Makefile
programs/notepad/Makefile
programs/progman/Makefile
programs/regtest/Makefile
programs/regapi/Makefile
programs/view/Makefile
programs/wcmd/Makefile
programs/winhelp/Makefile
programs/winver/Makefile
rc/Makefile
relay32/Makefile
resources/Makefile
scheduler/Makefile
server/Makefile
tools/Makefile
tools/wrc/Makefile
tsx11/Makefile
win32/Makefile
windows/Makefile
windows/ttydrv/Makefile
windows/x11drv/Makefile ])

if test "$have_x" = "no"
then
  echo
  echo "*** Warning: X development files not found. Wine will be built without"
  echo "*** X support, which currently does not work, and would probably not be"
  echo "*** what you want anyway. You will need to install devel packages of"
  echo "*** Xlib/Xfree86 and Xpm at the very least."
elif test "$ac_cv_lib_Xpm_XpmCreatePixmapFromData" = "no"
then
  echo
  echo "*** Warning: Xpm development files not found. Wine will be built without"
  echo "*** Xpm support, which currently does not work. You will need to install"
  echo "*** devel packages of Xpm."
fi

if test "$ac_cv_lib_ncurses_resizeterm" = "no" -a "$ac_cv_lib_ncurses_waddch" = "yes"
then
  echo
  echo "*** Warning: resizeterm not found in ncurses. Wine will be built without"
  echo "*** terminal resize support. Consider upgrading ncurses."
fi

if test "$wine_cv_libc_reentrant" = "no" 
then
  echo
  echo "*** Warning: non-reentrant libc detected. Wine will be build without"
  echo "*** thread support. Consider upgrading libc to a more recent"
  echo "*** reentrant version of libc."
fi

if test "$wine_cv_mesa_version_OK" = "no"
then
  echo
  echo "*** Warning: old Mesa headers detected. Wine will be built without Direct3D"
  echo "*** support. Consider upgrading your Mesa libraries (http://www.mesa3d.org/)"
fi

echo
echo "Configure finished.  Do 'make depend && make' to compile Wine."
echo

dnl Local Variables:
dnl comment-start: "dnl "
dnl comment-end: ""
dnl comment-start-skip: "\\bdnl\\b\\s *"
dnl compile-command: "autoconf"
dnl End:
