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.
LIBS="$LIBS -lm"
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])

dnl AC_ARG_WITH(ipc,
dnl [  --enable-ipc            use inter-process communication for DDE],
dnl [if test "$enableval" = "no"; then : ; else OPTIONS="-DCONFIG_IPC"; 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)

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

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)
if test "$ac_cv_func_gethostbyname" = "no"
then
    AC_CHECK_LIB(nsl,gethostbyname)
fi
dnl Check for -lxpg4 for FreeBSD
AC_CHECK_LIB(xpg4,setrunelocale)
dnl Check for -ldl
AC_CHECK_LIB(dl,dlopen)
AC_SUBST(XLIB)
if test "$have_x" = "yes"
then
    XLIB="-lXpm -lXext -lX11"
    dnl Check for -lXpm
    dnl FIXME: should be done once we can compile without -lXpm
    dnl AC_CHECK_LIB(Xpm,XpmCreatePixmapFromData,AC_DEFINE(HAVE_LIBXXPM) X_PRE_LIBS="$X_PRE_LIBS -lXpm",,$X_LIBS -lXext -lX11)
    dnl Check for X Shm extension
    AC_CHECK_LIB(Xext,XShmQueryExtension,AC_DEFINE(HAVE_LIBXXSHM),,$X_LIBS -lXext -lX11)
    dnl Check for XFree86 DGA extension
    AC_CHECK_LIB(Xxf86dga,XF86DGAQueryExtension,AC_DEFINE(HAVE_LIBXXF86DGA) X_PRE_LIBS="$X_PRE_LIBS -lXxf86dga",,$X_LIBS -lXext -lX11)
    dnl Check for XFree86 VMODE extension
    AC_CHECK_LIB(Xxf86vm,XF86VidModeQueryExtension,AC_DEFINE(HAVE_LIBXXF86VM) X_PRE_LIBS="$X_PRE_LIBS -lXxf86vm",,$X_LIBS -lXext -lX11)
    dnl Check for the presence of Mesa
    AC_CHECK_LIB(MesaGL,OSMesaCreateContext,AC_DEFINE(HAVE_LIBMESAGL) X_PRE_LIBS="$X_PRE_LIBS -lMesaGL",,$X_LIBS -lXext -lX11 -lm)
    AC_CHECK_HEADERS(GL/osmesa.h)
else
    XLIB=""
    X_CFLAGS=""
    X_LIBS=""
fi

dnl **** Check which curses lib to use ***
AC_CHECK_LIB(ncurses,waddch)
if test "$ac_cv_lib_ncurses_waddch" = "yes"
then
    AC_CHECK_LIB(ncurses,resizeterm,AC_DEFINE(HAVE_RESIZETERM))
else
    AC_CHECK_LIB(curses,waddch)
    AC_CHECK_LIB(curses,resizeterm,AC_DEFINE(HAVE_RESIZETERM))
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

dnl **** Check for union semun ****

AC_CACHE_CHECK("for union semun", ac_cv_c_union_semun,
 AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/sem.h>],[union semun foo],
                ac_cv_c_union_semun="yes", ac_cv_c_union_semun="no"))
if test "$ac_cv_c_union_semun" = "yes"
then
    AC_DEFINE(HAVE_UNION_SEMUN)
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=""
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
    DLLFLAGS="-fPIC"
    LDSHARED="\$(CC) -shared -Wl,-soname,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
      DLLFLAGS="-fPIC"
      LDSHARED="ld -Bshareable -Bforcearchive"
    fi
  fi
  if test "$ac_cv_c_dll_linux" = "no" -a "$ac_cv_c_dll_netbsd" = "no"
  then
    LIB_TARGET="libwine.a"
  fi
fi
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).

AC_CACHE_CHECK("for reentrant libc", wine_cv_libc_reentrant,
  [AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *__errno_location(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
  wine_cv_libc_reentrant=yes, wine_cv_libc_reentrant=no,
  wine_cv_libc_reentrant=yes ) ] )
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.

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_ckeck=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 __errno_location >/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 ] )
if test "$wine_cv_x_reentrant" = "no"
then
  AC_DEFINE(NO_REENTRANT_X11)
fi

dnl **** Check for functions and header files ****

AC_CHECK_FUNCS(clone getpagesize memmove sendmsg sigaltstack strerror stricmp tcgetattr timegm usleep wait4 waitpid vfscanf)
AC_CHECK_HEADERS(wctype.h sys/syscall.h syscall.h sys/param.h sys/vfs.h sys/mount.h sys/statfs.h float.h linux/cdrom.h linux/ucdrom.h sys/cdio.h sys/filio.h sys/modem.h strings.h sys/strtio.h dlfcn.h unistd.h sys/sockio.h net/if.h netinet/in.h sys/file.h libio.h curses.h ncurses.h elf.h)
AC_HEADER_STAT()
AC_C_CONST()
AC_TYPE_SIZE_T()
AC_CHECK_SIZEOF(long long,0)

dnl **** Check for sendmsg in -lsocket if not found above ****

if test $ac_cv_func_sendmsg = no; then
    AC_CHECK_LIB(socket,sendmsg)
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 **** 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/comctl32/Makefile
dlls/imagehlp/Makefile
dlls/msacm/Makefile
dlls/msacm32/Makefile
dlls/ntdll/Makefile
dlls/psapi/Makefile
dlls/rasapi32/Makefile
dlls/shell32/Makefile
dlls/ver/Makefile
dlls/version/Makefile
dlls/winaspi/Makefile
dlls/wnaspi32/Makefile
documentation/Makefile
files/Makefile
graphics/Makefile
graphics/metafiledrv/Makefile
graphics/psdrv/Makefile
graphics/win16drv/Makefile
graphics/x11drv/Makefile
if1632/Makefile
ipc/Makefile
library/Makefile
libtest/Makefile
loader/Makefile
loader/ne/Makefile
loader/dos/Makefile
memory/Makefile
misc/Makefile
miscemu/Makefile
msdos/Makefile
multimedia/Makefile
objects/Makefile
ole/Makefile
programs/Makefile
programs/clock/Makefile
programs/control/Makefile
programs/avitools/Makefile
programs/notepad/Makefile
programs/progman/Makefile
programs/regtest/Makefile
programs/view/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."
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

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:
