ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.49
Committed: 2005-06-19T15:52:09Z (19 years, 2 months ago) by gbeauche
Branch: MAIN
Changes since 1.48: +32 -2 lines
Log Message:
gtk2 gui support

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