ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/configure.ac
Revision: 1.2
Committed: 2004-06-30T08:48:45Z (19 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.1: +7 -0 lines
Log Message:
Avoid corefiles. Check for large file support (> 2 GB).

File Contents

# User Rev Content
1 gbeauche 1.1 dnl Process this file with autoconf to produce a configure script.
2     dnl Written in 2002 by Christian Bauer
3    
4     AC_INIT([SheepShaver], 2.2, [Christian.Bauer@uni-mainz.de], SheepShaver)
5     AC_CONFIG_SRCDIR(main_unix.cpp)
6     AC_PREREQ(2.52)
7     AC_CONFIG_HEADER(config.h)
8    
9     dnl Canonical system information.
10     AC_CANONICAL_HOST
11     AC_CANONICAL_TARGET
12    
13 gbeauche 1.2 dnl Some systems do not put corefiles in the currect directory, avoid saving
14     dnl cores for the configure tests since some are intended to dump core.
15     ulimit -c 0
16    
17 gbeauche 1.1 dnl Options.
18     AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes])
19     AC_ARG_ENABLE(ppc-emulator, [ --enable-ppc-emulator use the selected PowerPC emulator [default=auto]], [WANT_EMULATED_PPC=$enableval], [WANT_EMULATED_PPC=auto])
20     AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes])
21     AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=no]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=no])
22     AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes])
23     AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes])
24     AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]], [WANT_GTK=$withval], [WANT_GTK=yes])
25     AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
26     AC_ARG_WITH(dgcc, [ --with-dgcc=COMPILER use C++ COMPILER to compile synthetic opcodes], [DYNGEN_CC=$withval])
27    
28     dnl SDL options.
29     AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no])
30     AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphics [default=no]], [WANT_SDL_VIDEO=$enableval], [WANT_SDL_VIDEO=no])
31    
32     dnl Checks for programs.
33     AC_PROG_CC
34     AC_PROG_CPP
35     AC_PROG_CXX
36     AC_PROG_MAKE_SET
37     AC_PROG_INSTALL
38    
39     dnl Check for PowerPC target CPU.
40     HAVE_PPC=no
41     AC_MSG_CHECKING(for PowerPC target CPU)
42     AC_EGREP_CPP(yes,
43     [
44     #ifdef __powerpc__
45     yes
46     #endif
47     #ifdef __ppc__
48     yes
49     #endif
50     ], [AC_MSG_RESULT(yes); HAVE_PPC=yes], AC_MSG_RESULT(no))
51    
52     dnl We use native CPU if possible.
53     EMULATED_PPC=yes
54     case $WANT_EMULATED_PPC in
55     auto) [[ "x$HAVE_PPC" = "xyes" ]] && EMULATED_PPC=no;;
56     no) EMULATED_PPC=no;;
57     esac
58     if [[ "x$EMULATED_PPC" = "xyes" ]]; then
59     AC_DEFINE(EMULATED_PPC, 1, [Define if using a PowerPC CPU emulator.])
60     fi
61    
62     dnl We use mon if possible.
63     MONSRCS=
64     case "x$WANT_MON" in
65     x/* | x.*)
66     mon_srcdir=$WANT_MON
67     WANT_MON=yes
68     ;;
69     xyes)
70     mon_srcdir=../../../mon/src
71     ;;
72     esac
73     if [[ "x$WANT_MON" = "xyes" ]]; then
74     AC_MSG_CHECKING(for mon)
75     if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
76     AC_MSG_RESULT(yes)
77     AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
78     MONSRCS="$mon_srcdir/mon.cpp $mon_srcdir/mon_6502.cpp $mon_srcdir/mon_z80.cpp $mon_srcdir/mon_cmd.cpp $mon_srcdir/mon_lowmem.cpp $mon_srcdir/mon_disass.cpp $mon_srcdir/mon_ppc.cpp $mon_srcdir/disass/floatformat.c $mon_srcdir/disass/i386-dis.c $mon_srcdir/disass/m68k-dis.c $mon_srcdir/disass/m68k-opc.c"
79     CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
80     AC_CHECK_LIB(ncurses, tgetent, ,
81     AC_CHECK_LIB(termcap, tgetent, ,
82     AC_CHECK_LIB(termlib, tgetent, ,
83     AC_CHECK_LIB(terminfo, tgetent, ,
84     AC_CHECK_LIB(Hcurses, tgetent, ,
85     AC_CHECK_LIB(curses, tgetent))))))
86     AC_CHECK_LIB(readline, readline)
87     AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
88     else
89     AC_MSG_RESULT(no)
90     AC_MSG_WARN([Could not find mon, ignoring --with-mon.])
91     WANT_MON=no
92     fi
93     fi
94    
95     dnl Checks for libraries.
96     AC_CHECK_LIB(posix4, sem_init)
97    
98     dnl Do we need SDL?
99     WANT_SDL=no
100     SDL_SUPPORT="none"
101     if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
102     WANT_SDL=yes
103     WANT_XF86_DGA=no
104     WANT_XF86_VIDMODE=no
105     WANT_FBDEV_DGA=no
106     SDL_SUPPORT="video"
107     fi
108     if [[ "x$WANT_SDL" = "xyes" ]]; then
109     AC_PATH_PROG(sdl_config, "sdl-config")
110     if [[ -n "$sdl_config" ]]; then
111     sdl_cflags=`$sdl_config --cflags`
112     if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then
113     sdl_libs=`$sdl_config --static-libs`
114     else
115     sdl_libs=`$sdl_config --libs`
116     fi
117     CFLAGS="$CFLAGS $sdl_cflags"
118     CXXFLAGS="$CXXFLAGS $sdl_cflags"
119     LIBS="$LIBS $sdl_libs"
120     else
121     WANT_SDL=no
122     fi
123     fi
124    
125     dnl We need X11, if not using SDL.
126     if [[ "x$WANT_SDL" = "xno" ]]; then
127     AC_PATH_XTRA
128     if [[ "x$no_x" = "xyes" ]]; then
129     AC_MSG_ERROR([You need X11 to run SheepShaver.])
130     fi
131     CFLAGS="$CFLAGS $X_CFLAGS"
132     CXXFLAGS="$CXXFLAGS $X_CFLAGS"
133     LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
134     fi
135    
136     dnl We need pthreads on non-PowerPC systems. Try libpthread first, then libc_r (FreeBSD), then PTL.
137     HAVE_PTHREADS=yes
138     case $EMULATED_PPC:$target_os in
139     no:linux*)
140     dnl We do have our own pthread_cancel() implementation
141     AC_DEFINE(HAVE_PTHREAD_CANCEL, 1, [Define if you have the pthread_cancel function.])
142     ;;
143     *:*)
144     AC_CHECK_LIB(pthread, pthread_create, , [
145     AC_CHECK_LIB(c_r, pthread_create, , [
146     AC_CHECK_LIB(PTL, pthread_create, , [
147     AC_MSG_ERROR([You need pthreads to run Basilisk II.])
148     ])
149     ])
150     ])
151     AC_CHECK_FUNCS(pthread_cancel)
152     AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
153     AC_CHECK_FUNCS(pthread_mutexattr_settype)
154     AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
155     if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
156     AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
157     fi
158     dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
159     SEMSRC=
160     AC_CHECK_FUNCS(sem_init, , [
161     if test "x$HAVE_PTHREADS" = "xyes"; then
162     SEMSRC=posix_sem.cpp
163     fi
164     ])
165     ;;
166     esac
167    
168     dnl We use XFree86 DGA if possible.
169     if [[ "x$WANT_XF86_DGA" = "xyes" ]]; then
170     AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, [
171     AC_DEFINE(ENABLE_XF86_DGA, 1, [Define if using XFree86 DGA extension.])
172     LIBS="$LIBS -lXxf86dga"
173     ], [
174     AC_MSG_WARN([Could not find XFree86 DGA extension, ignoring --enable-xf86-dga.])
175     WANT_XF86_DGA=no
176     ])
177     fi
178    
179     dnl We use XFree86 VidMode if possible.
180     if [[ "x$WANT_XF86_VIDMODE" = "xyes" ]]; then
181     AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, [
182     AC_DEFINE(ENABLE_XF86_VIDMODE, 1, [Define if using XFree86 DGA extension.])
183     LIBS="$LIBS -lXxf86vm"
184     ], [
185     AC_MSG_WARN([Could not find XFree86 VidMode extension, ignoring --enable-xf86-vidmode.])
186     WANT_XF86_VIDMODE=no
187     ])
188     fi
189    
190     dnl We use GTK+ if possible.
191     UISRCS=../dummy/prefs_editor_dummy.cpp
192     if [[ "x$WANT_GTK" = "xyes" ]]; then
193     AM_PATH_GTK(1.2.0, [
194     AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
195     CFLAGS="$CFLAGS $GTK_CFLAGS"
196     CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
197     LIBS="$LIBS $GTK_LIBS"
198     UISRCS=prefs_editor_gtk.cpp
199     ], [
200     AC_MSG_WARN([Could not find GTK+, disabling user interface.])
201     WANT_GTK=no
202     ])
203     fi
204    
205     dnl We use ESD if possible.
206     if [[ "x$WANT_ESD" = "xyes" ]]; then
207     AM_PATH_ESD(0.2.8, [
208     AC_DEFINE(ENABLE_ESD, 1, [Define is using ESD.])
209     CFLAGS="$CFLAGS $ESD_CFLAGS"
210     CXXFLAGS="$CXXFLAGS $ESD_CFLAGS"
211     LIBS="$LIBS $ESD_LIBS"
212     ], [
213     AC_MSG_WARN([Could not find ESD, disabling ESD support.])
214     WANT_ESD=no
215     ])
216     fi
217    
218 gbeauche 1.2 dnl We use 64-bit file size support if possible.
219     AC_SYS_LARGEFILE
220    
221 gbeauche 1.1 dnl Checks for header files.
222     AC_HEADER_STDC
223     AC_HEADER_SYS_WAIT
224     AC_CHECK_HEADERS(mach/vm_map.h mach/mach_init.h sys/mman.h)
225     AC_CHECK_HEADERS(sys/time.h sys/times.h sys/socket.h)
226     AC_CHECK_HEADERS(unistd.h fcntl.h byteswap.h)
227     AC_CHECK_HEADERS(linux/if.h, [], [], [
228     #if HAVE_SYS_SOCKET_H
229     # include <sys/socket.h>
230     #endif
231     ])
232     AC_CHECK_HEADERS(linux/if_tun.h net/if.h net/if_tun.h)
233    
234     dnl Checks for typedefs, structures, and compiler characteristics.
235     AC_C_BIGENDIAN
236     AC_C_CONST
237     AC_C_INLINE
238     AC_CHECK_SIZEOF(short, 2)
239     AC_CHECK_SIZEOF(int, 4)
240     AC_CHECK_SIZEOF(long, 4)
241     AC_CHECK_SIZEOF(long long, 8)
242     AC_CHECK_SIZEOF(float, 4)
243     AC_CHECK_SIZEOF(double, 8)
244     AC_CHECK_SIZEOF(void *, 4)
245     AC_TYPE_OFF_T
246     AC_CHECK_TYPE(loff_t, off_t)
247     AC_TYPE_SIZE_T
248     AC_TYPE_SIGNAL
249     AC_HEADER_TIME
250     AC_STRUCT_TM
251    
252     dnl Check whether struct sigaction has sa_restorer member.
253     AC_CACHE_CHECK([whether struct sigaction has sa_restorer],
254     ac_cv_signal_sa_restorer, [
255     AC_TRY_COMPILE([
256     #include <signal.h>
257     ], [struct sigaction sa; sa.sa_restorer = 0;],
258     ac_cv_signal_sa_restorer=yes, ac_cv_signal_sa_restorer=no,
259     dnl When cross-compiling, do not assume anything.
260     ac_cv_signal_sa_restorer=no
261     )
262     ])
263     if [[ "x$ac_cv_signal_sa_restorer" = "xyes" ]]; then
264     AC_DEFINE(HAVE_SIGNAL_SA_RESTORER, 1, [Define if sa_restorer is available in struct sigaction.])
265     fi
266    
267     dnl Checks for library functions.
268     AC_CHECK_FUNCS(strdup strlcpy cfmakeraw)
269     AC_CHECK_FUNCS(nanosleep)
270     AC_CHECK_FUNCS(sigaction signal)
271     AC_CHECK_FUNCS(mmap mprotect munmap)
272     AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
273     AC_CHECK_FUNCS(posix_memalign memalign valloc)
274    
275     dnl Darwin seems to define mach_task_self() instead of task_self().
276     AC_CHECK_FUNCS(mach_task_self task_self)
277    
278     dnl We need clock_gettime() for better performance but it may drag
279     dnl libpthread in, which we don't want for native ppc mode
280     case $EMULATED_PPC:$target_os in
281     no:linux*)
282     ;;
283     *:*)
284     AC_SEARCH_LIBS(clock_gettime, [rt posix4])
285     AC_CHECK_FUNCS(clock_gettime)
286     ;;
287     esac
288    
289     dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
290     AC_DEFUN(AC_CHECK_FRAMEWORK, [
291     AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
292     AC_CACHE_CHECK([whether compiler supports framework $1],
293     ac_Framework, [
294     saved_LIBS="$LIBS"
295     LIBS="$LIBS -framework $1"
296     AC_TRY_LINK(
297     [$2], [int main(void) { return 0; }],
298     [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
299     )
300     ])
301     AS_IF([test AS_VAR_GET(ac_Framework) = yes],
302     [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
303     )
304     AS_VAR_POPDEF([ac_Framework])dnl
305     ])
306    
307     dnl Check for some MacOS X frameworks
308     AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
309     AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
310    
311     dnl Select system-dependant sources.
312     SERIALSRC=serial_unix.cpp
313     ETHERSRC=../dummy/ether_dummy.cpp
314     SCSISRC=../dummy/scsi_dummy.cpp
315     AUDIOSRC=../dummy/audio_dummy.cpp
316     EXTRASYSSRCS=
317     case "$target_os" in
318     linux*)
319     ETHERSRC=Linux/ether_linux.cpp
320     AUDIOSRC=audio_oss_esd.cpp
321     SCSISRC=Linux/scsi_linux.cpp
322     if [[ "x$EMULATED_PPC" = "xno" ]]; then
323     EXTRASYSSRCS="Linux/paranoia.cpp Linux/sheepthreads.c Linux/asm_linux.S"
324     fi
325     ;;
326     darwin*)
327     if [[ "x$EMULATED_PPC" = "xno" ]]; then
328     EXTRASYSSRCS="Darwin/paranoia.cpp Linux/asm_linux.S"
329     fi
330     if [[ "x$ac_cv_framework_IOKit" = "xyes" ]]; then
331     EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/sys_darwin.cpp"
332     fi
333     ;;
334     esac
335    
336     dnl SDL overrides
337     if [[ "x$WANT_SDL" = "xyes" ]]; then
338     AC_DEFINE(USE_SDL, 1, [Define to enble SDL support.])
339     fi
340     if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
341     VIDEOSRCS="../SDL/video_sdl.cpp"
342     AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support.])
343     KEYCODES="../SDL/keycodes"
344     if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
345     EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp"
346     else
347     EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp"
348     fi
349     else
350     VIDEOSRCS="video_x.cpp"
351     KEYCODES="keycodes"
352     EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp"
353     fi
354    
355     SYSSRCS="$VIDEOSRCS $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $MONSRCS $EXTRASYSSRCS"
356    
357     dnl Define a macro that translates a yesno-variable into a C macro definition
358     dnl to be put into the config.h file
359     dnl $1 -- the macro to define
360     dnl $2 -- the value to translate
361     dnl $3 -- template name
362     AC_DEFUN(AC_TRANSLATE_DEFINE, [
363     if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
364     AC_DEFINE($1, 1, $3)
365     fi
366     ])
367    
368     dnl Check that the host supports TUN/TAP devices
369     AC_CACHE_CHECK([whether TUN/TAP is supported],
370     ac_cv_tun_tap_support, [
371     AC_TRY_COMPILE([
372     #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
373     #include <linux/if.h>
374     #include <linux/if_tun.h>
375     #endif
376     #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
377     #include <net/if.h>
378     #include <net/if_tun.h>
379     #endif
380     ], [
381     struct ifreq ifr;
382     memset(&ifr, 0, sizeof(ifr));
383     ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
384     ],
385     ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
386     )
387     ])
388     AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
389     [Define if your system supports TUN/TAP devices.])
390    
391     dnl Various checks if the system supports vm_allocate() and the like functions.
392     have_mach_vm=no
393     if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
394     "x$ac_cv_func_vm_protect" = "xyes" ]]; then
395     have_mach_vm=yes
396     fi
397     AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
398     [Define if your system has a working vm_allocate()-based memory allocator.])
399    
400     dnl Check that vm_allocate(), vm_protect() work
401     if [[ "x$have_mach_vm" = "xyes" ]]; then
402    
403     AC_CACHE_CHECK([whether vm_protect works],
404     ac_cv_vm_protect_works, [
405     AC_LANG_SAVE
406     AC_LANG_CPLUSPLUS
407     ac_cv_vm_protect_works=yes
408     dnl First the tests that should segfault
409     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
410     AC_TRY_RUN([
411     #define CONFIGURE_TEST_VM_MAP
412     #define TEST_VM_PROT_$test_def
413     #include "vm_alloc.cpp"
414     ], ac_cv_vm_protect_works=no, rm -f core,
415     dnl When cross-compiling, do not assume anything
416     ac_cv_vm_protect_works="guessing no"
417     )
418     done
419     AC_TRY_RUN([
420     #define CONFIGURE_TEST_VM_MAP
421     #define TEST_VM_PROT_RDWR_WRITE
422     #include "vm_alloc.cpp"
423     ], , ac_cv_vm_protect_works=no,
424     dnl When cross-compiling, do not assume anything
425     ac_cv_vm_protect_works="guessing no"
426     )
427     AC_LANG_RESTORE
428     ]
429     )
430    
431     dnl Remove support for vm_allocate() if vm_protect() does not work
432     if [[ "x$have_mach_vm" = "xyes" ]]; then
433     case $ac_cv_vm_protect_works in
434     *yes) have_mach_vm=yes;;
435     *no) have_mach_vm=no;;
436     esac
437     fi
438     AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
439     [Define if your system has a working vm_allocate()-based memory allocator.])
440    
441     fi dnl HAVE_MACH_VM
442    
443     dnl Various checks if the system supports mmap() and the like functions.
444     dnl ... and Mach memory allocators are not supported
445     have_mmap_vm=no
446     if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
447     "x$ac_cv_func_mprotect" = "xyes" ]]; then
448     if [[ "x$have_mach_vm" = "xno" ]]; then
449     have_mmap_vm=yes
450     fi
451     fi
452     AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
453     [Define if your system has a working mmap()-based memory allocator.])
454    
455     dnl Check that mmap() and associated functions work.
456     if [[ "x$have_mmap_vm" = "xyes" ]]; then
457    
458     dnl Check if we have a working anonymous mmap()
459     AC_CACHE_CHECK([whether mmap supports MAP_ANON],
460     ac_cv_mmap_anon, [
461     AC_LANG_SAVE
462     AC_LANG_CPLUSPLUS
463     AC_TRY_RUN([
464     #define HAVE_MMAP_ANON
465     #define CONFIGURE_TEST_VM_MAP
466     #define TEST_VM_MMAP_ANON
467     #include "vm_alloc.cpp"
468     ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
469     dnl When cross-compiling, do not assume anything.
470     ac_cv_mmap_anon="guessing no"
471     )
472     AC_LANG_RESTORE
473     ]
474     )
475     AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
476     [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
477    
478     AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
479     ac_cv_mmap_anonymous, [
480     AC_LANG_SAVE
481     AC_LANG_CPLUSPLUS
482     AC_TRY_RUN([
483     #define HAVE_MMAP_ANONYMOUS
484     #define CONFIGURE_TEST_VM_MAP
485     #define TEST_VM_MMAP_ANON
486     #include "vm_alloc.cpp"
487     ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
488     dnl When cross-compiling, do not assume anything.
489     ac_cv_mmap_anonymous="guessing no"
490     )
491     AC_LANG_RESTORE
492     ]
493     )
494     AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
495     [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
496    
497     AC_CACHE_CHECK([whether mprotect works],
498     ac_cv_mprotect_works, [
499     AC_LANG_SAVE
500     AC_LANG_CPLUSPLUS
501     ac_cv_mprotect_works=yes
502     dnl First the tests that should segfault
503     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
504     AC_TRY_RUN([
505     #define CONFIGURE_TEST_VM_MAP
506     #define TEST_VM_PROT_$test_def
507     #include "vm_alloc.cpp"
508     ], ac_cv_mprotect_works=no, rm -f core,
509     dnl When cross-compiling, do not assume anything
510     ac_cv_mprotect_works="guessing no"
511     )
512     done
513     AC_TRY_RUN([
514     #define CONFIGURE_TEST_VM_MAP
515     #define TEST_VM_PROT_RDWR_WRITE
516     #include "vm_alloc.cpp"
517     ], , ac_cv_mprotect_works=no,
518     dnl When cross-compiling, do not assume anything
519     ac_cv_mprotect_works="guessing no"
520     )
521     AC_LANG_RESTORE
522     ]
523     )
524    
525     dnl Remove support for mmap() if mprotect() does not work
526     if [[ "x$have_mmap_vm" = "xyes" ]]; then
527     case $ac_cv_mprotect_works in
528     *yes) have_mmap_vm=yes;;
529     *no) have_mmap_vm=no;;
530     esac
531     fi
532     AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
533     [Define if your system has a working mmap()-based memory allocator.])
534    
535     fi dnl HAVE_MMAP_VM
536    
537     dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
538     AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x3000],
539     ac_cv_pagezero_hack, [
540     ac_cv_pagezero_hack=no
541     if AC_TRY_COMMAND([Darwin/testlmem.sh 0x3000]); then
542     ac_cv_pagezero_hack=yes
543     dnl might as well skip the test for mmap-able low memory
544     ac_cv_can_map_lm=no
545     fi
546     ])
547     AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
548     [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
549    
550     dnl Check if we can mmap 0x3000 bytes from 0x0000
551     AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x3000],
552     ac_cv_can_map_lm, [
553     AC_LANG_SAVE
554     AC_LANG_CPLUSPLUS
555     AC_TRY_RUN([
556     #include "vm_alloc.cpp"
557     int main(void) { /* returns 0 if we could map the lowmem globals */
558     volatile char * lm = 0;
559     if (vm_init() < 0) exit(1);
560     if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
561     lm[0] = 'z';
562     if (vm_release((char *)lm, 0x2000) < 0) exit(1);
563     vm_exit(); exit(0);
564     }
565     ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
566     dnl When cross-compiling, do not assume anything.
567     ac_cv_can_map_lm="guessing no"
568     )
569     AC_LANG_RESTORE
570     ]
571     )
572    
573     dnl Check signal handlers need to be reinstalled
574     AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
575     ac_cv_signal_need_reinstall, [
576     AC_LANG_SAVE
577     AC_LANG_CPLUSPLUS
578     AC_TRY_RUN([
579     #include <stdlib.h>
580     #ifdef HAVE_UNISTD_H
581     #include <unistd.h>
582     #endif
583     #include <signal.h>
584     static int handled_signal = 0;
585     RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
586     int main(void) { /* returns 0 if signals need not to be reinstalled */
587     signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
588     exit(handled_signal == 2);
589     }
590     ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
591     dnl When cross-compiling, do not assume anything.
592     ac_cv_signal_need_reinstall="guessing yes"
593     )
594     AC_LANG_RESTORE
595     ]
596     )
597     AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
598     [Define if your system requires signals to be reinstalled.])
599    
600     dnl Check if sigaction handlers need to be reinstalled
601     AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
602     ac_cv_sigaction_need_reinstall, [
603     AC_LANG_SAVE
604     AC_LANG_CPLUSPLUS
605     AC_TRY_RUN([
606     #include <stdlib.h>
607     #ifdef HAVE_UNISTD_H
608     #include <unistd.h>
609     #endif
610     #include <signal.h>
611     static int handled_signal = 0;
612     RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
613     typedef RETSIGTYPE (*signal_handler)(int);
614     static signal_handler mysignal(int sig, signal_handler handler) {
615     struct sigaction old_sa;
616     struct sigaction new_sa;
617     new_sa.sa_handler = handler;
618     return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
619     }
620     int main(void) { /* returns 0 if signals need not to be reinstalled */
621     mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
622     exit(handled_signal == 2);
623     }
624     ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
625     dnl When cross-compiling, do not assume anything.
626     ac_cv_sigaction_need_reinstall="guessing yes"
627     )
628     AC_LANG_RESTORE
629     ]
630     )
631     AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
632     [Define if your system requires sigactions to be reinstalled.])
633    
634     dnl Check if Mach exceptions supported.
635     AC_CACHE_CHECK([whether your system supports Mach exceptions],
636     ac_cv_have_mach_exceptions, [
637     AC_LANG_SAVE
638     AC_LANG_CPLUSPLUS
639     AC_TRY_RUN([
640     #define HAVE_MACH_EXCEPTIONS 1
641     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
642     #include "vm_alloc.cpp"
643     #include "sigsegv.cpp"
644     ],
645     ac_cv_have_mach_exceptions=yes,
646     ac_cv_have_mach_exceptions=no,
647     dnl When cross-compiling, do not assume anything.
648     ac_cv_have_mach_exceptions=no
649     )
650     AC_LANG_RESTORE
651     ]
652     )
653     if [[ "$ac_cv_have_mach_exceptions" = "yes" ]]; then
654     sigsegv_recovery=mach
655     fi
656     AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
657     [Define if your system supports Mach exceptions.])
658    
659     dnl Otherwise, check if extended signals are supported.
660     if [[ -z "$sigsegv_recovery" ]]; then
661     AC_CACHE_CHECK([whether your system supports extended signal handlers],
662     ac_cv_have_extended_signals, [
663     AC_LANG_SAVE
664     AC_LANG_CPLUSPLUS
665     AC_TRY_RUN([
666     #define HAVE_SIGINFO_T 1
667     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
668     #include "vm_alloc.cpp"
669     #include "sigsegv.cpp"
670     ],
671     ac_cv_have_extended_signals=yes,
672     ac_cv_have_extended_signals=no,
673     dnl When cross-compiling, do not assume anything.
674     ac_cv_have_extended_signals=no
675     )
676     AC_LANG_RESTORE
677     ]
678     )
679     if [[ "$ac_cv_have_extended_signals" = "yes" ]]; then
680     sigsegv_recovery=siginfo
681     fi
682     AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
683     [Define if your system support extended signals.])
684     fi
685    
686     dnl Otherwise, check for subterfuges.
687     if [[ -z "$sigsegv_recovery" ]]; then
688     AC_CACHE_CHECK([whether we then have a subterfuge for your system],
689     ac_cv_have_sigcontext_hack, [
690     AC_LANG_SAVE
691     AC_LANG_CPLUSPLUS
692     AC_TRY_RUN([
693     #define HAVE_SIGCONTEXT_SUBTERFUGE 1
694     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
695     #include "vm_alloc.cpp"
696     #include "sigsegv.cpp"
697     ],
698     ac_cv_have_sigcontext_hack=yes,
699     ac_cv_have_sigcontext_hack=no,
700     dnl When cross-compiling, do not assume anything.
701     ac_cv_have_sigcontext_hack=no
702     )
703     AC_LANG_RESTORE
704     ])
705     if [[ "$ac_cv_have_sigcontext_hack" = "yes" ]]; then
706     sigsegv_recovery=sigcontext
707     fi
708     AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
709     [Define if we know a hack to replace siginfo_t->si_addr member.])
710     fi
711    
712     dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
713     AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
714     ac_cv_have_skip_instruction, [
715     AC_LANG_SAVE
716     AC_LANG_CPLUSPLUS
717     AC_TRY_RUN([
718     #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
719     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
720     #include "vm_alloc.cpp"
721     #include "sigsegv.cpp"
722     ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
723     dnl When cross-compiling, do not assume anything.
724     ac_cv_have_skip_instruction=no
725     )
726     AC_LANG_RESTORE
727     ]
728     )
729     AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
730     [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
731    
732     dnl Can we do Video on SEGV Signals ?
733     CAN_VOSF=no
734     if [[ -n "$sigsegv_recovery" ]]; then
735     CAN_VOSF=yes
736     fi
737    
738     dnl Enable VOSF screen updates with this feature is requested and feasible
739     if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
740     AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
741     else
742     WANT_VOSF=no
743     fi
744    
745     dnl Platform specific binary postprocessor
746     AC_PATH_PROG(BLESS, "true")
747     if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
748     BLESS=Darwin/lowmem
749     LDFLAGS="$LDFLAGS -pagezero_size 0x3000"
750     fi
751    
752     dnl Check for GCC 2.7 or higher.
753     HAVE_GCC27=no
754     AC_MSG_CHECKING(for GCC 2.7 or higher)
755     AC_EGREP_CPP(xyes,
756     [#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5
757     xyes
758     #endif
759     ], [AC_MSG_RESULT(yes); HAVE_GCC27=yes], AC_MSG_RESULT(no))
760    
761     dnl Check for GCC 3.0 or higher.
762     HAVE_GCC30=no
763     AC_MSG_CHECKING(for GCC 3.0 or higher)
764     AC_EGREP_CPP(xyes,
765     [#if __GNUC__ >= 3
766     xyes
767     #endif
768     ], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no))
769    
770     dnl Check for ICC.
771     AC_MSG_CHECKING(for ICC)
772     HAVE_ICC=no
773     if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
774     HAVE_ICC=yes
775     fi
776     AC_MSG_RESULT($HAVE_ICC)
777    
778     # Test if the compiler can generate ELF objects
779     AC_CACHE_CHECK([whether the compiler can generate ELF objects],
780     ac_cv_elf_objects, [
781     echo 'int i;' > conftest.$ac_ext
782     ac_cv_elf_objects=no
783     if AC_TRY_EVAL(ac_compile); then
784     case `/usr/bin/file conftest.$ac_objext` in
785     *"ELF"*)
786     ac_cv_elf_objects=yes
787     ;;
788     esac
789     fi
790     rm -rf conftest*
791     ])
792     ELF_OBJECTS=$ac_cv_elf_objects
793    
794     dnl CPU emulator sources
795     if [[ "x$EMULATED_PPC" = "xyes" ]]; then
796     CPUSRCS="\
797     ../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \
798     ../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \
799     ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp \
800     ../kpx_cpu/src/cpu/ppc/ppc-translate.cpp"
801     CPPFLAGS="$CPPFLAGS -I../kpx_cpu/include -I../kpx_cpu/src"
802    
803     dnl Enable JIT compiler, if possible
804     if [[ "x$WANT_JIT" = "xyes" ]]; then
805     AC_CACHE_CHECK([whether dyngen can be used],
806     ac_cv_use_dyngen, [
807     case $host_cpu:$ELF_OBJECTS in
808     powerpc:yes)
809     ac_cv_use_dyngen=yes
810     ;;
811     x86_64:yes)
812     ac_cv_use_dyngen=yes
813     ;;
814     i?86:yes)
815     ac_cv_use_dyngen=yes
816     ;;
817     *:*)
818     ac_cv_use_dyngen=no
819     ;;
820     esac
821     dnl Check for a suitable synthetic opcodes compiler (icc is faking itself as gcc 3.2.2)
822     if [[ -z "$DYNGEN_CC" ]]; then
823     if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
824     DYNGEN_CC=$CXX
825     else
826     for p in /usr/bin /usr/local/bin; do
827     gxx="$p/g++"
828     if [[ -x "$gxx" ]]; then
829     DYNGEN_CC="$gxx"
830     fi
831     done
832     fi
833     fi
834     if [[ -z "$DYNGEN_CC" ]] || ! { echo '#include <limits>' | $DYNGEN_CC -xc++ -c -o /dev/null - >& /dev/null; }; then
835     ac_cv_use_dyngen=no
836     fi
837     ])
838     if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
839     case $host_cpu in
840     i?86)
841     DYNGEN_OP_FLAGS="-fomit-frame-pointer -mpreferred-stack-boundary=2"
842     if [[ "x$HAVE_GCC30" = "xyes" ]]; then
843     DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -falign-functions=0"
844     else
845     DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -malign-functions=0"
846     fi
847     saved_CPPFLAGS=$CPPFLAGS
848     CPPFLAGS="$CPPFLAGS -mmmx"
849     AC_CHECK_HEADERS(mmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -mmmx"])
850     CPPFLAGS="$CPPFLAGS -msse"
851     AC_CHECK_HEADERS(xmmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -msse"])
852     CPPFLAGS="$CPPFLAGS -msse2"
853     AC_CHECK_HEADERS(emmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -msse2"])
854     CPPFLAGS=$saved_CPPFLAGS
855     ;;
856     x86_64)
857     AC_CHECK_HEADERS(mmintrin.h xmmintrin.h emmintrin.h)
858     ;;
859     esac
860     DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-limit=10000"
861     if [[ "x$HAVE_GCC30" = "xyes" ]]; then
862     DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-reorder-blocks -fno-optimize-sibling-calls"
863     fi
864     else
865     WANT_JIT=no
866     fi
867     AC_TRANSLATE_DEFINE(ENABLE_DYNGEN, $ac_cv_use_dyngen, [Define to enable dyngen engine])
868     if [[ "x$WANT_JIT" = "xyes" ]]; then
869     DYNGENSRCS="\
870     ../kpx_cpu/src/cpu/jit/dyngen.c \
871     ../kpx_cpu/src/cpu/jit/cxxdemangle.cpp"
872     CPUSRCS="\
873     ../kpx_cpu/src/cpu/jit/jit-cache.cpp \
874     ../kpx_cpu/src/cpu/jit/basic-dyngen.cpp \
875     ../kpx_cpu/src/cpu/ppc/ppc-dyngen.cpp $CPUSRCS"
876     fi
877     fi
878     CPUSRCS="$CPUSRCS ../kpx_cpu/sheepshaver_glue.cpp"
879     else
880     WANT_JIT=no
881     fi
882     if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
883     AC_CACHE_CHECK([whether static data regions are executable],
884     ac_cv_have_static_data_exec, [
885     AC_TRY_RUN([int main(void) {
886     #if defined(__powerpc__)
887     static unsigned int p[8] = {0x4e800020,};
888     asm volatile("dcbst 0,%0" : : "r" (p) : "memory");
889     asm volatile("sync" : : : "memory");
890     asm volatile("icbi 0,%0" : : "r" (p) : "memory");
891     asm volatile("sync" : : : "memory");
892     asm volatile("isync" : : : "memory");
893     ((void (*)(void))p)();
894     return 0;
895     #endif
896     return 1;
897     }], ac_cv_have_static_data_exec=yes, ac_cv_have_static_data_exec=no,
898     dnl When cross-compiling, do not assume anything.
899     ac_cv_have_static_data_exec=no
900     )
901     ])
902     fi
903     AC_TRANSLATE_DEFINE(HAVE_STATIC_DATA_EXEC, "$ac_cv_have_static_data_exec",
904     [Define if your system marks static data pages as executable.])
905    
906     if [[ "x$WANT_JIT" = "xyes" ]]; then
907     CPPFLAGS="$CPPFLAGS -DUSE_JIT"
908     fi
909    
910     dnl Generate Makefile.
911     AC_SUBST(DYNGENSRCS)
912     AC_SUBST(DYNGEN_CC)
913     AC_SUBST(DYNGEN_OP_FLAGS)
914     AC_SUBST(SYSSRCS)
915     AC_SUBST(CPUSRCS)
916     AC_SUBST(BLESS)
917     AC_SUBST(KEYCODES)
918     AC_OUTPUT(Makefile)
919    
920     dnl Print summary.
921     echo
922     echo SheepShaver configuration summary:
923     echo
924     echo SDL support ...................... : $SDL_SUPPORT
925     echo XFree86 DGA support .............. : $WANT_XF86_DGA
926     echo XFree86 VidMode support .......... : $WANT_XF86_VIDMODE
927     echo Using PowerPC emulator ........... : $EMULATED_PPC
928     echo Enable JIT compiler .............. : $WANT_JIT
929     echo Enable video on SEGV signals ..... : $WANT_VOSF
930     echo ESD sound support ................ : $WANT_ESD
931     echo GTK user interface ............... : $WANT_GTK
932     echo mon debugger support ............. : $WANT_MON
933     echo Bad memory access recovery type .. : $sigsegv_recovery
934     echo
935     echo "Configuration done. Now type \"make\"."