dnl Process this file with autoconf to produce a configure script.
dnl Original author: Michael Patra
dnl See ChangeLog file for detailed change history.

m4_define(WINE_VERSION,regexp(m4_include(VERSION),[version \([-.0-9A-Za-z]+\)],[\1]))

AC_PREREQ(2.53)
AC_INIT([Wine],WINE_VERSION)
AC_CONFIG_SRCDIR(server/atom.c)
AC_CONFIG_HEADERS(include/config.h)
AC_CONFIG_AUX_DIR(tools)

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

dnl Library type .so or .a
AC_SUBST(LIBEXT,"so")

AC_ARG_ENABLE(win16, AC_HELP_STRING([--disable-win16],[do not include Win16 support]))
AC_ARG_ENABLE(debug, AC_HELP_STRING([--disable-debug],[compile out all debugging messages]))
AC_ARG_ENABLE(trace, AC_HELP_STRING([--disable-trace],[compile out TRACE messages]))
AC_ARG_ENABLE(opengl,AC_HELP_STRING([--enable-opengl],[force usage of OpenGL even if the latter is thread-safe via pthread]))
AC_ARG_WITH(curses,    AC_HELP_STRING([--without-curses],[do not use curses]))
AC_ARG_WITH(wine-tools,AC_HELP_STRING([--with-wine-tools=<dir>],[use Wine tools from directory <dir>]))

AC_SUBST(OPTIONS)
AC_SUBST(WIN16_FILES,"\$(WIN16_FILES)")
AC_SUBST(WIN16_INSTALL,"\$(WIN16_INSTALL)")
if test "x$enable_win16" = "xno"
then
  WIN16_FILES=""
  WIN16_INSTALL=""
fi
if test "x$enable_debug" = "xno"
then
    AC_DEFINE(NO_DEBUG_MSGS,1,[Define to disable all debug messages.])
fi
if test "x$enable_trace" = "xno" -o "x$enable_debug" = "xno"
then
    AC_DEFINE(NO_TRACE_MSGS,1,[Define to disable trace messages.])
fi

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

AC_CANONICAL_HOST
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_CPP

AC_CACHE_CHECK([for the directory containing the Wine tools], wine_cv_toolsdir,
  [if test -z "$with_wine_tools"; then
     if test "$cross_compiling" = "yes"; then
       AC_MSG_ERROR([you must use the --with-wine-tools option when cross-compiling.])
     else
       wine_cv_toolsdir="\$(TOPOBJDIR)"
     fi
   elif test -d "$with_wine_tools/tools/winebuild"; then
     case $with_wine_tools in
       /*) wine_cv_toolsdir="$with_wine_tools" ;;
       *)  wine_cv_toolsdir="\$(TOPOBJDIR)/$with_wine_tools" ;;
     esac
   else
     AC_MSG_ERROR([could not find Wine tools in $with_wine_tools.])
   fi])
AC_SUBST(TOOLSDIR,$wine_cv_toolsdir)

AC_PATH_XTRA
AC_PROG_YACC
AC_PROG_LEX

dnl **** Just additional warning checks, since AC_PROG just sets 'yacc' even
dnl **** without one present.
AC_CHECK_PROGS(XYACC,$YACC bison yacc,none)
if test "$XYACC" = "none"
then
  AC_MSG_ERROR([no suitable bison/yacc found. Please install the 'bison' package.])
fi
AC_CHECK_PROGS(XLEX,$LEX flex lex,none)
if test "$XLEX" = "none"
then
  AC_MSG_ERROR([no suitable lex found. Please install the 'flex' package.])
fi

AC_CHECK_TOOL(LD,ld,ld)
AC_CHECK_TOOL(AR,ar,ar)
AC_PROG_RANLIB
AC_CHECK_TOOL(STRIP,strip,strip)
AC_CHECK_TOOL(WINDRES,windres,false)
AC_PROG_INSTALL
AC_PROG_LN_S
WINE_PROG_LN
AC_CHECK_PROG(C2MAN,c2man,c2man,\$(TOPSRCDIR)/tools/c2man.pl)
AC_PATH_PROG(LDCONFIG, ldconfig, true, [/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
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_FUNCS(iswalnum,,AC_CHECK_LIB(w,iswalnum))
dnl Check for -lnsl for Solaris
AC_CHECK_FUNCS(gethostbyname,,AC_CHECK_LIB(nsl,gethostbyname))
dnl Check for -lsocket for Solaris
AC_CHECK_FUNCS(connect,,AC_CHECK_LIB(socket,connect))
dnl Check for -lresolv for Solaris
AC_CHECK_FUNCS(inet_aton,,AC_CHECK_LIB(resolv,inet_aton))
dnl Check for -lxpg4 for FreeBSD
AC_CHECK_LIB(xpg4,_xpg4_setrunelocale)
dnl Check for -lmmap for OS/2
AC_CHECK_LIB(mmap,mmap)

JPEGLIB=""
AC_SUBST(JPEGLIB)
AC_CHECK_HEADERS(jpeglib.h,
    AC_CHECK_LIB(jpeg,jpeg_start_decompress,
    	AC_DEFINE(HAVE_LIBJPEG,1,[Define if you have libjpeg including devel headers])
	JPEGLIB="-ljpeg"
    )
)


AC_SUBST(XLIB)
AC_SUBST(XFILES)
XFILES=""
AC_SUBST(OPENGLFILES)
OPENGLFILES=""
AC_SUBST(GLU32FILES)
GLU32FILES=""
if test "$have_x" = "yes"
then
    XLIB="-lXext -lX11"
    ac_save_CPPFLAGS="$CPPFLAGS"
    CPPFLAGS="$CPPFLAGS $X_CFLAGS"

    dnl *** All of the following tests require X11/Xlib.h
    AC_CHECK_HEADERS(X11/Xlib.h,
      [
        dnl *** Check for X keyboard extension
        AC_CHECK_HEADERS(X11/XKBlib.h,
            [ dnl *** If X11/XKBlib.h exists...
              AC_CHECK_LIB(X11, XkbQueryExtension,
              AC_DEFINE(HAVE_XKB, 1, [Define if you have the XKB extension]),,
              $X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
            ],
            AC_MSG_WARN([[Xkb extension not found, Wine will be built without it]]),
            [#include <X11/Xlib.h>])

        dnl *** Check for X Shm extension
        AC_CHECK_HEADERS(X11/extensions/XShm.h,
            [ dnl *** If X11/extensions/XShm.h exists...
              AC_CHECK_LIB(Xext, XShmQueryExtension,
              AC_DEFINE(HAVE_LIBXXSHM, 1, [Define if you have the X Shm extension]),,
              $X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
            ],
            AC_MSG_WARN([[XShm extension not found, Wine will be built without it]]),
            [#include <X11/Xlib.h>])

        dnl *** Check for Xutil
        AC_CHECK_HEADERS(X11/Xutil.h,,,
            [#include <X11/Xlib.h>])

        dnl *** Check for X shape extension
        AC_CHECK_HEADERS(X11/extensions/shape.h,
            [ dnl *** If X11/extensions/shape.h exists...
              AC_CHECK_LIB(Xext,XShapeQueryExtension,
	      AC_DEFINE(HAVE_LIBXSHAPE, 1, [Define if you have the X Shape extension]),,
	      $X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
	    ],
	    AC_MSG_WARN([[XShape extension not found, Wine will be built without it]]),
            [#include <X11/Xlib.h>
             #ifdef HAVE_X11_XUTIL_H
             # include <X11/Xutil.h>
             #endif])

        dnl *** Check for XFree86 DGA / DGA 2.0 extension
        AC_CHECK_HEADERS(X11/extensions/xf86dga.h,
            [ dnl *** If X11/extensions/xf86dga.h exists, check
              dnl *** for XDGAQueryExtension()...
              AC_CHECK_LIB(Xxf86dga, XDGAQueryExtension,
                [ dnl *** If found...
                  AC_DEFINE(HAVE_LIBXXF86DGA2, 1,
                            [Define if you have the Xxf86dga library version 2])
                  X_PRE_LIBS="$X_PRE_LIBS -lXxf86dga"
               ],
                [ dnl *** If not found, look for XF86DGAQueryExtension()
                  dnl *** instead (DGA 2.0 not found)...
                  AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension,
                    [ AC_DEFINE(HAVE_LIBXXF86DGA, 1,
                                [Define if you have the Xxf86dga library version 1])
                      X_PRE_LIBS="$X_PRE_LIBS -lXxf86dga"
                    ],,
                    $X_LIBS -lXext -lX11 $X_EXTRA_LIBS
                  )
                ],
                $X_LIBS -lXext -lX11 $X_EXTRA_LIBS
              )
            ],
            AC_MSG_WARN([[DGA extension not found, Wine will be built without it]]),
            [#include <X11/Xlib.h>])

        dnl *** Check for XFree86 VMODE extension
        AC_CHECK_HEADERS(X11/extensions/xf86vmode.h,
            [ dnl *** If X11/extensions/xf86vmode.h exists...
                AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension,
                  [ AC_DEFINE(HAVE_LIBXXF86VM, 1, [Define if you have the Xxf86vm library])
                     X_PRE_LIBS="$X_PRE_LIBS -lXxf86vm"
                  ],,
                  $X_LIBS -lXext -lX11 $X_EXTRA_LIBS
                )
            ],
            AC_MSG_WARN([[XFree86 VMODE extension not found, Wine will be built without it]]),
            [#include <X11/Xlib.h>])

        dnl *** Check for XVideo extension supporting XvImages
        AC_CHECK_HEADERS(X11/extensions/Xvlib.h,
            [ dnl *** If X11/extensions/Xvlib.h exists...
                AC_CHECK_LIB(Xv, XvShmCreateImage,
                  [ AC_DEFINE(HAVE_XVIDEO, 1, [Define if the X libraries support XVideo])
                     X_PRE_LIBS="$X_PRE_LIBS -lXv"
                  ],,
                  $X_LIBS -lXext -lX11 $X_EXTRA_LIBS
                )
            ],
            AC_MSG_WARN([[XVideo extension not found, Wine will be built without it]]),
            [#include <X11/Xlib.h>])

        dnl *** Check for XRender include file
        AC_CHECK_HEADERS(X11/extensions/Xrender.h,,,[#include <X11/Xlib.h>])
      ]
    ) dnl *** End of X11/Xlib.h check

    dnl Check for the presence of OpenGL
    if test "x$enable_opengl" != "xno"
    then
        if test -f /usr/X11R6/lib/libGL.a -a ! -f /usr/X11R6/lib/libGL.so
        then
	    AC_MSG_ERROR([/usr/X11R6/lib/libGL.a is present on your system.
This prevents linking to OpenGL. Delete the file and restart configure.])
        fi

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

	    dnl Check for the thread-safety of the OpenGL library
	    AC_CACHE_CHECK([for thread-safe OpenGL version],
			   wine_cv_opengl_version_threadsafe,
              [saved_libs=$LIBS
	       LIBS="$X_LIBS -lGL"
	       AC_TRY_LINK([],[pthread_getspecific();],
			      [wine_cv_opengl_version_threadsafe="yes"],
			      [wine_cv_opengl_version_threadsafe="no"])
	       LIBS=$saved_libs]
	    )

	    if test "$wine_cv_opengl_version_OK" = "yes" -a \( "$wine_cv_opengl_version_threadsafe" = "no" -o "x$enable_opengl" = "xyes" \)
            then
		dnl Check for the presence of the library
		AC_CHECK_LIB(GL,glXCreateContext,
			     X_PRE_LIBS="$X_PRE_LIBS -lGL"
			     ,,
			     $X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)

		if test "$ac_cv_lib_GL_glXCreateContext" = "yes"
		then
			OPENGLFILES='$(OPENGLFILES)'
			AC_DEFINE(HAVE_OPENGL, 1, [Define if OpenGL is present on the system])

			AC_CHECK_LIB(GL,glXGetProcAddressARB,
                                     AC_DEFINE(HAVE_GLX_GETPROCADDRESS, 1,
                                               [Define if the OpenGL library supports the glXGetProcAddressARB call]),,
                                     $X_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS)

			if test "$ac_cv_lib_GL_glXGetProcAddressARB" = "yes"
			then
			       AC_CACHE_CHECK([for OpenGL extension functions prototypes], wine_cv_extension_prototypes,
			          [AC_TRY_COMPILE([#include <GL/gl.h>
				  		  #ifdef HAVE_GL_GLEXT_H
						  # include <GL/glext.h>
						  #endif
						  ],
						 [PFNGLCOLORTABLEEXTPROC test_proc;],
						 [wine_cv_extension_prototypes="yes"],
						 [wine_cv_extension_prototypes="no"]
				  )]
				)
				if test "$wine_cv_extension_prototypes" = "yes"
				then
				    AC_DEFINE(HAVE_GLEXT_PROTOTYPES, 1,
                                              [Define if the OpenGL headers define extension typedefs])
				fi
			fi

		fi
	        dnl Check for GLU32 library.
		AC_CHECK_LIB(GLU,gluLookAt,
			     [X_PRE_LIBS="$X_PRE_LIBS -lGLU"
			     GLU32FILES='$(GLU32FILES)']
			     ,,
			     $X_LIBS $X_PRE_LIBS -lXext -lX11 -lm $X_EXTRA_LIBS
		)
	     fi
	 fi
    fi

    CPPFLAGS="$ac_save_CPPFLAGS"
    XFILES='$(XFILES)'
else
    XLIB=""
    X_CFLAGS=""
    X_LIBS=""
fi

dnl **** Check which curses lib to use ***
CURSESLIBS=""
if test "x$with_curses" != "xno"
then
    AC_CHECK_HEADERS(ncurses.h,
        [AC_CHECK_LIB(ncurses,waddch,
            [AC_DEFINE(HAVE_LIBNCURSES, 1, [Define if you have the ncurses library (-lncurses)])
             CURSESLIBS="-lncurses"],
             [AC_CHECK_HEADERS(curses.h,
                 [AC_CHECK_LIB(curses,waddch,
                     [AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have the curses library (-lcurses)])
                      CURSESLIBS="-lcurses"])])])])
    saved_libs="$LIBS"
    LIBS="$CURSESLIBS $LIBS"
    AC_CHECK_FUNCS(getbkgd resizeterm)
    LIBS="$saved_libs"
fi
AC_SUBST(CURSESLIBS)

CUPSLIBS=""
dnl **** Check for CUPS ****
wine_cv_warn_cups_h=no
AC_CHECK_LIB(cups,cupsGetPPD,
	[AC_CHECK_HEADER(cups/cups.h,
	    [AC_DEFINE(HAVE_CUPS, 1, [Define if we have CUPS])
	    CUPSLIBS="-lcups"],
            wine_cv_warn_cups_h=yes)]
)
AC_SUBST(CUPSLIBS)

dnl **** Check for SANE ****
AC_CHECK_PROG(sane_devel,sane-config,sane-config,no)
if test "$sane_devel" = "no"
then
    SANELIBS=""
    SANEINCL=""
else
    SANELIBS="`$sane_devel --libs`"
    SANEINCL="`$sane_devel --cflags`"
    ac_save_CPPFLAGS="$CPPFLAGS"
    ac_save_LIBS="$LIBS"
    CPPFLAGS="$CPPFLAGS $SANEINCL"
    LIBS="$LIBS $SANELIBS"
    AC_CHECK_HEADER(sane/sane.h,
                    [AC_CHECK_LIB(sane,sane_open,
                                  [AC_DEFINE(HAVE_SANE, 1, [Define if we have SANE development environment])],
                                  [SANELIBS=""
                                  SANEINCL=""])],
                    [SANELIBS=""
                    SANEINCL=""])
    LIBS="$ac_save_LIBS"
    CPPFLAGS="$ac_save_CPPFLAGS"
fi
AC_SUBST(SANELIBS)
AC_SUBST(SANEINCL)

dnl **** Check for FreeType 2 ****
AC_CHECK_LIB(freetype,FT_Init_FreeType,ft_lib=yes,ft_lib=no,$X_LIBS)
if test "$ft_lib" = "no"
then
    FREETYPEINCL=""
    wine_cv_msg_freetype=no
else
    AC_CHECK_PROG(ft_devel,freetype-config,freetype-config,no)
    if test "$ft_devel" = "no"
    then
        AC_CHECK_PROG(ft_devel2,freetype2-config,freetype2-config,no)
        if test "$ft_devel2" = "freetype2-config"
	then
		ft_devel=$ft_devel2
	fi
    fi
    if test "$ft_devel" = "no"
    then
	FREETYPEINCL=""
	wine_cv_msg_freetype=yes
    else
	FREETYPEINCL=`$ft_devel --cflags`
	ac_save_CPPFLAGS="$CPPFLAGS"
	CPPFLAGS="$FREETYPEINCL $CPPFLAGS"
	AC_CHECK_HEADERS(freetype/freetype.h \
                         freetype/ftglyph.h \
                         freetype/tttables.h \
                         freetype/ftnames.h \
                         freetype/ftsnames.h \
                         freetype/ttnameid.h \
                         freetype/ftoutln.h \
                         freetype/internal/sfnt.h)
	AC_TRY_CPP([#include <ft2build.h>
                    #include <freetype/fttrigon.h>],
                    [AC_DEFINE(HAVE_FREETYPE_FTTRIGON_H, 1,
          [Define if you have the <freetype/fttrigon.h> header file.])
                    wine_cv_fttrigon=yes],
                    wine_cv_fttrigon=no)
	CPPFLAGS="$ac_save_CPPFLAGS"
	dnl Check that we have at least freetype/freetype.h
	if test "$ac_cv_header_freetype_freetype_h" = "yes" -a "$wine_cv_fttrigon" = "yes"
	then
	    AC_DEFINE(HAVE_FREETYPE, 1, [Define if FreeType 2 is installed])
	    wine_cv_msg_freetype=no
	else
	    FREETYPEINCL=""
	    wine_cv_msg_freetype=yes
	fi
    fi
fi
AC_SUBST(FREETYPEINCL)

dnl **** Check for parport (currently Linux only) ****
AC_CACHE_CHECK([for parport header/ppdev.h], ac_cv_c_ppdev,
 AC_TRY_COMPILE(
   [#include <linux/ppdev.h>],
   [ioctl (1,PPCLAIM,0)],
   [ac_cv_c_ppdev="yes"],
   [ac_cv_c_ppdev="no"])
 )
if test "$ac_cv_c_ppdev" = "yes"
then
    AC_DEFINE(HAVE_PPDEV, 1, [Define if we can use ppdev.h for parallel port access])
fi

dnl **** Check for va_copy ****
AC_CACHE_CHECK([for va_copy], ac_cv_c_va_copy,
 AC_TRY_LINK(
   [#include <stdarg.h>],
   [va_list ap1, ap2;
    va_copy(ap1,ap2);
   ],
   [ac_cv_c_va_copy="yes"],
   [ac_cv_c_va_copy="no"])
 )
if test "$ac_cv_c_va_copy" = "yes"
then
    AC_DEFINE(HAVE_VA_COPY, 1, [Define if we have va_copy])
fi
AC_CACHE_CHECK([for __va_copy], ac_cv_c___va_copy,
 AC_TRY_LINK(
   [#include <stdarg.h>],
   [va_list ap1, ap2;
    __va_copy(ap1,ap2);
   ],
   [ac_cv_c___va_copy="yes"],
   [ac_cv_c___va_copy="no"])
 )
if test "$ac_cv_c___va_copy" = "yes"
then
    AC_DEFINE(HAVE___VA_COPY, 1, [Define if we have __va_copy])
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_cv_c_ipx_gnu="yes"],
   [ac_cv_c_ipx_gnu="no"])
 )
if test "$ac_cv_c_ipx_gnu" = "yes"
then
    AC_DEFINE(HAVE_IPX_GNU, 1, [Define if IPX should use netipx/ipx.h from libc])
fi

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_cv_c_ipx_linux="yes"],
    [ac_cv_c_ipx_linux="no"])
  )
  if test "$ac_cv_c_ipx_linux" = "yes"
  then
      AC_DEFINE(HAVE_IPX_LINUX, 1, [Define if IPX includes are taken from Linux kernel])
  fi
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, 1, [Define if you have the Open Sound system])
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, 1, [Define if you have the Open Sound system (MIDI interface)])
fi

dnl **** Check for aRts Sound Server ****
AC_PATH_PROG(ARTSCCONFIG, artsc-config)
AC_CACHE_CHECK([for aRts Sound server],
        ac_cv_c_artsserver,
        if test x$ARTSCCONFIG = x -o x$ARTSCCONFIG = x'"$ARTSCCONFIG"';
        then
            ac_cv_c_artsserver=no
        else
            ARTSC_CFLAGS=`$ARTSCCONFIG --cflags`
            ARTSC_LIBS=`$ARTSCCONFIG --libs`
            ac_cv_c_artsserver=no
            save_CFLAGS="$CFLAGS"
            CFLAGS="$CFLAGS $ARTSC_CFLAGS"
            AC_TRY_COMPILE([
             #include <artsc.h>
            ],[
             arts_stream_t stream;
            ],[
            ac_cv_c_artsserver=yes
            ])
            CFLAGS="$save_CFLAGS"
        fi)

if test "$ac_cv_c_artsserver" = "yes"
then
    AC_SUBST(ARTSLIBS, $ARTSC_LIBS)
    AC_SUBST(ARTSINCL, $ARTSC_CFLAGS)

    AC_DEFINE(HAVE_ARTS, 1, [Define if you have ARTS sound server])
fi

dnl **** Check for ALSA ****
AC_SUBST(ALSALIBS,"")
AC_CHECK_HEADERS(alsa/asoundlib.h sys/asoundlib.h, break)
if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes"
then
    AC_CHECK_LIB(asound,snd_pcm_open,
    	AC_DEFINE(HAVE_ALSA,1,[Define if you have ALSA including devel headers])
	ALSALIBS="-lasound")
fi

dnl **** Check for NAS ****
AC_SUBST(NASLIBS,"")
AC_CHECK_HEADERS(audio/audiolib.h,
     [AC_CHECK_HEADERS(audio/soundlib.h,,,[#include <audio/audiolib.h>])
      AC_CHECK_LIB(audio,AuCreateFlow,
    	           [AC_DEFINE(HAVE_NAS,1,[Define if you have NAS including devel headers])
                    NASLIBS="-laudio -lXt $X_LIBS -lXext -lX11 $X_EXTRA_LIBS"],,
                   [-lXt $X_LIBS -lXext -lX11 $X_EXTRA_LIBS])])

dnl **** Check for libaudioio (which can be used to get solaris audio support) ****

AC_SUBST(AUDIOIOLIBS,"")
AC_CHECK_HEADERS(libaudioio.h,
    [AC_CHECK_LIB(audioio,AudioIOGetVersion,
                  [AUDIOIOLIBS="-laudioio"
                   AC_DEFINE(HAVE_LIBAUDIOIO, 1, [Define if you have libaudioIO])])])

dnl **** Check for broken glibc mmap64 ****

AC_CACHE_CHECK( [whether mmap64 works defined as mmap], ac_cv_mmap64_works,
	AC_TRY_RUN([
		#define _FILE_OFFSET_BITS 64
		#include <stdio.h>
		#include <unistd.h>
		#include <fcntl.h>
		#include <sys/mman.h>
		#include <errno.h>

		int main(int argc,char **argv) {
			int fd = open("conftest.map",O_CREAT|O_RDWR,0600);
			if (fd == -1) exit(1);

			unlink("conftest.map");

			write(fd,"test",4);

			if ((-1 == mmap(0,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0)) &&
			    (errno == EINVAL)
			) {
				exit(1);
			}
			close(fd);
			fprintf(stderr,"success!\n");
			exit(0);
		}

	],
    ac_cv_mmap64_works="yes",
    ac_cv_mmap64_works="no",
    ac_cv_mmap64_works="no") )

if test "$ac_cv_mmap64_works" = "yes"
then
    AC_DEFINE(_FILE_OFFSET_BITS, 64, [Set this to 64 to enable 64-bit file support on Linux])
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	L[[4]] = {0,1,2,3};
int main(void) {
  static int Array[[3]];
  unsigned int B = 3;
  int i;
  for(i=0; i<B; i++) Array[[i]] = i - 3;
  for(i=0; i<4 - 1; i++) L[[i]] = L[[i + 1]];
  L[[i]] = 4;

  exit( Array[[1]] != -2 || L[[2]] != 3);
}],
    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

  dnl Check for -mpreferred-stack-boundary
  AC_CACHE_CHECK([for gcc -mpreferred-stack-boundary=2 support], ac_cv_c_gcc_stack_boundary,
      [WINE_TRY_CFLAGS([-mpreferred-stack-boundary=2],
                      ac_cv_c_gcc_stack_boundary="yes",ac_cv_c_gcc_stack_boundary="no")])
  if test "$ac_cv_c_gcc_stack_boundary" = "yes"
  then
    CFLAGS="$CFLAGS -mpreferred-stack-boundary=2"
  fi
fi

dnl **** Check how to define a function in assembly code ****

AC_CACHE_CHECK([how to define a function in assembly code], ac_cv_asm_func_def,
  WINE_TRY_ASM_LINK(
      ["\t.globl _ac_test\n\t.def _ac_test; .scl 2; .type 32; .endef\n_ac_test:\t.long 0"],,,
      ac_cv_asm_func_def=".def",
    [WINE_TRY_ASM_LINK(["\t.globl _ac_test\n\t.type _ac_test,@function\n_ac_test:\t.long 0"],,,
      ac_cv_asm_func_def=".type @function",
    [WINE_TRY_ASM_LINK(["\t.globl _ac_test\n\t.type _ac_test,2\n_ac_test:\t.long 0"],,,
      ac_cv_asm_func_def=".type 2",
      ac_cv_asm_func_def="unknown")])]))

AH_TEMPLATE(__ASM_FUNC,[Define to a macro to generate an assembly function directive])
case "$ac_cv_asm_func_def" in
  ".def")
     AC_DEFINE([__ASM_FUNC(name)], [".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef"]) ;;
  ".type @function")
     AC_DEFINE([__ASM_FUNC(name)], [".type " __ASM_NAME(name) ",@function"]) ;;
  ".type 2")
     AC_DEFINE([__ASM_FUNC(name)], [".type " __ASM_NAME(name) ",2"]) ;;
  *)
     AC_DEFINE([__ASM_FUNC(name)], [""]) ;;
esac

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

AC_CACHE_CHECK([whether external symbols need an underscore prefix], ac_cv_c_extern_prefix,
    WINE_TRY_ASM_LINK([".globl _ac_test\n_ac_test:\t.long 0"],
                      [extern int ac_test;],
                      [if (ac_test) return 1],
                      ac_cv_c_extern_prefix="yes",ac_cv_c_extern_prefix="no"))

AH_TEMPLATE(__ASM_NAME,[Define to a macro to generate an assembly name from a C symbol])
if test "$ac_cv_c_extern_prefix" = "yes"
then
  AC_DEFINE([__ASM_NAME(name)], ["_" name])
else
  AC_DEFINE([__ASM_NAME(name)], [name])
fi

dnl **** Check whether stdcall symbols need to be decorated ****

AC_CACHE_CHECK([whether stdcall symbols need to be decorated], ac_cv_c_stdcall_decoration,
    WINE_TRY_ASM_LINK(["\t.globl _ac_test@0\n_ac_test@0:\n\t.globl ac_test@0\nac_test@0:"],
                      [extern void __attribute__((__stdcall__)) ac_test(void);],
                      [ac_test()],
                      ac_cv_c_stdcall_decoration="yes",ac_cv_c_stdcall_decoration="no"))
if test "$ac_cv_c_stdcall_decoration" = "yes"
then
  AC_DEFINE(NEED_STDCALL_DECORATION, 1, [Define if stdcall symbols need to be decorated])
fi

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

AC_CACHE_CHECK([whether assembler accepts .string], ac_cv_c_asm_string,
    WINE_TRY_ASM_LINK([".data\n\t.string \"test\"\n\t.text"],,,
                      ac_cv_c_asm_string="yes",ac_cv_c_asm_string="no"))
if test "$ac_cv_c_asm_string" = "yes"
then
  AC_DEFINE(HAVE_ASM_STRING, 1, [Define to use .string instead of .ascii])
fi

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

AC_SUBST(DLLEXT,"")
AC_SUBST(DLLFLAGS,"")
AC_SUBST(DLLIBS,"")
AC_SUBST(LDDLLFLAGS,"")
AC_SUBST(LDSHARED,"")

case $host_os in
  cygwin*|mingw32*)
    AC_CHECK_TOOL(DLLWRAP,dllwrap,false)
    if test "$DLLWRAP" = "false"; then
      LIBEXT="a"
    else
      dnl FIXME - check whether dllwrap works correctly...
      LIBEXT="dll"
    fi
    ;;
  *)
    AC_CHECK_HEADERS(dlfcn.h,
        [AC_CHECK_FUNCS(dlopen,,
            [AC_CHECK_LIB(dl,dlopen,
                         [AC_DEFINE(HAVE_DLOPEN,1,[Define if you have dlopen])
                          DLLIBS="-ldl"],
                         [LIBEXT="a"])])],
        [LIBEXT="a"])

    if test "$LIBEXT" = "so"
    then
      DLLFLAGS="-fPIC"
      DLLEXT=".so"
      AC_CACHE_CHECK([whether we can build a GNU style ELF dll], ac_cv_c_dll_gnuelf,
          [WINE_TRY_CFLAGS([-fPIC -shared -Wl,-soname,conftest.so.1.0,-Bsymbolic],
                           ac_cv_c_dll_gnuelf="yes",ac_cv_c_dll_gnuelf="no")])
      if test "$ac_cv_c_dll_gnuelf" = "yes"
      then
        LDSHARED="\$(CC) -shared \$(SONAME:%=-Wl,-soname,%)"
        LDDLLFLAGS="-Wl,-Bsymbolic"
      else
        AC_CACHE_CHECK(whether we can build a UnixWare (Solaris) dll, ac_cv_c_dll_unixware,
            [WINE_TRY_CFLAGS([-fPIC -Wl,-G,-h,conftest.so.1.0,-B,symbolic],
                             ac_cv_c_dll_unixware="yes",ac_cv_c_dll_unixware="no")])
        if test "$ac_cv_c_dll_unixware" = "yes"
        then
          LDSHARED="\$(CC) -Wl,-G \$(SONAME:%=-Wl,-h,%)"
          LDDLLFLAGS="-Wl,-B,symbolic"
        fi
      fi
    fi

    dnl Check for cross compiler to build test programs
    AC_SUBST(CROSSTEST,"")
    if test "$cross_compiling" = "no"
    then
      AC_CHECK_PROGS(CROSSCC,i586-mingw32msvc-gcc,false)
      AC_CHECK_PROGS(DLLTOOL,i586-mingw32msvc-dlltool,false)
      if test "$CROSSCC" != "false"; then CROSSTEST="\$(CROSSTEST)"; fi
    fi
    ;;
esac

if test "$LIBEXT" = "a"; then
  AC_MSG_ERROR(
[could not find a way to build shared libraries.
It is currently not possible to build Wine without shared library
(.so) support to allow transparent switch between .so and .dll files.
If you are using Linux, you will need a newer binutils.]
)
fi

case $build_os in
  cygwin*|mingw32*)
    AC_SUBST(LDPATH,"PATH=\"\$(TOOLSDIR)/library:\$(TOOLSDIR)/unicode:\$\$PATH\"") ;;
  *)
    AC_SUBST(LDPATH,"LD_LIBRARY_PATH=\"\$(TOOLSDIR)/library:\$(TOOLSDIR)/unicode:\$\$LD_LIBRARY_PATH\"") ;;
esac

dnl Mingw needs explicit msvcrt for linking libwine
AC_SUBST(CRTLIBS,"")
case $host_os in
  mingw32*)
    CRTLIBS="-lmsvcrt" ;;
esac

dnl **** Get the soname for libraries that we load dynamically ****

if test "$LIBEXT" = "so"
then
  WINE_GET_SONAME(X11,XCreateWindow,[$X_LIBS $X_EXTRA_LIBS])
  WINE_GET_SONAME(Xext,XextCreateExtension,[$X_LIBS -lX11 $X_EXTRA_LIBS])
  WINE_GET_SONAME(Xrender,XRenderQueryExtension,[$X_LIBS -lXext -lX11 $X_EXTRA_LIBS])
  WINE_GET_SONAME(freetype,FT_Init_FreeType,[$X_LIBS])
fi


dnl **** Check for reentrant libc ****

wine_cv_libc_reentrant=no
dnl Linux style errno location
WINE_CHECK_ERRNO([__errno_location], [wine_cv_libc_reentrant=__errno_location],
  dnl FreeBSD style errno location
  WINE_CHECK_ERRNO([__error], [wine_cv_libc_reentrant=__error],
    dnl Solaris style errno location
    WINE_CHECK_ERRNO([___errno], [wine_cv_libc_reentrant=___errno],
      dnl UnixWare style errno location
      WINE_CHECK_ERRNO([__thr_errno], [wine_cv_libc_reentrant=__thr_errno],
        dnl NetBSD style errno location
        WINE_CHECK_ERRNO([__errno], [wine_cv_libc_reentrant=__errno])
))))

if test "$wine_cv_libc_reentrant" != "no"
then
  AC_DEFINE_UNQUOTED(ERRNO_LOCATION,$wine_cv_libc_reentrant,
	             [Define to the name of the function returning errno for 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.

if test "$have_x" = "yes"
then
AC_CACHE_CHECK( [for reentrant X libraries], wine_cv_x_reentrant,
    [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
        fi
        if test -r $dir/libX11.a; then
            libX11_check="$dir/libX11.a"
            break
        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

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

AC_FUNC_ALLOCA()
AC_CHECK_FUNCS(\
	__libc_fork \
	_lwp_create \
	_pclose \
	_popen \
	_snprintf \
	_stricmp \
	_strnicmp \
	chsize \
	clone \
	ecvt \
	finite \
	fpclass \
	ftruncate \
	ftruncate64 \
	getnetbyaddr \
	getnetbyname \
	getpagesize \
	getprotobyname \
	getprotobynumber \
	getpwuid \
	getservbyport \
	getsockopt \
	inet_network \
	lseek64 \
	lstat \
	memmove \
	mkstemp \
	mmap \
	pclose \
	popen \
	pread \
	pwrite \
	rfork \
	select \
	sendmsg \
	settimeofday \
	sigaltstack \
	snprintf \
	statfs \
	strcasecmp \
	strerror \
	strncasecmp \
	tcgetattr \
	timegm \
	usleep \
	vfscanf \
	wait4 \
	waitpid \
)

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

AC_CHECK_HEADERS(\
	arpa/inet.h \
	arpa/nameser.h \
	direct.h \
	elf.h \
	float.h \
	ieeefp.h \
	io.h \
	libaudioio.h \
	libio.h \
	libutil.h \
	link.h \
	linux/cdrom.h \
	linux/hdreg.h \
	linux/input.h \
	linux/joystick.h \
	linux/major.h \
	linux/param.h \
	linux/serial.h \
	linux/ucdrom.h \
	netdb.h \
	netinet/in.h \
	netinet/in_systm.h \
	netinet/tcp.h \
	pty.h \
	pwd.h \
	sched.h \
	scsi/sg.h \
	socket.h \
	stdint.h \
	strings.h \
	sys/cdio.h \
	sys/errno.h \
	sys/file.h \
	sys/filio.h \
	sys/inttypes.h \
	sys/ioctl.h \
	sys/ipc.h \
	sys/link.h \
	sys/lwp.h \
	sys/mman.h \
	sys/modem.h \
	sys/mount.h \
	sys/msg.h \
	sys/param.h \
	sys/poll.h \
	sys/ptrace.h \
	sys/reg.h \
	sys/shm.h \
	sys/signal.h \
	sys/socket.h \
	sys/sockio.h \
	sys/statfs.h \
	sys/strtio.h \
	sys/syscall.h \
	sys/sysctl.h \
	sys/time.h \
	sys/times.h \
	sys/user.h \
	sys/v86.h \
	sys/v86intr.h \
	sys/vfs.h \
	sys/vm86.h \
	sys/wait.h \
	syscall.h \
	termios.h \
	ucontext.h \
	unistd.h \
	utime.h \
)
AC_HEADER_STAT()

dnl *** Check for net/if.h
AC_CHECK_HEADERS(net/if.h,,,
    [#if HAVE_SYS_TYPES_H
     # include <sys/types.h>
     #endif
     #if HAVE_SYS_SOCKET_H
     # include <sys/socket.h>
     #endif])

dnl *** Check for netinet/ip.h
AC_CHECK_HEADERS(netinet/ip.h,,,
    [#if HAVE_SYS_SOCKET_H
     # include <sys/socket.h>
     #endif
     #if HAVE_NETINET_IN_SYSTM_H
     # include <netinet/in_systm.h>
     #endif])

dnl *** Check for resolv.h
AC_CHECK_HEADERS(resolv.h,,,
    [#if HAVE_SYS_SOCKET_H
     # include <sys/socket.h>
     #endif])

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

AC_C_CONST
AC_C_INLINE
AC_CHECK_TYPES([mode_t, off_t, pid_t, size_t, ssize_t])
AC_CHECK_SIZEOF(long long,0)

AC_CACHE_CHECK([whether linux/input.h is for real],
	wine_cv_linux_input_h,
	AC_TRY_COMPILE([
	    #include <linux/input.h>
	] , [
	    int foo = EVIOCGBIT(EV_ABS,42);
	    int bar = BTN_PINKIE;
	    int fortytwo = 42;
	],
	wine_cv_linux_input_h=yes,
	wine_cv_linux_input_h=no,
	no
	)
    )
    if test "$wine_cv_linux_input_h" = "yes"
    then
        AC_DEFINE(HAVE_CORRECT_LINUXINPUT_H, 1,
                  [Define if we have linux/input.h AND it contains the INPUT event API])
    fi


AC_CACHE_CHECK([whether we can use re-entrant gethostbyname_r Linux style],
   	wine_cv_linux_gethostbyname_r_6,
	AC_TRY_COMPILE([
#include <netdb.h>
	], [
    char *name=NULL;
    struct hostent he;
    struct hostent *result;
    char *buf=NULL;
    int bufsize=0;
    int res,errnr;
    char *addr=NULL;
    int addrlen=0;
    int addrtype=0;
    res=gethostbyname_r(name,&he,buf,bufsize,&result,&errnr);
    res=gethostbyaddr_r(addr, addrlen, addrtype,&he,buf,bufsize,&result,&errnr);
    ],
	wine_cv_linux_gethostbyname_r_6=yes,
	wine_cv_linux_gethostbyname_r_6=no
	)
   )
   if test "$wine_cv_linux_gethostbyname_r_6" = "yes"
   then
      AC_DEFINE(HAVE_LINUX_GETHOSTBYNAME_R_6, 1,
                [Define if Linux-style gethostbyname_r and gethostbyaddr_r are available])
   fi

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" = "yes"
   then
      AC_DEFINE(HAVE_LINUX_22_JOYSTICK_API, 1,
                [Define if <linux/joystick.h> defines the Linux 2.2 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, 1,
                [Define if the struct statfs is defined by <sys/vfs.h>])
    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, 1,
                [Define if the struct statfs is defined by <sys/statfs.h>])
    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, 1,
                [Define if the struct statfs is defined by <sys/mount.h>])
    fi
fi

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

WINE_CHECK_STRUCT_MEMBER(statfs,f_bfree,
[#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],
    [AC_DEFINE(STATFS_HAS_BFREE, 1, [Define if the struct statfs has the member bfree])])

WINE_CHECK_STRUCT_MEMBER(statfs,f_bavail,
[#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],
    [AC_DEFINE(STATFS_HAS_BAVAIL, 1, [Define if the struct statfs has the member bavail])])

dnl Check for file descriptor passing with msg_accrights
WINE_CHECK_STRUCT_MEMBER(msghdr,msg_accrights,
[#include <sys/types.h>
#include <sys/socket.h>],
    [AC_DEFINE(HAVE_MSGHDR_ACCRIGHTS, 1, [Define if struct msghdr contains msg_accrights])])

dnl Check for the sa_len member in struct sockaddr
WINE_CHECK_STRUCT_MEMBER(sockaddr,sa_len,
[#include <sys/types.h>
#include <sys/socket.h>],
    [AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Define if struct sockaddr contains sa_len])])

dnl Check for the sun_len member in struct sockaddr_un
WINE_CHECK_STRUCT_MEMBER(sockaddr_un,sun_len,
[#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>],
    [AC_DEFINE(HAVE_SOCKADDR_SUN_LEN, 1, [Define if struct sockaddr_un contains sun_len])])

dnl *** check for the need to define __i386__

case $host_cpu in
  *i[3456789]86* )
    AC_CACHE_CHECK([whether we need to define __i386__],ac_cv_cpp_def_i386,
      AC_EGREP_CPP(yes,[#ifndef __i386__
yes
#endif],
 ac_cv_cpp_def_i386="yes", ac_cv_cpp_def_i386="no"))
    ;;
esac
if test "$ac_cv_cpp_def_i386" = "yes"
then
    CFLAGS="$CFLAGS -D__i386__"
    LINTFLAGS="$LINTFLAGS -D__i386__"
fi

dnl *** check for the need to define __sparc__

case $host_cpu in
  *sparc* )
    AC_CACHE_CHECK([whether we need to define __sparc__],ac_cv_cpp_def_sparc,
      AC_EGREP_CPP(yes,[#ifndef __sparc__
yes
#endif],
 ac_cv_cpp_def_sparc="yes", ac_cv_cpp_def_sparc="no"))
    ;;
esac
if test "$ac_cv_cpp_def_sparc" = "yes"
then
    CFLAGS="$CFLAGS -D__sparc__"
    LINTFLAGS="$LINTFLAGS -D__sparc__"
fi

dnl *** check for the need to define __sun__

case $host_vendor in
  *sun* )
    AC_CACHE_CHECK([whether we need to define __sun__],ac_cv_cpp_def_sun,
      AC_EGREP_CPP(yes,[#ifndef __sun__
yes
#endif],
 ac_cv_cpp_def_sun="yes", ac_cv_cpp_def_sun="no"))
    ;;
esac
if test "$ac_cv_cpp_def_sun" = "yes"
then
    CFLAGS="$CFLAGS -D__sun__"
    LINTFLAGS="$LINTFLAGS -D__sun__"
fi

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

AH_TOP([#define __WINE_CONFIG_H])

WINE_CONFIG_EXTRA_DIR(controls)
WINE_CONFIG_EXTRA_DIR(dlls/ddraw/d3ddevice)
WINE_CONFIG_EXTRA_DIR(dlls/ddraw/dclipper)
WINE_CONFIG_EXTRA_DIR(dlls/ddraw/ddraw)
WINE_CONFIG_EXTRA_DIR(dlls/ddraw/direct3d)
WINE_CONFIG_EXTRA_DIR(dlls/ddraw/dpalette)
WINE_CONFIG_EXTRA_DIR(dlls/ddraw/dsurface)
WINE_CONFIG_EXTRA_DIR(dlls/dinput/joystick)
WINE_CONFIG_EXTRA_DIR(dlls/dinput/keyboard)
WINE_CONFIG_EXTRA_DIR(dlls/dinput/mouse)
WINE_CONFIG_EXTRA_DIR(dlls/gdi/enhmfdrv)
WINE_CONFIG_EXTRA_DIR(dlls/gdi/mfdrv)
WINE_CONFIG_EXTRA_DIR(dlls/gdi/win16drv)
WINE_CONFIG_EXTRA_DIR(dlls/kernel/messages)
WINE_CONFIG_EXTRA_DIR(dlls/user/dde)
WINE_CONFIG_EXTRA_DIR(dlls/user/resources)
WINE_CONFIG_EXTRA_DIR(dlls/wineps/data)
WINE_CONFIG_EXTRA_DIR(files)
WINE_CONFIG_EXTRA_DIR(graphics)
WINE_CONFIG_EXTRA_DIR(graphics/x11drv)
WINE_CONFIG_EXTRA_DIR(if1632)
WINE_CONFIG_EXTRA_DIR(include/wine)
WINE_CONFIG_EXTRA_DIR(loader)
WINE_CONFIG_EXTRA_DIR(loader/ne)
WINE_CONFIG_EXTRA_DIR(memory)
WINE_CONFIG_EXTRA_DIR(misc)
WINE_CONFIG_EXTRA_DIR(msdos)
WINE_CONFIG_EXTRA_DIR(objects)
WINE_CONFIG_EXTRA_DIR(programs/regapi/tests)
WINE_CONFIG_EXTRA_DIR(programs/regedit/tests)
WINE_CONFIG_EXTRA_DIR(programs/winetest/tests)
WINE_CONFIG_EXTRA_DIR(relay32)
WINE_CONFIG_EXTRA_DIR(scheduler)
WINE_CONFIG_EXTRA_DIR(win32)
WINE_CONFIG_EXTRA_DIR(windows)

MAKE_RULES=Make.rules
AC_SUBST_FILE(MAKE_RULES)

MAKE_DLL_RULES=dlls/Makedll.rules
AC_SUBST_FILE(MAKE_DLL_RULES)

MAKE_TEST_RULES=dlls/Maketest.rules
AC_SUBST_FILE(MAKE_TEST_RULES)

MAKE_PROG_RULES=programs/Makeprog.rules
AC_SUBST_FILE(MAKE_PROG_RULES)

AC_CONFIG_FILES([
Make.rules
dlls/Makedll.rules
dlls/Maketest.rules
programs/Makeprog.rules
Makefile
dlls/Makefile
dlls/advapi32/Makefile
dlls/advapi32/tests/Makefile
dlls/avicap32/Makefile
dlls/avifil32/Makefile
dlls/comcat/Makefile
dlls/comctl32/Makefile
dlls/commdlg/Makefile
dlls/crtdll/Makefile
dlls/crypt32/Makefile
dlls/d3d8/Makefile
dlls/dciman32/Makefile
dlls/ddraw/Makefile
dlls/devenum/Makefile
dlls/dinput/Makefile
dlls/dinput8/Makefile
dlls/dplay/Makefile
dlls/dplayx/Makefile
dlls/dsound/Makefile
dlls/gdi/Makefile
dlls/gdi/tests/Makefile
dlls/glu32/Makefile
dlls/icmp/Makefile
dlls/imagehlp/Makefile
dlls/imm32/Makefile
dlls/kernel/Makefile
dlls/kernel/tests/Makefile
dlls/lzexpand/Makefile
dlls/mapi32/Makefile
dlls/mpr/Makefile
dlls/msacm/Makefile
dlls/msacm/imaadp32/Makefile
dlls/msacm/msadp32/Makefile
dlls/msacm/msg711/Makefile
dlls/msacm/winemp3/Makefile
dlls/msdmo/Makefile
dlls/msimg32/Makefile
dlls/msisys/Makefile
dlls/msnet32/Makefile
dlls/msvcrt/Makefile
dlls/msvcrt20/Makefile
dlls/msvideo/Makefile
dlls/msvideo/msrle32/Makefile
dlls/netapi32/Makefile
dlls/netapi32/tests/Makefile
dlls/ntdll/Makefile
dlls/ntdll/tests/Makefile
dlls/odbc32/Makefile
dlls/ole32/Makefile
dlls/oleaut32/Makefile
dlls/oleaut32/tests/Makefile
dlls/olecli/Makefile
dlls/oledlg/Makefile
dlls/olepro32/Makefile
dlls/olesvr/Makefile
dlls/opengl32/Makefile
dlls/psapi/Makefile
dlls/qcap/Makefile
dlls/quartz/Makefile
dlls/rasapi32/Makefile
dlls/richedit/Makefile
dlls/rpcrt4/Makefile
dlls/rpcrt4/tests/Makefile
dlls/serialui/Makefile
dlls/setupapi/Makefile
dlls/shdocvw/Makefile
dlls/shell32/Makefile
dlls/shell32/tests/Makefile
dlls/shfolder/Makefile
dlls/shlwapi/Makefile
dlls/shlwapi/tests/Makefile
dlls/snmpapi/Makefile
dlls/sti/Makefile
dlls/tapi32/Makefile
dlls/ttydrv/Makefile
dlls/twain/Makefile
dlls/url/Makefile
dlls/urlmon/Makefile
dlls/user/Makefile
dlls/user/tests/Makefile
dlls/version/Makefile
dlls/win32s/Makefile
dlls/winaspi/Makefile
dlls/winedos/Makefile
dlls/wineps/Makefile
dlls/wininet/Makefile
dlls/wininet/tests/Makefile
dlls/winmm/Makefile
dlls/winmm/joystick/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/winealsa/Makefile
dlls/winmm/winearts/Makefile
dlls/winmm/wineaudioio/Makefile
dlls/winmm/winenas/Makefile
dlls/winmm/wineoss/Makefile
dlls/winnls/Makefile
dlls/winsock/Makefile
dlls/winsock/tests/Makefile
dlls/winspool/Makefile
dlls/wintrust/Makefile
dlls/wow32/Makefile
dlls/wsock32/Makefile
dlls/x11drv/Makefile
documentation/Makefile
include/Makefile
library/Makefile
miscemu/Makefile
ole/Makefile
programs/Makefile
programs/avitools/Makefile
programs/clock/Makefile
programs/cmdlgtst/Makefile
programs/control/Makefile
programs/expand/Makefile
programs/notepad/Makefile
programs/osversioncheck/Makefile
programs/progman/Makefile
programs/regapi/Makefile
programs/regedit/Makefile
programs/regsvr32/Makefile
programs/regtest/Makefile
programs/uninstaller/Makefile
programs/view/Makefile
programs/wcmd/Makefile
programs/wineconsole/Makefile
programs/winedbg/Makefile
programs/winefile/Makefile
programs/winemine/Makefile
programs/winepath/Makefile
programs/winetest/Makefile
programs/winhelp/Makefile
programs/winver/Makefile
server/Makefile
tools/Makefile
tools/widl/Makefile
tools/winapi/Makefile
tools/winebuild/Makefile
tools/winedump/Makefile
tools/wmc/Makefile
tools/wpp/Makefile
tools/wrc/Makefile
unicode/Makefile])

AC_OUTPUT

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 at the very least."
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 built without"
  echo "*** threading support. Consider upgrading libc to a more recent"
  echo "*** reentrant version of libc."
fi

if test "$have_x" = "yes" -a "$wine_cv_x_reentrant" != "yes"
then
  echo
  echo "*** Warning: non-reentrant X11 library detected. Multi-threaded"
  echo "*** applications won't work properly. You should upgrade your X11 library."
fi

if test "$wine_cv_opengl_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

if test "$wine_cv_opengl_version_threadsafe" = "yes" -a "x$enable_opengl" = "x"
then
  echo
  echo "*** Warning: the OpenGL version you have installed relies on libpthread for"
  echo "*** thread-safety. To prevent crashes, OpenGL support has been disabled."
  echo "*** A fix for glibc 2.1.3 that seems to work is included in this version of Wine,"
  echo "*** start configure with '--enable-opengl' to force OpenGL support."
fi

if test "$wine_cv_opengl_version_threadsafe" = "yes" -a "x$enable_opengl" = "xyes"
then
  echo
  echo "*** Warning: you explicitly linked in a thread-safe OpenGL version. If you"
  echo "*** experience unusual crashes on DirectDraw games, try first to disable OpenGL"
  echo "*** support before reporting bugs."
fi

if test "$wine_cv_warn_cups_h" = "yes"
then
  echo
  echo "*** Note: You have cups runtime libraries, but no development"
  echo "*** libraries. Install the cups-devel package or whichever package"
  echo "*** contains cups.h to enable CUPS support in Wine."
fi

if test "$wine_cv_msg_freetype" = "yes"
then
  echo
  echo "*** Note: Your system appears to have the FreeType 2 runtime libraries"
  echo "*** installed, but 'freetype-config' is not in your PATH. Install the"
  echo "*** freetype-devel package (or its equivalent on your distribution) to"
  echo "*** enable Wine to use TrueType fonts."
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:
