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)
    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)
    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)
         AC_CHECK_LIB(Xxf86dga,XF86DGAQueryExtension,AC_DEFINE(HAVE_LIBXXF86DGA) X_PRE_LIBS="$X_PRE_LIBS -lXxf86dga",,$X_LIBS -lXext -lX11)
    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)
    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)
	    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)
	    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:
