ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.58
Committed: 2006-01-24T23:46:19Z (18 years, 8 months ago) by gbeauche
Branch: MAIN
Changes since 1.57: +25 -0 lines
Log Message:
Use the most portable POSIX-style non-blocking I/O (O_NONBLOCK) instead of
BSD-style through FIONBIO. It turns out Tru64 and probably IRIX don't support
the latter when fd is a pipe (slirp case).

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 et al.
3    
4 cebix 1.16 AC_INIT([Basilisk II], 1.0, [Christian.Bauer@uni-mainz.de], BasiliskII)
5     AC_CONFIG_SRCDIR(main_unix.cpp)
6 gbeauche 1.1 AC_PREREQ(2.52)
7     AC_CONFIG_HEADER(config.h)
8    
9 gbeauche 1.19 dnl Aliases for PACKAGE and VERSION macros.
10 gbeauche 1.22 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE_NAME", [Define this program name.])
11     AC_DEFINE_UNQUOTED(VERSION, "$PACKAGE_VERSION", [Define this program version.])
12 gbeauche 1.19
13 gbeauche 1.21 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.5 dnl Video options.
18 gbeauche 1.1 AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes])
19     AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes])
20     AC_ARG_ENABLE(fbdev-dga, [ --enable-fbdev-dga use direct frame buffer access via /dev/fb [default=yes]], [WANT_FBDEV_DGA=$enableval], [WANT_FBDEV_DGA=yes])
21     AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes])
22    
23 gbeauche 1.26 dnl SDL options.
24 gbeauche 1.41 AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no])
25 gbeauche 1.26 AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphics [default=no]], [WANT_SDL_VIDEO=$enableval], [WANT_SDL_VIDEO=no])
26 gbeauche 1.31 AC_ARG_ENABLE(sdl-audio, [ --enable-sdl-audio use SDL for audio [default=no]], [WANT_SDL_AUDIO=$enableval], [WANT_SDL_AUDIO=no])
27 gbeauche 1.26
28 gbeauche 1.5 dnl JIT compiler options.
29     AC_ARG_ENABLE(jit-compiler, [ --enable-jit-compiler enable JIT compiler [default=no]], [WANT_JIT=$enableval], [WANT_JIT=no])
30     AC_ARG_ENABLE(jit-debug, [ --enable-jit-debug activate native code disassemblers [default=no]], [WANT_JIT_DEBUG=$enableval], [WANT_JIT_DEBUG=no])
31    
32 gbeauche 1.1 dnl FPU emulation core.
33     AC_ARG_ENABLE(fpe,
34     [ --enable-fpe=FPE specify which fpu emulator to use [default=auto]],
35     [ case "$enableval" in
36     dnl default is always ieee, if architecture has this fp format
37     auto) FPE_CORE_TEST_ORDER="ieee uae";;
38     ieee) FPE_CORE_TEST_ORDER="ieee";;
39     uae) FPE_CORE_TEST_ORDER="uae";;
40     x86) FPE_CORE_TEST_ORDER="x86";;
41     *) AC_MSG_ERROR([--enable-fpe takes only one of the following values: auto, x86, ieee, uae]);;
42     esac
43     ],
44     [ FPE_CORE_TEST_ORDER="ieee uae"
45     ])
46    
47     dnl Addressing modes.
48     AC_ARG_ENABLE(addressing,
49     [ --enable-addressing=AM specify the addressing mode to use [default=fastest]],
50     [ case "$enableval" in
51     real) ADDRESSING_TEST_ORDER="real";;
52     direct) ADDRESSING_TEST_ORDER="direct";;
53     banks) ADDRESSING_TEST_ORDER="banks";;
54     fastest)ADDRESSING_TEST_ORDER="direct banks";;
55     *) AC_MSG_ERROR([--enable-addressing takes only one of the following values: fastest, real, direct, banks]);;
56     esac
57     ],
58     [ ADDRESSING_TEST_ORDER="direct banks"
59     ])
60    
61     dnl External packages.
62     AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes])
63 gbeauche 1.49 AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]],
64     [case "$withval" in
65     gtk1) WANT_GTK="gtk";;
66     gtk|gtk2) WANT_GTK="$withval";;
67     yes) WANT_GTK="gtk2 gtk";;
68     *) WANT_GTK="no";;
69     esac],
70     [WANT_GTK="gtk2 gtk"])
71 gbeauche 1.1 AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
72    
73     dnl Canonical system information.
74     AC_CANONICAL_HOST
75     AC_CANONICAL_TARGET
76    
77     dnl Target OS type (target is host if not cross-compiling).
78     case "$target_os" in
79     linux*) OS_TYPE=linux;;
80     netbsd*) OS_TYPE=netbsd;;
81     freebsd*) OS_TYPE=freebsd;;
82     solaris*) OS_TYPE=solaris;;
83     darwin*) OS_TYPE=darwin;;
84     *) OS_TYPE=`echo $target_os | sed -e 's/-/_/g' | sed -e 's/\./_/g'`;;
85     esac
86     DEFINES="$DEFINES -DOS_$OS_TYPE"
87    
88     dnl Target CPU type.
89     HAVE_I386=no
90     HAVE_M68K=no
91     HAVE_SPARC=no
92     HAVE_POWERPC=no
93 gbeauche 1.13 HAVE_X86_64=no
94 gbeauche 1.1 case "$target_cpu" in
95 gbeauche 1.12 i386* | i486* | i586* | i686* | i786* ) HAVE_I386=yes;;
96     m68k* ) HAVE_M68K=yes;;
97     sparc* ) HAVE_SPARC=yes;;
98     powerpc* ) HAVE_POWERPC=yes;;
99 gbeauche 1.13 x86_64* ) HAVE_X86_64=yes;;
100 gbeauche 1.1 esac
101    
102     dnl Checks for programs.
103     AC_PROG_CC
104     AC_PROG_CC_C_O
105     AC_PROG_CPP
106     AC_PROG_CXX
107     AC_PROG_MAKE_SET
108     AC_PROG_INSTALL
109 gbeauche 1.36 AC_PROG_EGREP
110 gbeauche 1.1
111     dnl We use mon if possible.
112     MONSRCS=
113     if [[ "x$WANT_MON" = "xyes" ]]; then
114     AC_MSG_CHECKING(for mon)
115     mon_srcdir=../../../mon/src
116     if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
117     AC_MSG_RESULT(yes)
118     AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
119     MONSRCS="$mon_srcdir/mon.cpp $mon_srcdir/mon_6502.cpp $mon_srcdir/mon_z80.cpp $mon_srcdir/mon_cmd.cpp $mon_srcdir/mon_disass.cpp $mon_srcdir/mon_ppc.cpp $mon_srcdir/mon_lowmem.cpp $mon_srcdir/disass/floatformat.c $mon_srcdir/disass/i386-dis.c $mon_srcdir/disass/m68k-dis.c $mon_srcdir/disass/m68k-opc.c"
120     CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
121     AC_CHECK_LIB(ncurses, tgetent, ,
122     AC_CHECK_LIB(termcap, tgetent, ,
123     AC_CHECK_LIB(termlib, tgetent, ,
124     AC_CHECK_LIB(terminfo, tgetent, ,
125     AC_CHECK_LIB(Hcurses, tgetent, ,
126     AC_CHECK_LIB(curses, tgetent))))))
127     AC_CHECK_LIB(readline, readline)
128     else
129     AC_MSG_RESULT(no)
130     AC_MSG_WARN([Could not find mon, ignoring --with-mon.])
131     WANT_MON=no
132     fi
133     fi
134    
135     dnl Checks for libraries.
136     AC_CHECK_LIB(posix4, sem_init)
137     AC_CHECK_LIB(rt, timer_create)
138 gbeauche 1.34 AC_CHECK_LIB(rt, shm_open)
139 gbeauche 1.56 AC_CHECK_LIB(m, cos)
140 gbeauche 1.1
141 gbeauche 1.26 dnl Do we need SDL?
142     WANT_SDL=no
143     if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
144     WANT_SDL=yes
145     WANT_XF86_DGA=no
146     WANT_XF86_VIDMODE=no
147     WANT_FBDEV_DGA=no
148 gbeauche 1.31 SDL_SUPPORT="$SDL_SUPPORT video"
149     fi
150     if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
151     WANT_SDL=yes
152     SDL_SUPPORT="$SDL_SUPPORT audio"
153 gbeauche 1.26 fi
154     if [[ "x$WANT_SDL" = "xyes" ]]; then
155     AC_PATH_PROG(sdl_config, "sdl-config")
156     if [[ -n "$sdl_config" ]]; then
157 gbeauche 1.36 case $target_os in
158     # Special treatment for Cygwin so that we can still use the POSIX layer
159     *cygwin*)
160     sdl_cflags="-I`$sdl_config --prefix`/include/SDL"
161     sdl_libs="-L`$sdl_config --exec-prefix`/lib -lSDL"
162     ;;
163     *)
164     sdl_cflags=`$sdl_config --cflags`
165 gbeauche 1.41 if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then
166     sdl_libs=`$sdl_config --static-libs`
167     else
168     sdl_libs=`$sdl_config --libs`
169     fi
170 gbeauche 1.36 ;;
171     esac
172 gbeauche 1.26 CFLAGS="$CFLAGS $sdl_cflags"
173     CXXFLAGS="$CXXFLAGS $sdl_cflags"
174     LIBS="$LIBS $sdl_libs"
175     else
176     WANT_SDL=no
177     fi
178 gbeauche 1.31 SDL_SUPPORT=`echo "$SDL_SUPPORT" | sed -e "s/^ //"`
179     else
180     SDL_SUPPORT="none"
181 gbeauche 1.26 fi
182    
183     dnl We need X11, if not using SDL.
184     if [[ "x$WANT_SDL" = "xno" ]]; then
185     AC_PATH_XTRA
186     if [[ "x$no_x" = "xyes" ]]; then
187     AC_MSG_ERROR([You need X11 to run Basilisk II.])
188     fi
189     CFLAGS="$CFLAGS $X_CFLAGS"
190     CXXFLAGS="$CXXFLAGS $X_CFLAGS"
191     LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
192     fi
193 gbeauche 1.1
194     dnl We want pthreads. Try libpthread first, then libc_r (FreeBSD), then PTL.
195     HAVE_PTHREADS=yes
196     AC_CHECK_LIB(pthread, pthread_create, , [
197     AC_CHECK_LIB(c_r, pthread_create, , [
198     AC_CHECK_LIB(PTL, pthread_create, , [
199     HAVE_PTHREADS=no
200     ])
201     ])
202     ])
203     if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
204     AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
205     fi
206 gbeauche 1.50 AC_CHECK_FUNCS(pthread_cond_init)
207 gbeauche 1.46 AC_CHECK_FUNCS(pthread_cancel pthread_testcancel)
208 gbeauche 1.1 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
209     AC_CHECK_FUNCS(pthread_mutexattr_settype)
210 gbeauche 1.3 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
211 gbeauche 1.1
212     dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
213     SEMSRC=
214     AC_CHECK_FUNCS(sem_init, , [
215     if test "x$HAVE_PTHREADS" = "xyes"; then
216     SEMSRC=posix_sem.cpp
217     fi
218     ])
219    
220     dnl We use DGA (XFree86 or fbdev) if possible.
221     if [[ "x$WANT_XF86_DGA" = "xyes" ]]; then
222     AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, [
223     AC_DEFINE(ENABLE_XF86_DGA, 1, [Define if using XFree86 DGA extension.])
224     LIBS="$LIBS -lXxf86dga"
225     if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
226     AC_MSG_WARN([Cannot have both --enable-xf86-dga and --enable-fbdev-dga, ignoring --enable-fbdev-dga.])
227     WANT_FBDEV_DGA=no
228     fi
229     ], [
230     AC_MSG_WARN([Could not find XFree86 DGA extension, ignoring --enable-xf86-dga.])
231     WANT_XF86_DGA=no
232     ])
233     fi
234     if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
235     AC_DEFINE(ENABLE_FBDEV_DGA, 1, [Define if using DGA with framebuffer device.])
236     fi
237    
238     dnl We use XFree86 VidMode if possible.
239     if [[ "x$WANT_XF86_VIDMODE" = "xyes" ]]; then
240     AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, [
241     AC_DEFINE(ENABLE_XF86_VIDMODE, 1, [Define if using XFree86 DGA extension.])
242     LIBS="$LIBS -lXxf86vm"
243     ], [
244     AC_MSG_WARN([Could not find XFree86 VidMode extension, ignoring --enable-xf86-vidmode.])
245     WANT_XF86_VIDMODE=no
246     ])
247     fi
248    
249     dnl We use GTK+ if possible.
250     UISRCS=../dummy/prefs_editor_dummy.cpp
251 gbeauche 1.49 case "x$WANT_GTK" in
252     xgtk2*)
253     AM_PATH_GTK_2_0(1.3.15, [
254     AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
255     CFLAGS="$CFLAGS $GTK_CFLAGS"
256     CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
257     LIBS="$LIBS $GTK_LIBS"
258     UISRCS=prefs_editor_gtk.cpp
259     WANT_GTK=gtk2
260     ], [
261     case "x${WANT_GTK}x" in
262     *gtkx)
263     AC_MSG_WARN([Could not find GTK+ 2.0, trying with GTK+ 1.2.])
264     WANT_GTK=gtk
265     ;;
266     *)
267     AC_MSG_WARN([Could not find GTK+, disabling user interface.])
268     WANT_GTK=no
269     ;;
270     esac
271     ])
272     ;;
273     esac
274     if [[ "x$WANT_GTK" = "xgtk" ]]; then
275 gbeauche 1.1 AM_PATH_GTK(1.2.0, [
276     AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
277     CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
278     LIBS="$LIBS $GTK_LIBS"
279     UISRCS=prefs_editor_gtk.cpp
280 gbeauche 1.18 dnl somehow, <gnome-i18n.h> would redefine gettext() to nothing if
281     dnl ENABLE_NLS is not set, thusly conflicting with C++ <string> which
282     dnl includes <libintl.h>
283     AM_GNU_GETTEXT
284 gbeauche 1.1 B2_PATH_GNOMEUI([
285     AC_DEFINE(HAVE_GNOMEUI, 1, [Define if libgnomeui is available.])
286     CXXFLAGS="$CXXFLAGS $GNOMEUI_CFLAGS"
287     LIBS="$LIBS $GNOMEUI_LIBS"
288     ], [])
289     ], [
290     AC_MSG_WARN([Could not find GTK+, disabling user interface.])
291     WANT_GTK=no
292     ])
293     fi
294    
295     dnl We use ESD if possible.
296     if [[ "x$WANT_ESD" = "xyes" ]]; then
297     AM_PATH_ESD(0.2.8, [
298     AC_DEFINE(ENABLE_ESD, 1, [Define is using ESD.])
299     CFLAGS="$CFLAGS $ESD_CFLAGS"
300     CXXFLAGS="$CXXFLAGS $ESD_CFLAGS"
301     LIBS="$LIBS $ESD_LIBS"
302     ], [
303     AC_MSG_WARN([Could not find ESD, disabling ESD support.])
304     WANT_ESD=no
305     ])
306     fi
307    
308     dnl We use 64-bit file size support if possible.
309     AC_SYS_LARGEFILE
310    
311     dnl Checks for header files.
312     AC_HEADER_STDC
313 gbeauche 1.52 AC_CHECK_HEADERS(stdlib.h stdint.h)
314     AC_CHECK_HEADERS(unistd.h fcntl.h sys/types.h sys/time.h sys/mman.h mach/mach.h)
315 gbeauche 1.20 AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
316 gbeauche 1.42 AC_CHECK_HEADERS(sys/socket.h sys/ioctl.h sys/filio.h sys/bitypes.h sys/wait.h)
317     AC_CHECK_HEADERS(sys/poll.h sys/select.h)
318 gbeauche 1.39 AC_CHECK_HEADERS(arpa/inet.h)
319 gbeauche 1.35 AC_CHECK_HEADERS(linux/if.h linux/if_tun.h net/if.h net/if_tun.h, [], [], [
320 gbeauche 1.42 #ifdef HAVE_SYS_TYPES_H
321     #include <sys/types.h>
322     #endif
323 gbeauche 1.35 #ifdef HAVE_SYS_SOCKET_H
324     #include <sys/socket.h>
325     #endif
326     ])
327 gbeauche 1.30 AC_CHECK_HEADERS(AvailabilityMacros.h)
328 gbeauche 1.48 AC_CHECK_HEADERS(IOKit/storage/IOBlockStorageDevice.h)
329 gbeauche 1.1
330     dnl Checks for typedefs, structures, and compiler characteristics.
331     AC_C_BIGENDIAN
332     AC_C_CONST
333     AC_C_INLINE
334     AC_CHECK_SIZEOF(short, 2)
335     AC_CHECK_SIZEOF(int, 4)
336     AC_CHECK_SIZEOF(long, 4)
337     AC_CHECK_SIZEOF(long long, 8)
338     AC_CHECK_SIZEOF(float, 4)
339     AC_CHECK_SIZEOF(double, 8)
340     AC_CHECK_SIZEOF(long double, 12)
341     AC_CHECK_SIZEOF(void *, 4)
342     AC_TYPE_OFF_T
343 gbeauche 1.24 AC_CHECK_TYPES(loff_t)
344     AC_CHECK_TYPES(caddr_t)
345 gbeauche 1.1 AC_TYPE_SIZE_T
346     AC_TYPE_SIGNAL
347     AC_HEADER_TIME
348     AC_STRUCT_TM
349    
350     dnl Check whether sys/socket.h defines type socklen_t.
351     dnl (extracted from ac-archive/Miscellaneous)
352     AC_CACHE_CHECK([for socklen_t],
353     ac_cv_type_socklen_t, [
354     AC_TRY_COMPILE([
355     #include <sys/types.h>
356     #include <sys/socket.h>
357     ], [socklen_t len = 42; return 0;],
358     ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no,
359     dnl When cross-compiling, do not assume anything.
360     ac_cv_type_socklen_t="guessing no"
361     )
362     ])
363     if [[ "x$ac_cv_type_socklen_t" != "xyes" ]]; then
364     AC_DEFINE(socklen_t, int, [Define to 'int' if <sys/types.h> doesn't define.])
365     fi
366    
367     dnl Checks for library functions.
368 gbeauche 1.39 AC_CHECK_FUNCS(strdup strerror cfmakeraw)
369 gbeauche 1.1 AC_CHECK_FUNCS(clock_gettime timer_create)
370     AC_CHECK_FUNCS(sigaction signal)
371     AC_CHECK_FUNCS(mmap mprotect munmap)
372     AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
373 gbeauche 1.42 AC_CHECK_FUNCS(poll inet_aton)
374 gbeauche 1.1
375     dnl Darwin seems to define mach_task_self() instead of task_self().
376     AC_CHECK_FUNCS(mach_task_self task_self)
377    
378     dnl Check for headers and functions related to pty support (sshpty.c)
379     dnl From openssh-3.2.2p1 configure.ac
380    
381     AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
382     AC_CHECK_FUNCS(_getpty vhangup strlcpy)
383    
384     case "$host" in
385     *-*-hpux10.26)
386     disable_ptmx_check=yes
387     ;;
388     *-*-linux*)
389     no_dev_ptmx=1
390     ;;
391     mips-sony-bsd|mips-sony-newsos4)
392     AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).])
393     ;;
394     *-*-sco3.2v4*)
395     no_dev_ptmx=1
396     ;;
397     *-*-sco3.2v5*)
398     no_dev_ptmx=1
399     ;;
400 gbeauche 1.36 *-*-cygwin*)
401     no_dev_ptmx=1
402     ;;
403 gbeauche 1.1 esac
404    
405     if test -z "$no_dev_ptmx" ; then
406     if test "x$disable_ptmx_check" != "xyes" ; then
407     AC_CHECK_FILE([/dev/ptmx],
408     [
409     AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
410     have_dev_ptmx=1
411     ]
412     )
413     fi
414     fi
415     AC_CHECK_FILE([/dev/ptc],
416     [
417     AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
418     have_dev_ptc=1
419     ]
420     )
421    
422     dnl (end of code from openssh-3.2.2p1 configure.ac)
423    
424    
425 gbeauche 1.58 dnl Check for systems where POSIX-style non-blocking I/O (O_NONBLOCK)
426     dnl doesn't work or is unimplemented. On these systems (mostly older
427     dnl ones), use the old BSD-style FIONBIO approach instead. [tcl.m4]
428     AC_CACHE_CHECK([FIONBIO vs. O_NONBLOCK for non-blocking I/O],
429     ac_cv_nonblocking_io, [
430     case "$host" in
431     *-*-osf*)
432     ac_cv_nonblocking_io=FIONBIO
433     ;;
434     *-*-sunos4*)
435     ac_cv_nonblocking_io=FIONBIO
436     ;;
437     *-*-ultrix*)
438     ac_cv_nonblocking_io=FIONBIO
439     ;;
440     *)
441     ac_cv_nonblocking_io=O_NONBLOCK
442     ;;
443     esac
444     ])
445     if [[ "$ac_cv_nonblocking_io" = "FIONBIO" ]]; then
446     AC_DEFINE(USE_FIONBIO, 1, [Define if BSD-style non-blocking I/O is to be used])
447     fi
448    
449    
450 gbeauche 1.30 dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
451 cebix 1.51 AC_DEFUN([AC_CHECK_FRAMEWORK], [
452 gbeauche 1.30 AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
453     AC_CACHE_CHECK([whether compiler supports framework $1],
454     ac_Framework, [
455     saved_LIBS="$LIBS"
456     LIBS="$LIBS -framework $1"
457     AC_TRY_LINK(
458 gbeauche 1.57 [$2], [],
459 gbeauche 1.30 [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
460     )
461     ])
462     AS_IF([test AS_VAR_GET(ac_Framework) = yes],
463     [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
464     )
465     AS_VAR_POPDEF([ac_Framework])dnl
466     ])
467    
468     dnl Check for some MacOS X frameworks
469     AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
470     AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
471 gbeauche 1.48 AC_CHECK_FRAMEWORK(CoreFoundation, [#include <CoreFoundation/CoreFoundation.h>])
472 gbeauche 1.30
473 gbeauche 1.1 dnl Select system-dependant source files.
474     SERIALSRC=serial_unix.cpp
475     ETHERSRC=../dummy/ether_dummy.cpp
476     SCSISRC=../dummy/scsi_dummy.cpp
477     AUDIOSRC=../dummy/audio_dummy.cpp
478 gbeauche 1.41 EXTFSSRC=extfs_unix.cpp
479 gbeauche 1.1 EXTRASYSSRCS=
480     CAN_NATIVE_M68K=no
481     case "$target_os" in
482     linux*)
483     ETHERSRC=ether_unix.cpp
484     AUDIOSRC=audio_oss_esd.cpp
485     SCSISRC=Linux/scsi_linux.cpp
486     ;;
487     freebsd*)
488     ETHERSRC=ether_unix.cpp
489     AUDIOSRC=audio_oss_esd.cpp
490     DEFINES="$DEFINES -DBSD_COMP"
491     CXXFLAGS="$CXXFLAGS -fpermissive"
492     dnl Check for the CAM library
493     AC_CHECK_LIB(cam, cam_open_btl, HAVE_LIBCAM=yes, HAVE_LIBCAM=no)
494     if [[ "x$HAVE_LIBCAM" = "xno" ]]; then
495     AC_MSG_WARN([Cannot find libcam for SCSI management, disabling SCSI support.])
496     else
497     dnl Check for the sys kernel includes
498     AC_CHECK_HEADER(camlib.h)
499     if [[ "x$ac_cv_header_camlib_h" = "xno" ]]; then
500     dnl In this case I should fix this thing including a "patch"
501     dnl to access directly to the functions in the kernel :) --Orlando
502     AC_MSG_WARN([Cannot find includes for CAM library, disabling SCSI support.])
503     else
504     SCSISRC=FreeBSD/scsi_freebsd.cpp
505     LIBS="$LIBS -lcam"
506     DEFINES="$DEFINES -DCAM"
507     fi
508     fi
509     ;;
510     netbsd*)
511     CAN_NATIVE_M68K=yes
512 gbeauche 1.44 ETHERSRC=ether_unix.cpp
513 gbeauche 1.1 ;;
514     solaris*)
515     AUDIOSRC=Solaris/audio_solaris.cpp
516     DEFINES="$DEFINES -DBSD_COMP -D_POSIX_PTHREAD_SEMANTICS"
517     ;;
518     irix*)
519     ETHERSRC=ether_unix.cpp
520     AUDIOSRC=Irix/audio_irix.cpp
521     EXTRASYSSRCS=Irix/unaligned.c
522     LIBS="$LIBS -laudio"
523     WANT_ESD=no
524    
525 gbeauche 1.14 dnl Check if our compiler supports -IPA (MIPSPro)
526     HAVE_IPA=no
527 gbeauche 1.1 ocflags="$CFLAGS"
528 gbeauche 1.14 CFLAGS=`echo "$CFLAGS -IPA" | sed -e "s/-g//g"`
529     AC_MSG_CHECKING(if "-IPA" works)
530 gbeauche 1.1 dnl Do a test compile of an empty function
531 gbeauche 1.56 AC_TRY_COMPILE([#if defined __GNUC__
532     # error GCC does not support IPA yet
533     #endif],, [AC_MSG_RESULT(yes); HAVE_IPA=yes], AC_MSG_RESULT(no))
534 gbeauche 1.1 CFLAGS="$ocflags"
535 gbeauche 1.30 ;;
536     darwin*)
537 gbeauche 1.45 ETHERSRC=ether_unix.cpp
538 gbeauche 1.48 if [[ "x$ac_cv_framework_IOKit" = "xyes" -a "x$ac_cv_framework_CoreFoundation" = "xyes" ]]; then
539 gbeauche 1.30 EXTRASYSSRCS="../MacOSX/sys_darwin.cpp"
540     fi
541 gbeauche 1.41 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
542     EXTFSSRC=../MacOSX/extfs_macosx.mm
543     fi
544 gbeauche 1.1 ;;
545 gbeauche 1.36 cygwin*)
546     SERIALSRC="../dummy/serial_dummy.cpp"
547 gbeauche 1.37 EXTRASYSSRCS="../Windows/BasiliskII.rc"
548 gbeauche 1.36 ;;
549 gbeauche 1.1 esac
550 gbeauche 1.43
551     dnl Is the slirp library supported?
552     if [[ "x$ETHERSRC" = "xether_unix.cpp" ]]; then
553     AC_DEFINE(HAVE_SLIRP, 1, [Define if slirp library is supported])
554     SLIRP_SRCS="\
555     ../slirp/bootp.c ../slirp/ip_output.c ../slirp/tcp_input.c \
556     ../slirp/cksum.c ../slirp/mbuf.c ../slirp/tcp_output.c \
557     ../slirp/debug.c ../slirp/misc.c ../slirp/tcp_subr.c \
558     ../slirp/if.c ../slirp/sbuf.c ../slirp/tcp_timer.c \
559     ../slirp/ip_icmp.c ../slirp/slirp.c ../slirp/tftp.c \
560     ../slirp/ip_input.c ../slirp/socket.c ../slirp/udp.c"
561     fi
562     AC_SUBST(SLIRP_SRCS)
563    
564 gbeauche 1.26 dnl SDL overrides
565     if [[ "x$WANT_SDL" = "xyes" ]]; then
566     AC_DEFINE(USE_SDL, 1, [Define to enble SDL support])
567     fi
568     if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
569 gbeauche 1.31 AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support])
570 gbeauche 1.30 VIDEOSRCS="../SDL/video_sdl.cpp"
571 gbeauche 1.29 KEYCODES="../SDL/keycodes"
572 gbeauche 1.30 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
573     EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp"
574     else
575 gbeauche 1.38 case "$target_os" in
576     cygwin*)
577     EXTRASYSSRCS="$EXTRASYSSRCS ../Windows/clip_windows.cpp"
578     ;;
579     *)
580     EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp"
581     ;;
582     esac
583 gbeauche 1.30 fi
584 gbeauche 1.26 else
585 gbeauche 1.30 VIDEOSRCS="video_x.cpp"
586 gbeauche 1.29 KEYCODES="keycodes"
587 gbeauche 1.30 EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp"
588 gbeauche 1.26 fi
589 gbeauche 1.31 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
590     AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
591     AUDIOSRC="../SDL/audio_sdl.cpp"
592     fi
593 gbeauche 1.1
594     dnl Use 68k CPU natively?
595     WANT_NATIVE_M68K=no
596     if [[ "x$HAVE_M68K" = "xyes" -a "x$CAN_NATIVE_M68K" = "xyes" ]]; then
597     AC_DEFINE(ENABLE_NATIVE_M68K, 1, [Define if using native 68k mode.])
598     WANT_NATIVE_M68K=yes
599     fi
600    
601     if [[ "x$HAVE_PTHREADS" = "xno" ]]; then
602     dnl Serial, ethernet and audio support needs pthreads
603     AC_MSG_WARN([You don't have pthreads, disabling serial, ethernet and audio support.])
604     SERIALSRC=../dummy/serial_dummy.cpp
605     ETHERSRC=../dummy/ether_dummy.cpp
606     AUDIOSRC=../dummy/audio_dummy.cpp
607     fi
608 gbeauche 1.41 SYSSRCS="$VIDEOSRCS $EXTFSSRC $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $MONSRCS $EXTRASYSSRCS"
609 gbeauche 1.1
610     dnl Define a macro that translates a yesno-variable into a C macro definition
611     dnl to be put into the config.h file
612     dnl $1 -- the macro to define
613     dnl $2 -- the value to translate
614     dnl $3 -- template name
615 cebix 1.51 AC_DEFUN([AC_TRANSLATE_DEFINE], [
616 gbeauche 1.1 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
617     AC_DEFINE($1, 1, $3)
618     fi
619     ])
620    
621 gbeauche 1.25 dnl Check that the host supports TUN/TAP devices
622     AC_CACHE_CHECK([whether TUN/TAP is supported],
623     ac_cv_tun_tap_support, [
624     AC_TRY_COMPILE([
625     #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
626     #include <linux/if.h>
627     #include <linux/if_tun.h>
628     #endif
629     #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
630     #include <net/if.h>
631     #include <net/if_tun.h>
632     #endif
633     ], [
634     struct ifreq ifr;
635     memset(&ifr, 0, sizeof(ifr));
636     ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
637     ],
638     ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
639     )
640     ])
641     AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
642     [Define if your system supports TUN/TAP devices.])
643    
644 gbeauche 1.1 dnl Various checks if the system supports vm_allocate() and the like functions.
645     have_mach_vm=no
646     if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
647     "x$ac_cv_func_vm_protect" = "xyes" ]]; then
648     have_mach_vm=yes
649     fi
650     AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
651     [Define if your system has a working vm_allocate()-based memory allocator.])
652    
653     dnl Check that vm_allocate(), vm_protect() work
654     if [[ "x$have_mach_vm" = "xyes" ]]; then
655    
656     AC_CACHE_CHECK([whether vm_protect works],
657     ac_cv_vm_protect_works, [
658     AC_LANG_SAVE
659     AC_LANG_CPLUSPLUS
660     ac_cv_vm_protect_works=yes
661     dnl First the tests that should segfault
662     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
663     AC_TRY_RUN([
664     #define CONFIGURE_TEST_VM_MAP
665     #define TEST_VM_PROT_$test_def
666     #include "vm_alloc.cpp"
667     ], ac_cv_vm_protect_works=no, rm -f core,
668     dnl When cross-compiling, do not assume anything
669     ac_cv_vm_protect_works="guessing no"
670     )
671     done
672     AC_TRY_RUN([
673     #define CONFIGURE_TEST_VM_MAP
674     #define TEST_VM_PROT_RDWR_WRITE
675     #include "vm_alloc.cpp"
676     ], , ac_cv_vm_protect_works=no,
677     dnl When cross-compiling, do not assume anything
678     ac_cv_vm_protect_works="guessing no"
679     )
680     AC_LANG_RESTORE
681     ]
682     )
683    
684     dnl Remove support for vm_allocate() if vm_protect() does not work
685     if [[ "x$have_mach_vm" = "xyes" ]]; then
686     case $ac_cv_vm_protect_works in
687     *yes) have_mach_vm=yes;;
688     *no) have_mach_vm=no;;
689     esac
690     fi
691     AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
692     [Define if your system has a working vm_allocate()-based memory allocator.])
693    
694     fi dnl HAVE_MACH_VM
695    
696     dnl Various checks if the system supports mmap() and the like functions.
697     dnl ... and Mach memory allocators are not supported
698     have_mmap_vm=no
699     if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
700     "x$ac_cv_func_mprotect" = "xyes" ]]; then
701     if [[ "x$have_mach_vm" = "xno" ]]; then
702     have_mmap_vm=yes
703     fi
704     fi
705     AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
706     [Define if your system has a working mmap()-based memory allocator.])
707    
708     dnl Check that mmap() and associated functions work.
709     if [[ "x$have_mmap_vm" = "xyes" ]]; then
710    
711     dnl Check if we have a working anonymous mmap()
712     AC_CACHE_CHECK([whether mmap supports MAP_ANON],
713     ac_cv_mmap_anon, [
714     AC_LANG_SAVE
715     AC_LANG_CPLUSPLUS
716     AC_TRY_RUN([
717     #define HAVE_MMAP_ANON
718     #define CONFIGURE_TEST_VM_MAP
719     #define TEST_VM_MMAP_ANON
720     #include "vm_alloc.cpp"
721     ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
722     dnl When cross-compiling, do not assume anything.
723     ac_cv_mmap_anon="guessing no"
724     )
725     AC_LANG_RESTORE
726     ]
727     )
728     AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
729     [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
730    
731     AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
732     ac_cv_mmap_anonymous, [
733     AC_LANG_SAVE
734     AC_LANG_CPLUSPLUS
735     AC_TRY_RUN([
736     #define HAVE_MMAP_ANONYMOUS
737     #define CONFIGURE_TEST_VM_MAP
738     #define TEST_VM_MMAP_ANON
739     #include "vm_alloc.cpp"
740     ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
741     dnl When cross-compiling, do not assume anything.
742     ac_cv_mmap_anonymous="guessing no"
743     )
744     AC_LANG_RESTORE
745     ]
746     )
747     AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
748     [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
749    
750     AC_CACHE_CHECK([whether mprotect works],
751     ac_cv_mprotect_works, [
752     AC_LANG_SAVE
753     AC_LANG_CPLUSPLUS
754     ac_cv_mprotect_works=yes
755     dnl First the tests that should segfault
756     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
757     AC_TRY_RUN([
758     #define CONFIGURE_TEST_VM_MAP
759     #define TEST_VM_PROT_$test_def
760     #include "vm_alloc.cpp"
761     ], ac_cv_mprotect_works=no, rm -f core,
762     dnl When cross-compiling, do not assume anything
763     ac_cv_mprotect_works="guessing no"
764     )
765     done
766     AC_TRY_RUN([
767     #define CONFIGURE_TEST_VM_MAP
768     #define TEST_VM_PROT_RDWR_WRITE
769     #include "vm_alloc.cpp"
770     ], , ac_cv_mprotect_works=no,
771     dnl When cross-compiling, do not assume anything
772     ac_cv_mprotect_works="guessing no"
773     )
774     AC_LANG_RESTORE
775     ]
776     )
777    
778     dnl Remove support for mmap() if mprotect() does not work
779     if [[ "x$have_mmap_vm" = "xyes" ]]; then
780     case $ac_cv_mprotect_works in
781     *yes) have_mmap_vm=yes;;
782     *no) have_mmap_vm=no;;
783     esac
784     fi
785     AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
786     [Define if your system has a working mmap()-based memory allocator.])
787    
788     fi dnl HAVE_MMAP_VM
789    
790 gbeauche 1.23 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
791     AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x2000],
792     ac_cv_pagezero_hack, [
793     ac_cv_pagezero_hack=no
794     if AC_TRY_COMMAND([Darwin/testlmem.sh 0x2000]); then
795     ac_cv_pagezero_hack=yes
796     dnl might as well skip the test for mmap-able low memory
797     ac_cv_can_map_lm=no
798     fi
799     ])
800     AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
801     [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
802    
803 gbeauche 1.1 dnl Check if we can mmap 0x2000 bytes from 0x0000
804     AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x2000],
805     ac_cv_can_map_lm, [
806     AC_LANG_SAVE
807     AC_LANG_CPLUSPLUS
808     AC_TRY_RUN([
809     #include "vm_alloc.cpp"
810     int main(void) { /* returns 0 if we could map the lowmem globals */
811 gbeauche 1.15 volatile char * lm = 0;
812 gbeauche 1.1 if (vm_init() < 0) exit(1);
813 gbeauche 1.15 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
814 gbeauche 1.1 lm[0] = 'z';
815     if (vm_release((char *)lm, 0x2000) < 0) exit(1);
816     vm_exit(); exit(0);
817     }
818     ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
819     dnl When cross-compiling, do not assume anything.
820     ac_cv_can_map_lm="guessing no"
821     )
822     AC_LANG_RESTORE
823     ]
824     )
825    
826 gbeauche 1.34 dnl Check if we have POSIX shared memory support
827     AC_CACHE_CHECK([whether POSIX shared memory is working],
828     ac_cv_have_posix_shm, [
829     AC_LANG_SAVE
830     AC_LANG_CPLUSPLUS
831     AC_TRY_RUN([
832     #define HAVE_POSIX_SHM
833     #include "vm_alloc.cpp"
834     int main(void) { /* returns 0 if we have working POSIX shm */
835     if (vm_init() < 0) exit(2);
836     char *m1 = (char *)vm_acquire(32768, VM_MAP_DEFAULT | VM_MAP_33BIT);
837     if (m1 == VM_MAP_FAILED) exit(3);
838     vm_exit(); exit(0);
839     }
840     ], ac_cv_have_posix_shm=yes, ac_cv_have_posix_shm=no,
841     dnl When cross-compiling, do not assume anything.
842     ac_cv_have_posix_shm="guessing no"
843     )
844     AC_LANG_RESTORE
845     ]
846     )
847     AC_TRANSLATE_DEFINE(HAVE_POSIX_SHM, "$ac_cv_have_posix_shm",
848     [Define if your system supports POSIX shared memory.])
849    
850     dnl Check if we have working 33-bit memory addressing
851     AC_CACHE_CHECK([whether 33-bit memory addressing is working],
852     ac_cv_have_33bit_addressing, [
853     AC_LANG_SAVE
854     AC_LANG_CPLUSPLUS
855     AC_TRY_RUN([
856     #define USE_33BIT_ADDRESSING 1
857     #include "vm_alloc.cpp"
858     int main(void) { /* returns 0 if we have working 33-bit addressing */
859     if (sizeof(void *) < 8) exit(1);
860     if (vm_init() < 0) exit(2);
861     char *m1 = (char *)vm_acquire(32768, VM_MAP_DEFAULT | VM_MAP_33BIT);
862     if (m1 == VM_MAP_FAILED) exit(3);
863     char *m2 = m1 + (1L << 32);
864     m1[0] = 0x12; if (m2[0] != 0x12) exit(4);
865     m2[0] = 0x34; if (m1[0] != 0x34) exit(5);
866     vm_exit(); exit(0);
867     }
868     ], ac_cv_have_33bit_addressing=yes, ac_cv_have_33bit_addressing=no,
869     dnl When cross-compiling, do not assume anything.
870     ac_cv_have_33bit_addressing="guessing no"
871     )
872     AC_LANG_RESTORE
873     ]
874     )
875    
876 gbeauche 1.1 dnl Check signal handlers need to be reinstalled
877     AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
878     ac_cv_signal_need_reinstall, [
879     AC_LANG_SAVE
880     AC_LANG_CPLUSPLUS
881     AC_TRY_RUN([
882     #include <stdlib.h>
883     #ifdef HAVE_UNISTD_H
884     #include <unistd.h>
885     #endif
886     #include <signal.h>
887     static int handled_signal = 0;
888     RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
889     int main(void) { /* returns 0 if signals need not to be reinstalled */
890     signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
891     exit(handled_signal == 2);
892     }
893     ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
894     dnl When cross-compiling, do not assume anything.
895     ac_cv_signal_need_reinstall="guessing yes"
896     )
897     AC_LANG_RESTORE
898     ]
899     )
900     AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
901     [Define if your system requires signals to be reinstalled.])
902    
903     dnl Check if sigaction handlers need to be reinstalled
904     AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
905     ac_cv_sigaction_need_reinstall, [
906     AC_LANG_SAVE
907     AC_LANG_CPLUSPLUS
908     AC_TRY_RUN([
909     #include <stdlib.h>
910     #ifdef HAVE_UNISTD_H
911     #include <unistd.h>
912     #endif
913     #include <signal.h>
914     static int handled_signal = 0;
915     RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
916     typedef RETSIGTYPE (*signal_handler)(int);
917     static signal_handler mysignal(int sig, signal_handler handler) {
918     struct sigaction old_sa;
919     struct sigaction new_sa;
920     new_sa.sa_handler = handler;
921     return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
922     }
923     int main(void) { /* returns 0 if signals need not to be reinstalled */
924     mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
925     exit(handled_signal == 2);
926     }
927     ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
928     dnl When cross-compiling, do not assume anything.
929     ac_cv_sigaction_need_reinstall="guessing yes"
930     )
931     AC_LANG_RESTORE
932     ]
933     )
934     AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
935     [Define if your system requires sigactions to be reinstalled.])
936    
937 gbeauche 1.21 dnl Check if Mach exceptions supported.
938     AC_CACHE_CHECK([whether your system supports Mach exceptions],
939     ac_cv_have_mach_exceptions, [
940 gbeauche 1.1 AC_LANG_SAVE
941     AC_LANG_CPLUSPLUS
942     AC_TRY_RUN([
943 gbeauche 1.21 #define HAVE_MACH_EXCEPTIONS 1
944 gbeauche 1.1 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
945     #include "vm_alloc.cpp"
946     #include "sigsegv.cpp"
947 gbeauche 1.21 ], [
948     sigsegv_recovery=mach
949     ac_cv_have_mach_exceptions=yes
950     ],
951     ac_cv_have_mach_exceptions=no,
952 gbeauche 1.1 dnl When cross-compiling, do not assume anything.
953 gbeauche 1.21 ac_cv_have_mach_exceptions=no
954 gbeauche 1.1 )
955     AC_LANG_RESTORE
956     ]
957     )
958 gbeauche 1.21 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
959     [Define if your system supports Mach exceptions.])
960    
961 gbeauche 1.36 dnl Check if Windows exceptions are supported.
962     AC_CACHE_CHECK([whether your system supports Windows exceptions],
963     ac_cv_have_win32_exceptions, [
964     AC_LANG_SAVE
965     AC_LANG_CPLUSPLUS
966     AC_TRY_RUN([
967     #define HAVE_WIN32_EXCEPTIONS 1
968     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
969     #include "vm_alloc.cpp"
970     #include "sigsegv.cpp"
971     ], [
972     sigsegv_recovery=win32
973     ac_cv_have_win32_exceptions=yes
974     ],
975     ac_cv_have_win32_exceptions=no,
976     dnl When cross-compiling, do not assume anything.
977     ac_cv_have_win32_exceptions=no
978     )
979     AC_LANG_RESTORE
980     ]
981     )
982     AC_TRANSLATE_DEFINE(HAVE_WIN32_EXCEPTIONS, "$ac_cv_have_win32_exceptions",
983     [Define if your system supports Windows exceptions.])
984    
985 gbeauche 1.21 dnl Otherwise, check if extended signals are supported.
986     if [[ -z "$sigsegv_recovery" ]]; then
987     AC_CACHE_CHECK([whether your system supports extended signal handlers],
988     ac_cv_have_extended_signals, [
989     AC_LANG_SAVE
990     AC_LANG_CPLUSPLUS
991     AC_TRY_RUN([
992     #define HAVE_SIGINFO_T 1
993     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
994     #include "vm_alloc.cpp"
995     #include "sigsegv.cpp"
996     ], [
997     sigsegv_recovery=siginfo
998     ac_cv_have_extended_signals=yes
999     ],
1000     ac_cv_have_extended_signals=no,
1001     dnl When cross-compiling, do not assume anything.
1002     ac_cv_have_extended_signals=no
1003     )
1004     AC_LANG_RESTORE
1005     ]
1006     )
1007     AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
1008     [Define if your system support extended signals.])
1009     fi
1010 gbeauche 1.1
1011     dnl Otherwise, check for subterfuges.
1012 gbeauche 1.21 if [[ -z "$sigsegv_recovery" ]]; then
1013 gbeauche 1.1 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
1014     ac_cv_have_sigcontext_hack, [
1015     AC_LANG_SAVE
1016     AC_LANG_CPLUSPLUS
1017     AC_TRY_RUN([
1018     #define HAVE_SIGCONTEXT_SUBTERFUGE 1
1019     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1020     #include "vm_alloc.cpp"
1021     #include "sigsegv.cpp"
1022 gbeauche 1.21 ], [
1023     sigsegv_recovery=sigcontext
1024     ac_cv_have_sigcontext_hack=yes
1025     ],
1026     ac_cv_have_sigcontext_hack=no,
1027 gbeauche 1.1 dnl When cross-compiling, do not assume anything.
1028     ac_cv_have_sigcontext_hack=no
1029     )
1030     AC_LANG_RESTORE
1031     ])
1032     AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
1033     [Define if we know a hack to replace siginfo_t->si_addr member.])
1034     fi
1035    
1036     dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
1037     AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
1038     ac_cv_have_skip_instruction, [
1039     AC_LANG_SAVE
1040     AC_LANG_CPLUSPLUS
1041     AC_TRY_RUN([
1042     #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
1043     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1044     #include "vm_alloc.cpp"
1045     #include "sigsegv.cpp"
1046     ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
1047     dnl When cross-compiling, do not assume anything.
1048     ac_cv_have_skip_instruction=no
1049     )
1050     AC_LANG_RESTORE
1051     ]
1052     )
1053     AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
1054     [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
1055    
1056     dnl Can we do Video on SEGV Signals ?
1057     CAN_VOSF=no
1058 gbeauche 1.21 if [[ -n "$sigsegv_recovery" ]]; then
1059 gbeauche 1.1 CAN_VOSF=yes
1060     fi
1061    
1062 gbeauche 1.23 dnl A dummy program that returns always true
1063 gbeauche 1.28 AC_PATH_PROG([BLESS], "true")
1064 gbeauche 1.23
1065 gbeauche 1.1 dnl Determine the addressing mode to use
1066     if [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
1067     ADDRESSING_MODE="real"
1068     else
1069     ADDRESSING_MODE=""
1070     AC_MSG_CHECKING([for the addressing mode to use])
1071     for am in $ADDRESSING_TEST_ORDER; do
1072     case $am in
1073     real)
1074     dnl Requires ability to mmap() Low Memory globals
1075 gbeauche 1.23 if [[ "x$ac_cv_can_map_lm$ac_cv_pagezero_hack" = "xnono" ]]; then
1076 gbeauche 1.1 continue
1077     fi
1078 gbeauche 1.23 dnl Requires VOSF screen updates
1079 gbeauche 1.1 if [[ "x$CAN_VOSF" = "xno" ]]; then
1080     continue
1081     fi
1082     dnl Real addressing will probably work.
1083     ADDRESSING_MODE="real"
1084     WANT_VOSF=yes dnl we can use VOSF and we need it actually
1085     DEFINES="$DEFINES -DREAL_ADDRESSING"
1086 gbeauche 1.23 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
1087     BLESS=Darwin/lowmem
1088     LDFLAGS="$LDFLAGS -pagezero_size 0x2000"
1089     fi
1090 gbeauche 1.1 break
1091     ;;
1092     direct)
1093     dnl Requires VOSF screen updates
1094     if [[ "x$CAN_VOSF" = "xyes" ]]; then
1095     ADDRESSING_MODE="direct"
1096     WANT_VOSF=yes dnl we can use VOSF and we need it actually
1097     DEFINES="$DEFINES -DDIRECT_ADDRESSING"
1098     break
1099     fi
1100     ;;
1101     banks)
1102     dnl Default addressing mode
1103     ADDRESSING_MODE="memory banks"
1104     break
1105     ;;
1106     *)
1107     AC_MSG_ERROR([Internal configure.in script error for $am addressing mode])
1108     esac
1109     done
1110     AC_MSG_RESULT($ADDRESSING_MODE)
1111     if [[ "x$ADDRESSING_MODE" = "x" ]]; then
1112     AC_MSG_WARN([Sorry, no suitable addressing mode in $ADDRESSING_TEST_ORDER])
1113     ADDRESSING_MODE="memory banks"
1114     fi
1115     fi
1116    
1117 gbeauche 1.5 dnl Banked Memory Addressing mode is not supported by the JIT compiler
1118     if [[ "x$WANT_JIT" = "xyes" -a "x$ADDRESSING_MODE" = "xmemory banks" ]]; then
1119     AC_MSG_ERROR([Sorry, the JIT Compiler requires Direct Addressing, at least])
1120     fi
1121    
1122 gbeauche 1.1 dnl Enable VOSF screen updates with this feature is requested and feasible
1123     if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
1124     AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
1125     else
1126     WANT_VOSF=no
1127     fi
1128    
1129     dnl Check for GAS.
1130     HAVE_GAS=no
1131     AC_MSG_CHECKING(for GAS .p2align feature)
1132     cat >conftest.S << EOF
1133     .text
1134     .p2align 5
1135     EOF
1136     if $CC conftest.S -c -o conftest.o >/dev/null 2>&1 ; then HAVE_GAS=yes; fi
1137     AC_MSG_RESULT($HAVE_GAS)
1138    
1139     dnl Check for GCC 2.7 or higher.
1140     HAVE_GCC27=no
1141     AC_MSG_CHECKING(for GCC 2.7 or higher)
1142 gbeauche 1.53 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5)
1143     # error gcc < 2.7
1144     #endif
1145     ]])],
1146     [AC_MSG_RESULT(yes); HAVE_GCC27=yes],
1147     [AC_MSG_RESULT(no)])
1148 gbeauche 1.1
1149     dnl Check for GCC 3.0 or higher.
1150     HAVE_GCC30=no
1151     AC_MSG_CHECKING(for GCC 3.0 or higher)
1152 gbeauche 1.53 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ >= 3)
1153     # error gcc < 3
1154     #endif
1155     ]])],
1156     [AC_MSG_RESULT(yes); HAVE_GCC30=yes],
1157     [AC_MSG_RESULT(no)])
1158 gbeauche 1.1
1159 gbeauche 1.39 dnl Check for ICC.
1160     AC_MSG_CHECKING(for ICC)
1161     HAVE_ICC=no
1162     if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
1163     HAVE_ICC=yes
1164     fi
1165     AC_MSG_RESULT($HAVE_ICC)
1166    
1167 gbeauche 1.1 dnl Set "-fomit-frame-pointer" on i386 GCC 2.7 or higher.
1168     dnl Also set "-fno-exceptions" for C++ because exception handling requires
1169     dnl the frame pointer.
1170     if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
1171     CFLAGS="$CFLAGS -fomit-frame-pointer"
1172     CXXFLAGS="$CXXFLAGS -fomit-frame-pointer -fno-exceptions"
1173     fi
1174    
1175     dnl (gb) Do not merge constants since it breaks fpu/fpu_x86.cpp.
1176     dnl As of 2001/08/02, this affects the following compilers:
1177     dnl Official: probably gcc-3.1 (mainline CVS)
1178     dnl Mandrake: gcc-2.96 >= 0.59mdk, gcc-3.0.1 >= 0.1mdk
1179     dnl Red Hat : gcc-2.96 >= 89, gcc-3.0 >= 1
1180 gbeauche 1.39 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1181 gbeauche 1.1 SAVED_CXXFLAGS="$CXXFLAGS"
1182     CXXFLAGS="$CXXFLAGS -fno-merge-constants"
1183     AC_CACHE_CHECK([whether GCC supports constants merging], ac_cv_gcc_constants_merging, [
1184     AC_LANG_SAVE
1185     AC_LANG_CPLUSPLUS
1186     AC_TRY_COMPILE([],[],[ac_cv_gcc_constants_merging=yes],[ac_cv_gcc_constants_merging=no])
1187     AC_LANG_RESTORE
1188     ])
1189     if [[ "x$ac_cv_gcc_constants_merging" != "xyes" ]]; then
1190     CXXFLAGS="$SAVED_CXXFLAGS"
1191     fi
1192     fi
1193    
1194 gbeauche 1.33 dnl Store motion was introduced in 3.3-hammer branch and any gcc >= 3.4
1195     dnl However, there are some corner cases exposed on x86-64
1196 gbeauche 1.39 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1197 gbeauche 1.33 SAVED_CXXFLAGS="$CXXFLAGS"
1198     CXXFLAGS="$CXXFLAGS -fno-gcse-sm"
1199     AC_CACHE_CHECK([whether GCC supports store motion], ac_cv_gcc_store_motion, [
1200     AC_LANG_SAVE
1201     AC_LANG_CPLUSPLUS
1202     AC_TRY_COMPILE([],[],[ac_cv_gcc_store_motion=yes],[ac_cv_gcc_store_motion=no])
1203     AC_LANG_RESTORE
1204     ])
1205     if [[ "x$ac_cv_gcc_store_motion" != "xyes" ]]; then
1206     CXXFLAGS="$SAVED_CXXFLAGS"
1207     fi
1208     fi
1209    
1210 gbeauche 1.39 dnl Add -fno-strict-aliasing for slirp sources
1211     if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1212 gbeauche 1.40 SAVED_CFLAGS="$CFLAGS"
1213 gbeauche 1.39 CFLAGS="$CFLAGS -fno-strict-aliasing"
1214     AC_CACHE_CHECK([whether the compiler supports -fno-strict-aliasing],
1215     ac_cv_gcc_no_strict_aliasing, [
1216     AC_TRY_COMPILE([],[],
1217 gbeauche 1.47 [ac_cv_gcc_no_strict_aliasing=yes; AC_SUBST(SLIRP_CFLAGS, "-fno-strict-aliasing")],
1218 gbeauche 1.39 [ac_cv_gcc_no_strict_aliasing=no])
1219     ])
1220     CFLAGS="$SAVED_CFLAGS"
1221     fi
1222    
1223 gbeauche 1.54 dnl Add -mdynamic-no-pic for MacOS X (XXX icc10 will support MacOS X)
1224     if [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1225 gbeauche 1.52 SAVED_CFLAGS="$CFLAGS"
1226     CFLAGS="$CFLAGS -mdynamic-no-pic"
1227     AC_CACHE_CHECK([whether the compiler supports -mdynamic-no-pic],
1228     ac_cv_gcc_mdynamic_no_pic, [
1229     AC_TRY_COMPILE([],[],[ac_cv_gcc_mdynamic_no_pic=yes],[ac_cv_gcc_mdynamic_no_pic=no])
1230     ])
1231     if [[ "x$ac_cv_gcc_mdynamic_no_pic" = "xyes" ]]; then
1232     CXXFLAGS="$CXXFLAGS -mdynamic-no-pic"
1233     else
1234     CFLAGS="$SAVED_CFLAGS"
1235     fi
1236     fi
1237    
1238 gbeauche 1.1 dnl Select appropriate CPU source and REGPARAM define.
1239     ASM_OPTIMIZATIONS=none
1240     CPUSRCS="cpuemu1.cpp cpuemu2.cpp cpuemu3.cpp cpuemu4.cpp cpuemu5.cpp cpuemu6.cpp cpuemu7.cpp cpuemu8.cpp"
1241 gbeauche 1.5
1242     dnl (gb) JITSRCS will be emptied later if the JIT is not available
1243     dnl Other platforms should define their own set of noflags file variants
1244     CAN_JIT=no
1245     JITSRCS="compemu1.cpp compemu2.cpp compemu3.cpp compemu4.cpp compemu5.cpp compemu6.cpp compemu7.cpp compemu8.cpp"
1246    
1247 gbeauche 1.11 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
1248 gbeauche 1.1 dnl i386 CPU
1249 gbeauche 1.7 DEFINES="$DEFINES -DUNALIGNED_PROFITABLE -DREGPARAM=\"__attribute__((regparm(3)))\""
1250 gbeauche 1.1 if [[ "x$HAVE_GAS" = "xyes" ]]; then
1251     ASM_OPTIMIZATIONS=i386
1252 gbeauche 1.7 DEFINES="$DEFINES -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE"
1253 gbeauche 1.10 JITSRCS="cpuemu1_nf.cpp cpuemu2_nf.cpp cpuemu3_nf.cpp cpuemu4_nf.cpp cpuemu5_nf.cpp cpuemu6_nf.cpp cpuemu7_nf.cpp cpuemu8_nf.cpp $JITSRCS"
1254 gbeauche 1.11 CAN_JIT=yes
1255 gbeauche 1.13 fi
1256     elif [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_X86_64" = "xyes" ]]; then
1257     dnl x86-64 CPU
1258     DEFINES="$DEFINES -DUNALIGNED_PROFITABLE"
1259     if [[ "x$HAVE_GAS" = "xyes" ]]; then
1260     ASM_OPTIMIZATIONS="x86-64"
1261     DEFINES="$DEFINES -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS"
1262 gbeauche 1.32 JITSRCS="cpuemu1_nf.cpp cpuemu2_nf.cpp cpuemu3_nf.cpp cpuemu4_nf.cpp cpuemu5_nf.cpp cpuemu6_nf.cpp cpuemu7_nf.cpp cpuemu8_nf.cpp $JITSRCS"
1263     CAN_JIT=yes
1264 gbeauche 1.34 WANT_33BIT_ADDRESSING=yes
1265 gbeauche 1.1 fi
1266     elif [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_SPARC" = "xyes" -a "x$HAVE_GAS" = "xyes" ]]; then
1267     dnl SPARC CPU
1268     case "$target_os" in
1269     solaris*)
1270     AC_MSG_CHECKING(SPARC CPU architecture)
1271     SPARC_TYPE=`Solaris/which_sparc`
1272     AC_MSG_RESULT($SPARC_TYPE)
1273     case "$SPARC_TYPE" in
1274     SPARC_V8)
1275     ASM_OPTIMIZATIONS="SPARC V8 architecture"
1276     DEFINES="$DEFINES -DSPARC_V8_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
1277     CFLAGS="$CFLAGS -Wa,-Av8"
1278     CXXFLAGS="$CXXFLAGS -Wa,-Av8"
1279     ;;
1280     SPARC_V9)
1281     ASM_OPTIMIZATIONS="SPARC V9 architecture"
1282     DEFINES="$DEFINES -DSPARC_V9_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
1283     CFLAGS="$CFLAGS -Wa,-Av9"
1284     CXXFLAGS="$CXXFLAGS -Wa,-Av9"
1285     ;;
1286     esac
1287     ;;
1288     esac
1289     elif [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
1290     dnl Native m68k, no emulation
1291     CPUINCLUDES="-I../native_cpu"
1292     CPUSRCS="asm_support.s"
1293     fi
1294    
1295 gbeauche 1.5 dnl Enable JIT compiler, if possible.
1296     if [[ "x$WANT_JIT" = "xyes" -a "x$CAN_JIT" ]]; then
1297     JITSRCS="$JITSRCS ../uae_cpu/compiler/compemu_support.cpp ../uae_cpu/compiler/compemu_fpp.cpp compstbl.o cpustbl_nf.o"
1298     DEFINES="$DEFINES -DUSE_JIT -DUSE_JIT_FPU"
1299    
1300     if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
1301     if [[ "x$WANT_MON" = "xyes" ]]; then
1302     DEFINES="$DEFINES -DJIT_DEBUG=1"
1303     else
1304     AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
1305     WANT_JIT_DEBUG=no
1306     fi
1307     fi
1308 gbeauche 1.8
1309     dnl IEEE core is the only FPU emulator to use with the JIT compiler
1310     case $FPE_CORE_TEST_ORDER in
1311     ieee*) ;;
1312     *) AC_MSG_WARN([Forcing use of the IEEE FPU core, as the JIT compiler supports only this one.]) ;;
1313     esac
1314     FPE_CORE_TEST_ORDER="ieee"
1315 gbeauche 1.5 else
1316     WANT_JIT=no
1317     WANT_JIT_DEBUG=no
1318     JITSRCS=""
1319     fi
1320    
1321 gbeauche 1.34 dnl Use 33-bit memory addressing?
1322     if [[ "$ac_cv_have_33bit_addressing:$WANT_33BIT_ADDRESSING" = "yes:yes" ]]; then
1323     use_33bit_addressing=yes
1324     fi
1325     AC_TRANSLATE_DEFINE(USE_33BIT_ADDRESSING, "$use_33bit_addressing",
1326     [Define to use 33-bit memory addressing on 64-bit JIT capable systems.])
1327    
1328 gbeauche 1.1 dnl Utility macro used by next two tests.
1329     dnl AC_EXAMINE_OBJECT(C source code,
1330     dnl commands examining object file,
1331     dnl [commands to run if compile failed]):
1332     dnl
1333     dnl Compile the source code to an object file; then convert it into a
1334     dnl printable representation. All unprintable characters and
1335     dnl asterisks (*) are replaced by dots (.). All white space is
1336     dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
1337     dnl output, but runs of newlines are compressed to a single newline.
1338     dnl Finally, line breaks are forcibly inserted so that no line is
1339     dnl longer than 80 columns and the file ends with a newline. The
1340     dnl result of all this processing is in the file conftest.dmp, which
1341     dnl may be examined by the commands in the second argument.
1342     dnl
1343     AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
1344     [AC_LANG_SAVE
1345     AC_LANG_C
1346     dnl Next bit cribbed from AC_TRY_COMPILE.
1347     cat > conftest.$ac_ext <<EOF
1348     [#line __oline__ "configure"
1349     #include "confdefs.h"
1350     $1
1351     ]EOF
1352     if AC_TRY_EVAL(ac_compile); then
1353     od -c conftest.o |
1354     sed ['s/^[0-7]*[ ]*/ /
1355     s/\*/./g
1356     s/ \\n/*/g
1357     s/ [0-9][0-9][0-9]/./g
1358     s/ \\[^ ]/./g'] |
1359     tr -d '
1360     ' | tr -s '*' '
1361     ' | fold | sed '$a\
1362     ' > conftest.dmp
1363     $2
1364     ifelse($3, , , else
1365     $3
1366     )dnl
1367     fi
1368     rm -rf conftest*
1369     AC_LANG_RESTORE])
1370    
1371     dnl Floating point format probe.
1372     dnl The basic concept is the same as the above: grep the object
1373     dnl file for an interesting string. We have to watch out for
1374     dnl rounding changing the values in the object, however; this is
1375     dnl handled by ignoring the least significant byte of the float.
1376     dnl
1377     dnl Does not know about VAX G-float or C4x idiosyncratic format.
1378     dnl It does know about PDP-10 idiosyncratic format, but this is
1379     dnl not presently supported by GCC. S/390 "binary floating point"
1380     dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
1381     dnl as ASCII?)
1382     dnl
1383     AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
1384     [AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
1385     [gcc_AC_EXAMINE_OBJECT(
1386     [/* This will not work unless sizeof(double) == 8. */
1387     extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
1388    
1389     /* This structure must have no internal padding. */
1390     struct possibility {
1391     char prefix[8];
1392     double candidate;
1393     char postfix[8];
1394     };
1395    
1396     #define C(cand) { "\nformat:", cand, ":tamrof\n" }
1397     struct possibility table [] =
1398     {
1399     C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
1400     C( 3.53802595280598432000e+18), /* D__float - VAX */
1401     C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
1402     C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
1403     C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
1404     };],
1405     [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1406     ac_cv_c_float_format='IEEE (big-endian)'
1407     elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
1408     ac_cv_c_float_format='IEEE (big-endian)'
1409     elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
1410     ac_cv_c_float_format='IEEE (little-endian)'
1411     elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
1412     ac_cv_c_float_format='IEEE (little-endian)'
1413     elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
1414     ac_cv_c_float_format='VAX D-float'
1415     elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
1416     ac_cv_c_float_format='PDP-10'
1417     elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1418     ac_cv_c_float_format='IBM 370 hex'
1419     else
1420     AC_MSG_ERROR(Unknown floating point format)
1421     fi],
1422     [AC_MSG_ERROR(compile failed)])
1423     ])
1424     # IEEE is the default format. If the float endianness isn't the same
1425     # as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
1426     # (which is a tristate: yes, no, default). This is only an issue with
1427     # IEEE; the other formats are only supported by a few machines each,
1428     # all with the same endianness.
1429     format=IEEE_FLOAT_FORMAT
1430     fbigend=
1431     case $ac_cv_c_float_format in
1432     'IEEE (big-endian)' )
1433     if test $ac_cv_c_bigendian = no; then
1434     fbigend=1
1435     fi
1436     ;;
1437     'IEEE (little-endian)' )
1438     if test $ac_cv_c_bigendian = yes; then
1439     fbigend=0
1440     fi
1441     ;;
1442     'VAX D-float' )
1443     format=VAX_FLOAT_FORMAT
1444     ;;
1445     'PDP-10' )
1446     format=PDP10_FLOAT_FORMAT
1447     ;;
1448     'IBM 370 hex' )
1449     format=IBM_FLOAT_FORMAT
1450     ;;
1451     esac
1452     AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
1453     [Define to the floating point format of the host machine.])
1454     if test -n "$fbigend"; then
1455     AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
1456     [Define to 1 if the host machine stores floating point numbers in
1457     memory with the word containing the sign bit at the lowest address,
1458     or to 0 if it does it the other way around.
1459    
1460     This macro should not be defined if the ordering is the same as for
1461     multi-word integers.])
1462     fi
1463     ])
1464    
1465     dnl Select appropriate FPU source.
1466     gcc_AC_C_FLOAT_FORMAT
1467     AC_CHECK_HEADERS(ieee754.h ieeefp.h floatingpoint.h nan.h)
1468    
1469     for fpe in $FPE_CORE_TEST_ORDER; do
1470     case $fpe in
1471     ieee)
1472 gbeauche 1.2 case $ac_cv_c_float_format in
1473     IEEE*)
1474 gbeauche 1.1 FPE_CORE="IEEE fpu core"
1475     DEFINES="$DEFINES -DFPU_IEEE"
1476     FPUSRCS="../uae_cpu/fpu/fpu_ieee.cpp"
1477 gbeauche 1.4 dnl Math functions not mandated by C99 standard
1478     AC_CHECK_FUNCS(isnanl isinfl)
1479     dnl Math functions required by C99 standard, but probably not
1480     dnl implemented everywhere. In that case, we fall back to the
1481     dnl regular variant for doubles.
1482     AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
1483     AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
1484     AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
1485     AC_CHECK_FUNCS(floorl ceill)
1486 gbeauche 1.1 break
1487 gbeauche 1.2 ;;
1488     esac
1489 gbeauche 1.1 ;;
1490     x86)
1491     if [[ ":$HAVE_GCC27:$HAVE_I386:$HAVE_GAS:" = ":yes:yes:yes:" ]]; then
1492     FPE_CORE="i387 fpu core"
1493     DEFINES="$DEFINES -DFPU_X86"
1494     FPUSRCS="../uae_cpu/fpu/fpu_x86.cpp"
1495     break
1496     fi
1497     ;;
1498     uae)
1499     FPE_CORE="uae fpu core"
1500     DEFINES="$DEFINES -DFPU_UAE"
1501     FPUSRCS="../uae_cpu/fpu/fpu_uae.cpp"
1502     break
1503     ;;
1504     *)
1505     AC_MSG_ERROR([Internal configure.in script error for $fpe fpu core])
1506     ;;
1507     esac
1508     done
1509     if [[ "x$FPE_CORE" = "x" ]]; then
1510     AC_MSG_ERROR([Sorry, no suitable FPU core found in $FPE_CORE_TEST_ORDER])
1511     fi
1512    
1513     dnl Check for certain math functions
1514     AC_CHECK_FUNCS(atanh)
1515 gbeauche 1.4 AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
1516 gbeauche 1.1
1517     dnl UAE CPU sources for all non-m68k-native architectures.
1518     if [[ "x$WANT_NATIVE_M68K" = "xno" ]]; then
1519     CPUINCLUDES="-I../uae_cpu"
1520 gbeauche 1.5 CPUSRCS="../uae_cpu/basilisk_glue.cpp ../uae_cpu/memory.cpp ../uae_cpu/newcpu.cpp ../uae_cpu/readcpu.cpp $FPUSRCS cpustbl.cpp cpudefs.cpp $CPUSRCS $JITSRCS"
1521 gbeauche 1.1 fi
1522    
1523     dnl Remove the "-g" option if set for GCC.
1524     if [[ "x$HAVE_GCC27" = "xyes" ]]; then
1525 gbeauche 1.33 CFLAGS=`echo $CFLAGS | sed -e 's/-g\b//g'`
1526     CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g\b//g'`
1527 gbeauche 1.1 fi
1528    
1529 gbeauche 1.14 dnl Or if we have -IPA (MIPSPro compilers)
1530     if [[ "x$HAVE_IPA" = "xyes" ]]; then
1531     CFLAGS="`echo $CFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1532     CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1533 gbeauche 1.1 CXXFLAGS="-LANG:std $CXXFLAGS"
1534 gbeauche 1.14 LDFLAGS="$LDFLAGS -O3 -OPT:Olimit=0 -IPA"
1535 gbeauche 1.1 fi
1536    
1537     dnl Generate Makefile.
1538     AC_SUBST(DEFINES)
1539     AC_SUBST(SYSSRCS)
1540     AC_SUBST(CPUINCLUDES)
1541     AC_SUBST(CPUSRCS)
1542 gbeauche 1.23 AC_SUBST(BLESS)
1543 gbeauche 1.29 AC_SUBST(KEYCODES)
1544 cebix 1.16 AC_CONFIG_FILES([Makefile])
1545     AC_OUTPUT
1546 gbeauche 1.1
1547     dnl Print summary.
1548     echo
1549     echo Basilisk II configuration summary:
1550     echo
1551 gbeauche 1.26 echo SDL support ............................ : $SDL_SUPPORT
1552 gbeauche 1.1 echo XFree86 DGA support .................... : $WANT_XF86_DGA
1553     echo XFree86 VidMode support ................ : $WANT_XF86_VIDMODE
1554     echo fbdev DGA support ...................... : $WANT_FBDEV_DGA
1555     echo Enable video on SEGV signals ........... : $WANT_VOSF
1556     echo ESD sound support ...................... : $WANT_ESD
1557     echo GTK user interface ..................... : $WANT_GTK
1558     echo mon debugger support ................... : $WANT_MON
1559     echo Running m68k code natively ............. : $WANT_NATIVE_M68K
1560 gbeauche 1.5 echo Use JIT compiler ....................... : $WANT_JIT
1561     echo JIT debug mode ......................... : $WANT_JIT_DEBUG
1562 gbeauche 1.1 echo Floating-Point emulation core .......... : $FPE_CORE
1563     echo Assembly optimizations ................. : $ASM_OPTIMIZATIONS
1564     echo Addressing mode ........................ : $ADDRESSING_MODE
1565 gbeauche 1.21 echo Bad memory access recovery type ........ : $sigsegv_recovery
1566 gbeauche 1.1 echo
1567     echo "Configuration done. Now type \"make\" (or \"gmake\")."