--- SheepShaver/src/Unix/configure.in 2004/01/18 22:12:24 1.17 +++ SheepShaver/src/Unix/configure.in 2004/06/27 22:12:52 1.30 @@ -13,11 +13,16 @@ dnl Options. AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes]) AC_ARG_ENABLE(ppc-emulator, [ --enable-ppc-emulator use the selected PowerPC emulator [default=auto]], [WANT_EMULATED_PPC=$enableval], [WANT_EMULATED_PPC=auto]) AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes]) -AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes]) +AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=no]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=no]) AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes]) AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes]) AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]], [WANT_GTK=$withval], [WANT_GTK=yes]) AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes]) +AC_ARG_WITH(dgcc, [ --with-dgcc=COMPILER use C++ COMPILER to compile synthetic opcodes], [DYNGEN_CC=$withval]) + +dnl SDL options. +AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no]) +AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphics [default=no]], [WANT_SDL_VIDEO=$enableval], [WANT_SDL_VIDEO=no]) dnl Checks for programs. AC_PROG_CC @@ -85,14 +90,43 @@ fi dnl Checks for libraries. AC_CHECK_LIB(posix4, sem_init) -dnl We need X11. -AC_PATH_XTRA -if [[ "x$no_x" = "xyes" ]]; then - AC_MSG_ERROR([You need X11 to run SheepShaver.]) -fi -CFLAGS="$CFLAGS $X_CFLAGS" -CXXFLAGS="$CXXFLAGS $X_CFLAGS" -LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS" +dnl Do we need SDL? +WANT_SDL=no +SDL_SUPPORT="none" +if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then + WANT_SDL=yes + WANT_XF86_DGA=no + WANT_XF86_VIDMODE=no + WANT_FBDEV_DGA=no + SDL_SUPPORT="video" +fi +if [[ "x$WANT_SDL" = "xyes" ]]; then + AC_PATH_PROG(sdl_config, "sdl-config") + if [[ -n "$sdl_config" ]]; then + sdl_cflags=`$sdl_config --cflags` + if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then + sdl_libs=`$sdl_config --static-libs` + else + sdl_libs=`$sdl_config --libs` + fi + CFLAGS="$CFLAGS $sdl_cflags" + CXXFLAGS="$CXXFLAGS $sdl_cflags" + LIBS="$LIBS $sdl_libs" + else + WANT_SDL=no + fi +fi + +dnl We need X11, if not using SDL. +if [[ "x$WANT_SDL" = "xno" ]]; then + AC_PATH_XTRA + if [[ "x$no_x" = "xyes" ]]; then + AC_MSG_ERROR([You need X11 to run SheepShaver.]) + fi + CFLAGS="$CFLAGS $X_CFLAGS" + CXXFLAGS="$CXXFLAGS $X_CFLAGS" + LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS" +fi dnl We need pthreads on non-PowerPC systems. Try libpthread first, then libc_r (FreeBSD), then PTL. HAVE_PTHREADS=yes @@ -182,6 +216,7 @@ AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(mach/vm_map.h mach/mach_init.h sys/mman.h) AC_CHECK_HEADERS(sys/time.h sys/times.h) AC_CHECK_HEADERS(unistd.h fcntl.h byteswap.h) +AC_CHECK_HEADERS(linux/if.h linux/if_tun.h net/if.h net/if_tun.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_BIGENDIAN @@ -217,11 +252,12 @@ if [[ "x$ac_cv_signal_sa_restorer" = "xy fi dnl Checks for library functions. -AC_CHECK_FUNCS(strdup cfmakeraw) +AC_CHECK_FUNCS(strdup strlcpy cfmakeraw) AC_CHECK_FUNCS(nanosleep) AC_CHECK_FUNCS(sigaction signal) AC_CHECK_FUNCS(mmap mprotect munmap) AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect) +AC_CHECK_FUNCS(posix_memalign memalign valloc) dnl Darwin seems to define mach_task_self() instead of task_self(). AC_CHECK_FUNCS(mach_task_self task_self) @@ -237,6 +273,28 @@ no:linux*) ;; esac +dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES) +AC_DEFUN(AC_CHECK_FRAMEWORK, [ + AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl + AC_CACHE_CHECK([whether compiler supports framework $1], + ac_Framework, [ + saved_LIBS="$LIBS" + LIBS="$LIBS -framework $1" + AC_TRY_LINK( + [$2], [int main(void) { return 0; }], + [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"] + ) + ]) + AS_IF([test AS_VAR_GET(ac_Framework) = yes], + [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])] + ) + AS_VAR_POPDEF([ac_Framework])dnl +]) + +dnl Check for some MacOS X frameworks +AC_CHECK_FRAMEWORK(Carbon, [#include ]) +AC_CHECK_FRAMEWORK(IOKit, [#include ]) + dnl Select system-dependant sources. SERIALSRC=serial_unix.cpp ETHERSRC=../dummy/ether_dummy.cpp @@ -256,9 +314,32 @@ darwin*) if [[ "x$EMULATED_PPC" = "xno" ]]; then EXTRASYSSRCS="Darwin/paranoia.cpp Linux/asm_linux.S" fi + if [[ "x$ac_cv_framework_IOKit" = "xyes" ]]; then + EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/sys_darwin.cpp" + fi ;; esac -SYSSRCS="$SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $MONSRCS $EXTRASYSSRCS" + +dnl SDL overrides +if [[ "x$WANT_SDL" = "xyes" ]]; then + AC_DEFINE(USE_SDL, 1, [Define to enble SDL support]) +fi +if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then + VIDEOSRCS="../SDL/video_sdl.cpp" + AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support]) + KEYCODES="../SDL/keycodes" + if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then + EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp" + else + EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp" + fi +else + VIDEOSRCS="video_x.cpp" + KEYCODES="keycodes" + EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp" +fi + +SYSSRCS="$VIDEOSRCS $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $MONSRCS $EXTRASYSSRCS" dnl Define a macro that translates a yesno-variable into a C macro definition dnl to be put into the config.h file @@ -271,6 +352,29 @@ AC_DEFUN(AC_TRANSLATE_DEFINE, [ fi ]) +dnl Check that the host supports TUN/TAP devices +AC_CACHE_CHECK([whether TUN/TAP is supported], + ac_cv_tun_tap_support, [ + AC_TRY_COMPILE([ + #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H) + #include + #include + #endif + #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H) + #include + #include + #endif + ], [ + struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); + ifr.ifr_flags = IFF_TAP | IFF_NO_PI; + ], + ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no + ) +]) +AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support", + [Define if your system supports TUN/TAP devices.]) + dnl Various checks if the system supports vm_allocate() and the like functions. have_mach_vm=no if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \ @@ -524,10 +628,8 @@ AC_CACHE_CHECK([whether your system supp #define CONFIGURE_TEST_SIGSEGV_RECOVERY #include "vm_alloc.cpp" #include "sigsegv.cpp" - ], [ - sigsegv_recovery=mach - ac_cv_have_mach_exceptions=yes ], + ac_cv_have_mach_exceptions=yes, ac_cv_have_mach_exceptions=no, dnl When cross-compiling, do not assume anything. ac_cv_have_mach_exceptions=no @@ -535,6 +637,9 @@ AC_CACHE_CHECK([whether your system supp AC_LANG_RESTORE ] ) +if [[ "$ac_cv_have_mach_exceptions" = "yes" ]]; then + sigsegv_recovery=mach +fi AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions", [Define if your system supports Mach exceptions.]) @@ -549,10 +654,8 @@ if [[ -z "$sigsegv_recovery" ]]; then #define CONFIGURE_TEST_SIGSEGV_RECOVERY #include "vm_alloc.cpp" #include "sigsegv.cpp" - ], [ - sigsegv_recovery=siginfo - ac_cv_have_extended_signals=yes ], + ac_cv_have_extended_signals=yes, ac_cv_have_extended_signals=no, dnl When cross-compiling, do not assume anything. ac_cv_have_extended_signals=no @@ -560,6 +663,9 @@ if [[ -z "$sigsegv_recovery" ]]; then AC_LANG_RESTORE ] ) + if [[ "$ac_cv_have_extended_signals" = "yes" ]]; then + sigsegv_recovery=siginfo + fi AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals", [Define if your system support extended signals.]) fi @@ -575,16 +681,17 @@ if [[ -z "$sigsegv_recovery" ]]; then #define CONFIGURE_TEST_SIGSEGV_RECOVERY #include "vm_alloc.cpp" #include "sigsegv.cpp" - ], [ - sigsegv_recovery=sigcontext - ac_cv_have_sigcontext_hack=yes ], + ac_cv_have_sigcontext_hack=yes, ac_cv_have_sigcontext_hack=no, dnl When cross-compiling, do not assume anything. ac_cv_have_sigcontext_hack=no ) AC_LANG_RESTORE ]) + if [[ "$ac_cv_have_sigcontext_hack" = "yes" ]]; then + sigsegv_recovery=sigcontext + fi AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack", [Define if we know a hack to replace siginfo_t->si_addr member.]) fi @@ -623,7 +730,7 @@ else fi dnl Platform specific binary postprocessor -BLESS=/bin/true +AC_PATH_PROG(BLESS, "true") if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then BLESS=Darwin/lowmem LDFLAGS="$LDFLAGS -pagezero_size 0x3000" @@ -647,6 +754,14 @@ AC_EGREP_CPP(xyes, #endif ], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no)) +dnl Check for ICC. +AC_MSG_CHECKING(for ICC) +HAVE_ICC=no +if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then + HAVE_ICC=yes +fi +AC_MSG_RESULT($HAVE_ICC) + # Test if the compiler can generate ELF objects AC_CACHE_CHECK([whether the compiler can generate ELF objects], ac_cv_elf_objects, [ @@ -690,6 +805,22 @@ if [[ "x$EMULATED_PPC" = "xyes" ]]; then ac_cv_use_dyngen=no ;; esac + dnl Check for a suitable synthetic opcodes compiler (icc is faking itself as gcc 3.2.2) + if [[ -z "$DYNGEN_CC" ]]; then + if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then + DYNGEN_CC=$CXX + else + for p in /usr/bin /usr/local/bin; do + gxx="$p/g++" + if [[ -x "$gxx" ]]; then + DYNGEN_CC="$gxx" + fi + done + fi + fi + if [[ -z "$DYNGEN_CC" ]] || ! { echo '#include ' | $DYNGEN_CC -xc++ -c -o /dev/null - >& /dev/null; }; then + ac_cv_use_dyngen=no + fi ]) if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then case $host_cpu in @@ -700,6 +831,17 @@ if [[ "x$EMULATED_PPC" = "xyes" ]]; then else DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -malign-functions=0" fi + saved_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -mmmx" + AC_CHECK_HEADERS(mmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -mmmx"]) + CPPFLAGS="$CPPFLAGS -msse" + AC_CHECK_HEADERS(xmmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -msse"]) + CPPFLAGS="$CPPFLAGS -msse2" + AC_CHECK_HEADERS(emmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -msse2"]) + CPPFLAGS=$saved_CPPFLAGS + ;; + x86_64) + AC_CHECK_HEADERS(mmintrin.h xmmintrin.h emmintrin.h) ;; esac DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-limit=10000" @@ -754,16 +896,19 @@ fi dnl Generate Makefile. AC_SUBST(DYNGENSRCS) +AC_SUBST(DYNGEN_CC) AC_SUBST(DYNGEN_OP_FLAGS) AC_SUBST(SYSSRCS) AC_SUBST(CPUSRCS) AC_SUBST(BLESS) +AC_SUBST(KEYCODES) AC_OUTPUT(Makefile) dnl Print summary. echo echo SheepShaver configuration summary: echo +echo SDL support ...................... : $SDL_SUPPORT echo XFree86 DGA support .............. : $WANT_XF86_DGA echo XFree86 VidMode support .......... : $WANT_XF86_VIDMODE echo Using PowerPC emulator ........... : $EMULATED_PPC