diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..2ac35a5
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,1441 @@
+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.50)
+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 Default values
+LIBEXT=so       # library type .so or .a
+
+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(reentrant-x,AC_HELP_STRING([--without-reentrant-x],[compile for use with non-reentrant X libraries]))
+
+AC_SUBST(OPTIONS)
+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_TARGET
+AC_PROG_MAKE_SET
+AC_PROG_CC
+AC_PROG_CPP
+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_PROG_RANLIB
+AC_PROG_INSTALL
+AC_PROG_LN_S
+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)
+
+case $host_os in
+  *cygwin*) LDCOMBINE="ld -r --enable-stdcall-fixup" ;;
+         *) LDCOMBINE="ld -r" ;;
+esac
+AC_SUBST(LDCOMBINE)
+
+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 -lxpg4 for FreeBSD
+AC_CHECK_LIB(xpg4,_xpg4_setrunelocale)
+dnl Check for -lmmap for OS/2
+AC_CHECK_LIB(mmap,mmap)
+
+dnl Check for openpty
+UTILLIBS=""
+AC_SUBST(UTILLIBS)
+AC_CHECK_FUNCS(openpty,,
+	[AC_CHECK_LIB(util,openpty,
+		[AC_DEFINE(HAVE_OPENPTY)
+		UTILLIBS="-lutil"]
+	)])
+
+DLLIBS=""
+AC_SUBST(DLLIBS)
+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"
+    )
+
+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]])
+        )
+
+        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]])
+        )
+
+        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]])
+	)
+        
+        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]])
+        )
+
+        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]])
+        )
+
+        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]])
+        )
+
+        dnl *** Check for XRender extension
+        AC_CHECK_HEADERS(X11/extensions/Xrender.h,
+            [ dnl *** If X11/extensions/Xrender.h exists...
+                AC_CHECK_LIB(Xrender, XRenderQueryExtension,
+                  [ AC_DEFINE(HAVE_LIBXRENDER, 1, [Define if you have the XRender extension library])
+                     X_PRE_LIBS="$X_PRE_LIBS -lXrender"
+                  ],,
+                  $X_LIBS -lXext -lX11 $X_EXTRA_LIBS
+                )
+            ],
+            AC_MSG_WARN([[XRender extension not found, Wine will be built without it]])
+        )
+
+      ]
+    ) 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 GL/glext.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 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 FreeType 2 ****
+AC_CHECK_LIB(freetype,FT_Init_FreeType,ft_lib=yes,ft_lib=no,$X_LIBS)
+if test "$ft_lib" = "no"
+then
+    FREETYPELIBS=""
+    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
+    	FREETYPELIBS=""
+	FREETYPEINCL=""
+	wine_cv_msg_freetype=yes
+    else
+	FREETYPELIBS=`$ft_devel --libs`
+	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
+	    FREETYPELIBS=""
+	    FREETYPEINCL=""
+	    wine_cv_msg_freetype=yes
+	fi
+    fi
+fi
+AC_SUBST(FREETYPELIBS)
+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 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 **** 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 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,
+  [saved_cflags=$CFLAGS
+  CFLAGS="$CFLAGS -mpreferred-stack-boundary=2"
+  AC_TRY_COMPILE(,[return 0],ac_cv_c_gcc_stack_boundary="yes",ac_cv_c_gcc_stack_boundary="no")
+  CFLAGS=$saved_cflags
+  ])
+  if test "$ac_cv_c_gcc_stack_boundary" = "yes"
+  then
+    CFLAGS="$CFLAGS -mpreferred-stack-boundary=2"
+  fi
+fi
+
+dnl **** Check if we need to place .type inside a .def directive ****
+
+AC_CACHE_CHECK([whether .type must sit inside a .def directive],
+	       ac_cv_c_type_in_def,
+[saved_libs=$LIBS
+LIBS="conftest_asm.s $LIBS"
+cat > conftest_asm.s <<EOF
+	.globl _ac_test
+	.def _ac_test; .scl 2; .type 32; .endef
+_ac_test:
+	.long 0
+EOF
+AC_TRY_LINK(,,ac_cv_c_type_in_def="yes",ac_cv_c_type_in_def="no")
+LIBS=$saved_libs])
+if test "$ac_cv_c_type_in_def" = "yes"
+then
+  AC_DEFINE(NEED_TYPE_IN_DEF, 1, [Define if .type asm directive must be inside a .def directive])
+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, 1,
+            [Define if symbols declared in assembly code need an underscore prefix])
+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,
+[saved_libs=$LIBS
+LIBS="conftest_asm.s $LIBS"
+if test "$ac_cv_c_extern_prefix" = "yes"
+then
+cat > conftest_asm.s <<EOF
+	.globl _ac_test@0
+_ac_test@0:
+EOF
+else
+cat > conftest_asm.s <<EOF
+	.globl ac_test@0
+ac_test@0:
+EOF
+fi
+AC_TRY_LINK([extern void __attribute__((__stdcall__)) ac_test(void);],
+            [ac_test(); return 0],
+            ac_cv_c_stdcall_decoration="yes",ac_cv_c_stdcall_decoration="no")
+LIBS=$saved_libs])
+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,
+[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, 1, [Define to use .string instead of .ascii])
+fi
+
+dnl **** Check for working dll ****
+
+LDSHARED=""
+LDDLLFLAGS=""
+if test "$LIBEXT" = "so"
+then
+  AC_CACHE_CHECK([whether we can build a GNU style ELF dll],
+                 ac_cv_c_dll_gnuelf,
+  [saved_cflags=$CFLAGS
+  CFLAGS="$CFLAGS -fPIC -shared -Wl,-soname,conftest.so.1.0,-Bsymbolic"
+  AC_TRY_LINK(,[return 1],ac_cv_c_dll_gnuelf="yes",ac_cv_c_dll_gnuelf="no")
+  CFLAGS=$saved_cflags
+  ])
+  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,
+    [saved_cflags=$CFLAGS
+    CFLAGS="$CFLAGS -fPIC -Wl,-G,-h,conftest.so.1.0,-B,symbolic"
+    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
+      LDSHARED="\$(CC) -Wl,-G \$(SONAME:%=-Wl,-h,%)"
+      LDDLLFLAGS="-Wl,-B,symbolic"
+    fi
+  fi
+  if test "$ac_cv_c_dll_gnuelf" = "no" -a "$ac_cv_c_dll_unixware" = "no"
+  then
+    LIBEXT="a"
+    AC_CHECK_PROG(DLLWRAP,dllwrap,dllwrap,false)
+    if test "$DLLWRAP" = "dllwrap"; then
+      dnl FIXME - check whether dllwrap works correctly...
+      case $host_os in
+        *cygwin*)
+            LIBEXT="dll"
+            ;;
+      esac
+    fi
+  fi
+fi
+
+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
+
+DLLFLAGS=""
+LDPATH=""
+
+if test "$LIBEXT" = "so"; then
+    DLLFLAGS="-fPIC"
+    LDPATH="LD_LIBRARY_PATH=\"\$(TOPOBJDIR)/unicode:\$\$LD_LIBRARY_PATH\""
+elif test "$LIBEXT" = "dll"; then
+    #DLLFLAGS="-fPIC" # -fPIC doesn't work(at least in cygwin-b20) - FIXME
+    LDPATH="PATH=\"\$(TOPOBJDIR)/unicode:\$\$PATH\""
+fi
+
+AC_SUBST(DLLFLAGS)
+AC_SUBST(LDSHARED)
+AC_SUBST(LDDLLFLAGS)
+AC_SUBST(LIBEXT)
+AC_SUBST(LDPATH)
+
+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).
+
+AC_DEFUN([WINE_CHECK_ERRNO],
+[
+  AC_CACHE_CHECK(for reentrant libc: $1, wine_cv_libc_r_$1,
+  [AC_TRY_RUN([int myerrno = 0;
+char buf[256];
+int *$1(){return &myerrno;}
+main(){connect(0,buf,255); exit(!myerrno);}],
+  wine_cv_libc_r_$1=yes, wine_cv_libc_r_$1=no,
+  wine_cv_libc_r_$1=yes )
+])
+if test "$wine_cv_libc_r_$1" = "yes"
+then
+    wine_cv_libc_reentrant=$1 
+fi
+])
+
+wine_cv_libc_reentrant=no 
+dnl Linux style errno location
+WINE_CHECK_ERRNO(__errno_location)
+dnl FreeBSD style errno location
+WINE_CHECK_ERRNO(__error)
+dnl Solaris style errno location
+WINE_CHECK_ERRNO(___errno)
+dnl UnixWare style errno location
+WINE_CHECK_ERRNO(__thr_errno)
+dnl NetBSD style errno location
+WINE_CHECK_ERRNO(__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. 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, 1,
+            [Define if X libraries are not reentrant (compiled without -D_REENTRANT)])
+fi
+
+
+dnl **** Check for functions ****
+
+AC_FUNC_ALLOCA()
+AC_CHECK_FUNCS(\
+	__libc_fork \
+	_lwp_create \
+	clone \
+	ecvt \
+	finite \
+	fpclass \
+	ftruncate64 \
+	getnetbyaddr \
+	getnetbyname \
+	getpagesize \
+	getprotobyname \
+	getprotobynumber \
+	getrlimit \
+	getservbyport \
+	getsockopt \
+	inet_network \
+	lseek64 \
+	lstat \
+	memmove \
+	mmap \
+	pread \
+	pwrite \
+	rfork \
+	select \
+	sendmsg \
+	settimeofday \
+	sigaltstack \
+	statfs \
+	strcasecmp \
+	strerror \
+	strncasecmp \
+	tcgetattr \
+	timegm \
+	usleep \
+	vfscanf \
+	wait4 \
+	waitpid \
+)
+
+dnl **** Check for header files ****
+
+AC_CHECK_HEADERS(\
+	arpa/inet.h \
+	arpa/nameser.h \
+	elf.h \
+	float.h \
+	ieeefp.h \
+	libio.h \
+	libutil.h \
+	link.h \
+	linux/cdrom.h \
+	linux/input.h \
+	linux/joystick.h \
+	linux/ucdrom.h \
+	net/if.h \
+	netdb.h \
+	netinet/in.h \
+	netinet/in_systm.h \
+	netinet/ip.h \
+	netinet/tcp.h \
+	pty.h \
+	resolv.h \
+	sched.h \
+	socket.h \
+	stdint.h \
+	strings.h \
+	sys/cdio.h \
+	sys/errno.h \
+	sys/file.h \
+	sys/filio.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/ptrace.h \
+	sys/reg.h \
+	sys/signal.h \
+	sys/shm.h \
+	sys/socket.h \
+	sys/sockio.h \
+	sys/statfs.h \
+	sys/strtio.h \
+	sys/syscall.h \
+	sys/user.h \
+	sys/wait.h \
+	sys/v86.h \
+	sys/v86intr.h \
+	sys/vfs.h \
+	sys/vm86.h \
+	syscall.h \
+	ucontext.h \
+)
+AC_HEADER_STAT()
+
+dnl **** Check for types ****
+
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_MODE_T
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_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 *** Check for some structure members
+
+dnl Macro to check if a structure contains a specified member
+dnl Usage: WINE_CHECK_STRUCT_MEMBER(struct,member,[includes,[action-if-found,[action-if-not-found]]])
+
+AC_DEFUN([WINE_CHECK_STRUCT_MEMBER],
+[AC_CACHE_CHECK([for $2 in struct $1], ac_cv_c_$1_$2,
+ AC_TRY_COMPILE([$3],[struct $1 s; s.$2 = 0],ac_cv_c_$1_$2="yes",ac_cv_c_$1_$2="no"))
+AS_IF([ test "x$ac_cv_c_$1_$2" = "xyes"],[$4],[$5])
+])
+
+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 $target_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 **** Generate output files ****
+
+dnl Macro to create non-existent directories from config.status
+dnl Usage: WINE_CONFIG_EXTRA_DIR(dirname)
+AC_DEFUN([WINE_CONFIG_EXTRA_DIR],
+[AC_CONFIG_COMMANDS([$1],[test -d "$1" || (AC_MSG_NOTICE([creating $1]) && mkdir "$1")])])
+
+AH_TOP([#define __WINE_CONFIG_H])
+
+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/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(include/wine)
+
+AC_CONFIG_COMMANDS([include/wine/version.h],
+[AC_MSG_NOTICE([creating include/wine/version.h])
+cat >$tmp/version.h <<CEOF
+/* Generated automatically by configure; DO NOT EDIT! */
+#define WINE_RELEASE_INFO "Wine version $wine_version"
+CEOF
+if cmp -s $tmp/version.h include/wine/version.h 2>/dev/null; then
+  AC_MSG_NOTICE([include/wine/version.h is unchanged])
+  rm -f $tmp/version.h
+else
+  rm -f include/wine/version.h
+  mv $tmp/version.h include/wine/version.h
+fi],
+[wine_version=$PACKAGE_VERSION])
+
+MAKE_RULES=Make.rules
+AC_SUBST_FILE(MAKE_RULES)
+
+MAKE_DLL_RULES=dlls/Makedll.rules
+AC_SUBST_FILE(MAKE_DLL_RULES)
+
+MAKE_PROG_RULES=programs/Makeprog.rules
+AC_SUBST_FILE(MAKE_PROG_RULES)
+
+AC_CONFIG_FILES([
+Make.rules
+dlls/Makedll.rules
+programs/Makeprog.rules
+Makefile
+console/Makefile
+controls/Makefile
+debugger/Makefile
+dlls/Makefile
+dlls/advapi32/Makefile
+dlls/avicap32/Makefile
+dlls/avifil32/Makefile
+dlls/comctl32/Makefile
+dlls/commdlg/Makefile
+dlls/crtdll/Makefile
+dlls/crypt32/Makefile
+dlls/dciman32/Makefile
+dlls/ddraw/Makefile
+dlls/devenum/Makefile
+dlls/dinput/Makefile
+dlls/dplay/Makefile
+dlls/dplayx/Makefile
+dlls/dsound/Makefile
+dlls/gdi/Makefile
+dlls/glu32/Makefile
+dlls/icmp/Makefile
+dlls/imagehlp/Makefile
+dlls/imm32/Makefile
+dlls/kernel/Makefile
+dlls/lzexpand/Makefile
+dlls/mapi32/Makefile
+dlls/mpr/Makefile
+dlls/msacm/Makefile
+dlls/msdmo/Makefile
+dlls/msimg32/Makefile
+dlls/msnet32/Makefile
+dlls/msrle32/Makefile
+dlls/msvcrt/Makefile
+dlls/msvcrt20/Makefile
+dlls/msvideo/Makefile
+dlls/netapi32/Makefile
+dlls/ntdll/Makefile
+dlls/odbc32/Makefile
+dlls/ole32/Makefile
+dlls/oleaut32/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/serialui/Makefile
+dlls/setupapi/Makefile
+dlls/shdocvw/Makefile
+dlls/shell32/Makefile
+dlls/shfolder/Makefile
+dlls/shlwapi/Makefile
+dlls/sti/Makefile
+dlls/tapi32/Makefile
+dlls/ttydrv/Makefile
+dlls/url/Makefile
+dlls/urlmon/Makefile
+dlls/user/Makefile
+dlls/version/Makefile
+dlls/win32s/Makefile
+dlls/winaspi/Makefile
+dlls/winedos/Makefile
+dlls/wineps/Makefile
+dlls/wininet/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/wineoss/Makefile
+dlls/winnls/Makefile
+dlls/winsock/Makefile
+dlls/winspool/Makefile
+dlls/wintrust/Makefile
+dlls/wow32/Makefile
+dlls/wsock32/Makefile
+dlls/x11drv/Makefile
+documentation/Makefile
+files/Makefile
+graphics/Makefile
+graphics/enhmetafiledrv/Makefile
+graphics/metafiledrv/Makefile
+graphics/win16drv/Makefile
+graphics/x11drv/Makefile
+if1632/Makefile
+include/Makefile
+library/Makefile
+libtest/Makefile
+loader/Makefile
+loader/ne/Makefile
+memory/Makefile
+misc/Makefile
+miscemu/Makefile
+msdos/Makefile
+objects/Makefile
+ole/Makefile
+programs/Makefile
+programs/avitools/Makefile
+programs/clock/Makefile
+programs/cmdlgtst/Makefile
+programs/control/Makefile
+programs/notepad/Makefile
+programs/osversioncheck/Makefile
+programs/progman/Makefile
+programs/regapi/Makefile
+programs/regtest/Makefile
+programs/uninstaller/Makefile
+programs/view/Makefile
+programs/wcmd/Makefile
+programs/wineconsole/Makefile
+programs/winemine/Makefile
+programs/winetest/Makefile
+programs/winhelp/Makefile
+programs/winver/Makefile
+relay32/Makefile
+scheduler/Makefile
+server/Makefile
+tools/Makefile
+tools/winapi/Makefile
+tools/winebuild/Makefile
+tools/winedump/Makefile
+tools/wmc/Makefile
+tools/wrc/Makefile
+tsx11/Makefile
+unicode/Makefile
+win32/Makefile
+windows/Makefile
+windows/x11drv/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 "$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 removed."
+  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:
