ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.59
Committed: 2006-01-27T23:41:43Z (18 years, 9 months ago) by gbeauche
Branch: MAIN
Changes since 1.58: +34 -1 lines
Log Message:
Check whether compiler supports byte bit-fields. If so, we can enable slirp
emulation code since it pure C+sockets code.

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 gbeauche 1.59 dnl Check whether compiler supports byte bit-fields
450     AC_CACHE_CHECK([whether compiler supports byte bit-fields],
451     ac_cv_have_byte_bitfields, [
452     AC_LANG_SAVE
453     AC_LANG_CPLUSPLUS
454     AC_TRY_RUN([
455     struct A {
456     unsigned char b1:4;
457     unsigned char b2:4;
458     unsigned char c;
459     unsigned short s;
460     unsigned char a[4];
461     };
462    
463     int main(void) {
464     A a;
465     return ! (sizeof(A) == 8 && &a.c == ((unsigned char *)&a + 1));
466     }],
467     [ac_cv_have_byte_bitfields=yes],
468     [ac_cv_have_byte_bitfields=no],
469     dnl When cross-compiling, assume only GCC supports this
470     [if [[ "$GCC" = "yes" ]]; then
471     ac_cv_have_byte_bitfields="guessing yes"
472     else
473     ac_cv_have_byte_bitfields="guessing no"
474     fi]
475     )
476     AC_LANG_RESTORE
477     ])
478 gbeauche 1.58
479 gbeauche 1.30 dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
480 cebix 1.51 AC_DEFUN([AC_CHECK_FRAMEWORK], [
481 gbeauche 1.30 AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
482     AC_CACHE_CHECK([whether compiler supports framework $1],
483     ac_Framework, [
484     saved_LIBS="$LIBS"
485     LIBS="$LIBS -framework $1"
486     AC_TRY_LINK(
487 gbeauche 1.57 [$2], [],
488 gbeauche 1.30 [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
489     )
490     ])
491     AS_IF([test AS_VAR_GET(ac_Framework) = yes],
492     [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
493     )
494     AS_VAR_POPDEF([ac_Framework])dnl
495     ])
496    
497     dnl Check for some MacOS X frameworks
498     AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
499     AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
500 gbeauche 1.48 AC_CHECK_FRAMEWORK(CoreFoundation, [#include <CoreFoundation/CoreFoundation.h>])
501 gbeauche 1.30
502 gbeauche 1.1 dnl Select system-dependant source files.
503     SERIALSRC=serial_unix.cpp
504     ETHERSRC=../dummy/ether_dummy.cpp
505     SCSISRC=../dummy/scsi_dummy.cpp
506     AUDIOSRC=../dummy/audio_dummy.cpp
507 gbeauche 1.41 EXTFSSRC=extfs_unix.cpp
508 gbeauche 1.1 EXTRASYSSRCS=
509     CAN_NATIVE_M68K=no
510     case "$target_os" in
511     linux*)
512     ETHERSRC=ether_unix.cpp
513     AUDIOSRC=audio_oss_esd.cpp
514     SCSISRC=Linux/scsi_linux.cpp
515     ;;
516     freebsd*)
517     ETHERSRC=ether_unix.cpp
518     AUDIOSRC=audio_oss_esd.cpp
519     DEFINES="$DEFINES -DBSD_COMP"
520     CXXFLAGS="$CXXFLAGS -fpermissive"
521     dnl Check for the CAM library
522     AC_CHECK_LIB(cam, cam_open_btl, HAVE_LIBCAM=yes, HAVE_LIBCAM=no)
523     if [[ "x$HAVE_LIBCAM" = "xno" ]]; then
524     AC_MSG_WARN([Cannot find libcam for SCSI management, disabling SCSI support.])
525     else
526     dnl Check for the sys kernel includes
527     AC_CHECK_HEADER(camlib.h)
528     if [[ "x$ac_cv_header_camlib_h" = "xno" ]]; then
529     dnl In this case I should fix this thing including a "patch"
530     dnl to access directly to the functions in the kernel :) --Orlando
531     AC_MSG_WARN([Cannot find includes for CAM library, disabling SCSI support.])
532     else
533     SCSISRC=FreeBSD/scsi_freebsd.cpp
534     LIBS="$LIBS -lcam"
535     DEFINES="$DEFINES -DCAM"
536     fi
537     fi
538     ;;
539     netbsd*)
540     CAN_NATIVE_M68K=yes
541 gbeauche 1.44 ETHERSRC=ether_unix.cpp
542 gbeauche 1.1 ;;
543     solaris*)
544     AUDIOSRC=Solaris/audio_solaris.cpp
545     DEFINES="$DEFINES -DBSD_COMP -D_POSIX_PTHREAD_SEMANTICS"
546     ;;
547     irix*)
548     AUDIOSRC=Irix/audio_irix.cpp
549     EXTRASYSSRCS=Irix/unaligned.c
550     LIBS="$LIBS -laudio"
551     WANT_ESD=no
552    
553 gbeauche 1.14 dnl Check if our compiler supports -IPA (MIPSPro)
554     HAVE_IPA=no
555 gbeauche 1.1 ocflags="$CFLAGS"
556 gbeauche 1.14 CFLAGS=`echo "$CFLAGS -IPA" | sed -e "s/-g//g"`
557     AC_MSG_CHECKING(if "-IPA" works)
558 gbeauche 1.1 dnl Do a test compile of an empty function
559 gbeauche 1.56 AC_TRY_COMPILE([#if defined __GNUC__
560     # error GCC does not support IPA yet
561     #endif],, [AC_MSG_RESULT(yes); HAVE_IPA=yes], AC_MSG_RESULT(no))
562 gbeauche 1.1 CFLAGS="$ocflags"
563 gbeauche 1.30 ;;
564     darwin*)
565 gbeauche 1.45 ETHERSRC=ether_unix.cpp
566 gbeauche 1.48 if [[ "x$ac_cv_framework_IOKit" = "xyes" -a "x$ac_cv_framework_CoreFoundation" = "xyes" ]]; then
567 gbeauche 1.30 EXTRASYSSRCS="../MacOSX/sys_darwin.cpp"
568     fi
569 gbeauche 1.41 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
570     EXTFSSRC=../MacOSX/extfs_macosx.mm
571     fi
572 gbeauche 1.1 ;;
573 gbeauche 1.36 cygwin*)
574     SERIALSRC="../dummy/serial_dummy.cpp"
575 gbeauche 1.37 EXTRASYSSRCS="../Windows/BasiliskII.rc"
576 gbeauche 1.36 ;;
577 gbeauche 1.1 esac
578 gbeauche 1.43
579     dnl Is the slirp library supported?
580 gbeauche 1.59 case "$ac_cv_have_byte_bitfields" in
581     yes|"guessing yes")
582     ETHERSRC=ether_unix.cpp
583     ;;
584     esac
585 gbeauche 1.43 if [[ "x$ETHERSRC" = "xether_unix.cpp" ]]; then
586     AC_DEFINE(HAVE_SLIRP, 1, [Define if slirp library is supported])
587     SLIRP_SRCS="\
588     ../slirp/bootp.c ../slirp/ip_output.c ../slirp/tcp_input.c \
589     ../slirp/cksum.c ../slirp/mbuf.c ../slirp/tcp_output.c \
590     ../slirp/debug.c ../slirp/misc.c ../slirp/tcp_subr.c \
591     ../slirp/if.c ../slirp/sbuf.c ../slirp/tcp_timer.c \
592     ../slirp/ip_icmp.c ../slirp/slirp.c ../slirp/tftp.c \
593     ../slirp/ip_input.c ../slirp/socket.c ../slirp/udp.c"
594     fi
595     AC_SUBST(SLIRP_SRCS)
596    
597 gbeauche 1.26 dnl SDL overrides
598     if [[ "x$WANT_SDL" = "xyes" ]]; then
599     AC_DEFINE(USE_SDL, 1, [Define to enble SDL support])
600     fi
601     if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
602 gbeauche 1.31 AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support])
603 gbeauche 1.30 VIDEOSRCS="../SDL/video_sdl.cpp"
604 gbeauche 1.29 KEYCODES="../SDL/keycodes"
605 gbeauche 1.30 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
606     EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp"
607     else
608 gbeauche 1.38 case "$target_os" in
609     cygwin*)
610     EXTRASYSSRCS="$EXTRASYSSRCS ../Windows/clip_windows.cpp"
611     ;;
612     *)
613     EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp"
614     ;;
615     esac
616 gbeauche 1.30 fi
617 gbeauche 1.26 else
618 gbeauche 1.30 VIDEOSRCS="video_x.cpp"
619 gbeauche 1.29 KEYCODES="keycodes"
620 gbeauche 1.30 EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp"
621 gbeauche 1.26 fi
622 gbeauche 1.31 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
623     AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
624     AUDIOSRC="../SDL/audio_sdl.cpp"
625     fi
626 gbeauche 1.1
627     dnl Use 68k CPU natively?
628     WANT_NATIVE_M68K=no
629     if [[ "x$HAVE_M68K" = "xyes" -a "x$CAN_NATIVE_M68K" = "xyes" ]]; then
630     AC_DEFINE(ENABLE_NATIVE_M68K, 1, [Define if using native 68k mode.])
631     WANT_NATIVE_M68K=yes
632     fi
633    
634     if [[ "x$HAVE_PTHREADS" = "xno" ]]; then
635     dnl Serial, ethernet and audio support needs pthreads
636     AC_MSG_WARN([You don't have pthreads, disabling serial, ethernet and audio support.])
637     SERIALSRC=../dummy/serial_dummy.cpp
638     ETHERSRC=../dummy/ether_dummy.cpp
639     AUDIOSRC=../dummy/audio_dummy.cpp
640     fi
641 gbeauche 1.41 SYSSRCS="$VIDEOSRCS $EXTFSSRC $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $MONSRCS $EXTRASYSSRCS"
642 gbeauche 1.1
643     dnl Define a macro that translates a yesno-variable into a C macro definition
644     dnl to be put into the config.h file
645     dnl $1 -- the macro to define
646     dnl $2 -- the value to translate
647     dnl $3 -- template name
648 cebix 1.51 AC_DEFUN([AC_TRANSLATE_DEFINE], [
649 gbeauche 1.1 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
650     AC_DEFINE($1, 1, $3)
651     fi
652     ])
653    
654 gbeauche 1.25 dnl Check that the host supports TUN/TAP devices
655     AC_CACHE_CHECK([whether TUN/TAP is supported],
656     ac_cv_tun_tap_support, [
657     AC_TRY_COMPILE([
658     #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
659     #include <linux/if.h>
660     #include <linux/if_tun.h>
661     #endif
662     #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
663     #include <net/if.h>
664     #include <net/if_tun.h>
665     #endif
666     ], [
667     struct ifreq ifr;
668     memset(&ifr, 0, sizeof(ifr));
669     ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
670     ],
671     ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
672     )
673     ])
674     AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
675     [Define if your system supports TUN/TAP devices.])
676    
677 gbeauche 1.1 dnl Various checks if the system supports vm_allocate() and the like functions.
678     have_mach_vm=no
679     if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
680     "x$ac_cv_func_vm_protect" = "xyes" ]]; then
681     have_mach_vm=yes
682     fi
683     AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
684     [Define if your system has a working vm_allocate()-based memory allocator.])
685    
686     dnl Check that vm_allocate(), vm_protect() work
687     if [[ "x$have_mach_vm" = "xyes" ]]; then
688    
689     AC_CACHE_CHECK([whether vm_protect works],
690     ac_cv_vm_protect_works, [
691     AC_LANG_SAVE
692     AC_LANG_CPLUSPLUS
693     ac_cv_vm_protect_works=yes
694     dnl First the tests that should segfault
695     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
696     AC_TRY_RUN([
697     #define CONFIGURE_TEST_VM_MAP
698     #define TEST_VM_PROT_$test_def
699     #include "vm_alloc.cpp"
700     ], ac_cv_vm_protect_works=no, rm -f core,
701     dnl When cross-compiling, do not assume anything
702     ac_cv_vm_protect_works="guessing no"
703     )
704     done
705     AC_TRY_RUN([
706     #define CONFIGURE_TEST_VM_MAP
707     #define TEST_VM_PROT_RDWR_WRITE
708     #include "vm_alloc.cpp"
709     ], , ac_cv_vm_protect_works=no,
710     dnl When cross-compiling, do not assume anything
711     ac_cv_vm_protect_works="guessing no"
712     )
713     AC_LANG_RESTORE
714     ]
715     )
716    
717     dnl Remove support for vm_allocate() if vm_protect() does not work
718     if [[ "x$have_mach_vm" = "xyes" ]]; then
719     case $ac_cv_vm_protect_works in
720     *yes) have_mach_vm=yes;;
721     *no) have_mach_vm=no;;
722     esac
723     fi
724     AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
725     [Define if your system has a working vm_allocate()-based memory allocator.])
726    
727     fi dnl HAVE_MACH_VM
728    
729     dnl Various checks if the system supports mmap() and the like functions.
730     dnl ... and Mach memory allocators are not supported
731     have_mmap_vm=no
732     if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
733     "x$ac_cv_func_mprotect" = "xyes" ]]; then
734     if [[ "x$have_mach_vm" = "xno" ]]; then
735     have_mmap_vm=yes
736     fi
737     fi
738     AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
739     [Define if your system has a working mmap()-based memory allocator.])
740    
741     dnl Check that mmap() and associated functions work.
742     if [[ "x$have_mmap_vm" = "xyes" ]]; then
743    
744     dnl Check if we have a working anonymous mmap()
745     AC_CACHE_CHECK([whether mmap supports MAP_ANON],
746     ac_cv_mmap_anon, [
747     AC_LANG_SAVE
748     AC_LANG_CPLUSPLUS
749     AC_TRY_RUN([
750     #define HAVE_MMAP_ANON
751     #define CONFIGURE_TEST_VM_MAP
752     #define TEST_VM_MMAP_ANON
753     #include "vm_alloc.cpp"
754     ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
755     dnl When cross-compiling, do not assume anything.
756     ac_cv_mmap_anon="guessing no"
757     )
758     AC_LANG_RESTORE
759     ]
760     )
761     AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
762     [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
763    
764     AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
765     ac_cv_mmap_anonymous, [
766     AC_LANG_SAVE
767     AC_LANG_CPLUSPLUS
768     AC_TRY_RUN([
769     #define HAVE_MMAP_ANONYMOUS
770     #define CONFIGURE_TEST_VM_MAP
771     #define TEST_VM_MMAP_ANON
772     #include "vm_alloc.cpp"
773     ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
774     dnl When cross-compiling, do not assume anything.
775     ac_cv_mmap_anonymous="guessing no"
776     )
777     AC_LANG_RESTORE
778     ]
779     )
780     AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
781     [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
782    
783     AC_CACHE_CHECK([whether mprotect works],
784     ac_cv_mprotect_works, [
785     AC_LANG_SAVE
786     AC_LANG_CPLUSPLUS
787     ac_cv_mprotect_works=yes
788     dnl First the tests that should segfault
789     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
790     AC_TRY_RUN([
791     #define CONFIGURE_TEST_VM_MAP
792     #define TEST_VM_PROT_$test_def
793     #include "vm_alloc.cpp"
794     ], ac_cv_mprotect_works=no, rm -f core,
795     dnl When cross-compiling, do not assume anything
796     ac_cv_mprotect_works="guessing no"
797     )
798     done
799     AC_TRY_RUN([
800     #define CONFIGURE_TEST_VM_MAP
801     #define TEST_VM_PROT_RDWR_WRITE
802     #include "vm_alloc.cpp"
803     ], , ac_cv_mprotect_works=no,
804     dnl When cross-compiling, do not assume anything
805     ac_cv_mprotect_works="guessing no"
806     )
807     AC_LANG_RESTORE
808     ]
809     )
810    
811     dnl Remove support for mmap() if mprotect() does not work
812     if [[ "x$have_mmap_vm" = "xyes" ]]; then
813     case $ac_cv_mprotect_works in
814     *yes) have_mmap_vm=yes;;
815     *no) have_mmap_vm=no;;
816     esac
817     fi
818     AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
819     [Define if your system has a working mmap()-based memory allocator.])
820    
821     fi dnl HAVE_MMAP_VM
822    
823 gbeauche 1.23 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
824     AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x2000],
825     ac_cv_pagezero_hack, [
826     ac_cv_pagezero_hack=no
827     if AC_TRY_COMMAND([Darwin/testlmem.sh 0x2000]); then
828     ac_cv_pagezero_hack=yes
829     dnl might as well skip the test for mmap-able low memory
830     ac_cv_can_map_lm=no
831     fi
832     ])
833     AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
834     [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
835    
836 gbeauche 1.1 dnl Check if we can mmap 0x2000 bytes from 0x0000
837     AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x2000],
838     ac_cv_can_map_lm, [
839     AC_LANG_SAVE
840     AC_LANG_CPLUSPLUS
841     AC_TRY_RUN([
842     #include "vm_alloc.cpp"
843     int main(void) { /* returns 0 if we could map the lowmem globals */
844 gbeauche 1.15 volatile char * lm = 0;
845 gbeauche 1.1 if (vm_init() < 0) exit(1);
846 gbeauche 1.15 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
847 gbeauche 1.1 lm[0] = 'z';
848     if (vm_release((char *)lm, 0x2000) < 0) exit(1);
849     vm_exit(); exit(0);
850     }
851     ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
852     dnl When cross-compiling, do not assume anything.
853     ac_cv_can_map_lm="guessing no"
854     )
855     AC_LANG_RESTORE
856     ]
857     )
858    
859 gbeauche 1.34 dnl Check if we have POSIX shared memory support
860     AC_CACHE_CHECK([whether POSIX shared memory is working],
861     ac_cv_have_posix_shm, [
862     AC_LANG_SAVE
863     AC_LANG_CPLUSPLUS
864     AC_TRY_RUN([
865     #define HAVE_POSIX_SHM
866     #include "vm_alloc.cpp"
867     int main(void) { /* returns 0 if we have working POSIX shm */
868     if (vm_init() < 0) exit(2);
869     char *m1 = (char *)vm_acquire(32768, VM_MAP_DEFAULT | VM_MAP_33BIT);
870     if (m1 == VM_MAP_FAILED) exit(3);
871     vm_exit(); exit(0);
872     }
873     ], ac_cv_have_posix_shm=yes, ac_cv_have_posix_shm=no,
874     dnl When cross-compiling, do not assume anything.
875     ac_cv_have_posix_shm="guessing no"
876     )
877     AC_LANG_RESTORE
878     ]
879     )
880     AC_TRANSLATE_DEFINE(HAVE_POSIX_SHM, "$ac_cv_have_posix_shm",
881     [Define if your system supports POSIX shared memory.])
882    
883     dnl Check if we have working 33-bit memory addressing
884     AC_CACHE_CHECK([whether 33-bit memory addressing is working],
885     ac_cv_have_33bit_addressing, [
886     AC_LANG_SAVE
887     AC_LANG_CPLUSPLUS
888     AC_TRY_RUN([
889     #define USE_33BIT_ADDRESSING 1
890     #include "vm_alloc.cpp"
891     int main(void) { /* returns 0 if we have working 33-bit addressing */
892     if (sizeof(void *) < 8) exit(1);
893     if (vm_init() < 0) exit(2);
894     char *m1 = (char *)vm_acquire(32768, VM_MAP_DEFAULT | VM_MAP_33BIT);
895     if (m1 == VM_MAP_FAILED) exit(3);
896     char *m2 = m1 + (1L << 32);
897     m1[0] = 0x12; if (m2[0] != 0x12) exit(4);
898     m2[0] = 0x34; if (m1[0] != 0x34) exit(5);
899     vm_exit(); exit(0);
900     }
901     ], ac_cv_have_33bit_addressing=yes, ac_cv_have_33bit_addressing=no,
902     dnl When cross-compiling, do not assume anything.
903     ac_cv_have_33bit_addressing="guessing no"
904     )
905     AC_LANG_RESTORE
906     ]
907     )
908    
909 gbeauche 1.1 dnl Check signal handlers need to be reinstalled
910     AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
911     ac_cv_signal_need_reinstall, [
912     AC_LANG_SAVE
913     AC_LANG_CPLUSPLUS
914     AC_TRY_RUN([
915     #include <stdlib.h>
916     #ifdef HAVE_UNISTD_H
917     #include <unistd.h>
918     #endif
919     #include <signal.h>
920     static int handled_signal = 0;
921     RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
922     int main(void) { /* returns 0 if signals need not to be reinstalled */
923     signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
924     exit(handled_signal == 2);
925     }
926     ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
927     dnl When cross-compiling, do not assume anything.
928     ac_cv_signal_need_reinstall="guessing yes"
929     )
930     AC_LANG_RESTORE
931     ]
932     )
933     AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
934     [Define if your system requires signals to be reinstalled.])
935    
936     dnl Check if sigaction handlers need to be reinstalled
937     AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
938     ac_cv_sigaction_need_reinstall, [
939     AC_LANG_SAVE
940     AC_LANG_CPLUSPLUS
941     AC_TRY_RUN([
942     #include <stdlib.h>
943     #ifdef HAVE_UNISTD_H
944     #include <unistd.h>
945     #endif
946     #include <signal.h>
947     static int handled_signal = 0;
948     RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
949     typedef RETSIGTYPE (*signal_handler)(int);
950     static signal_handler mysignal(int sig, signal_handler handler) {
951     struct sigaction old_sa;
952     struct sigaction new_sa;
953     new_sa.sa_handler = handler;
954     return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
955     }
956     int main(void) { /* returns 0 if signals need not to be reinstalled */
957     mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
958     exit(handled_signal == 2);
959     }
960     ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
961     dnl When cross-compiling, do not assume anything.
962     ac_cv_sigaction_need_reinstall="guessing yes"
963     )
964     AC_LANG_RESTORE
965     ]
966     )
967     AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
968     [Define if your system requires sigactions to be reinstalled.])
969    
970 gbeauche 1.21 dnl Check if Mach exceptions supported.
971     AC_CACHE_CHECK([whether your system supports Mach exceptions],
972     ac_cv_have_mach_exceptions, [
973 gbeauche 1.1 AC_LANG_SAVE
974     AC_LANG_CPLUSPLUS
975     AC_TRY_RUN([
976 gbeauche 1.21 #define HAVE_MACH_EXCEPTIONS 1
977 gbeauche 1.1 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
978     #include "vm_alloc.cpp"
979     #include "sigsegv.cpp"
980 gbeauche 1.21 ], [
981     sigsegv_recovery=mach
982     ac_cv_have_mach_exceptions=yes
983     ],
984     ac_cv_have_mach_exceptions=no,
985 gbeauche 1.1 dnl When cross-compiling, do not assume anything.
986 gbeauche 1.21 ac_cv_have_mach_exceptions=no
987 gbeauche 1.1 )
988     AC_LANG_RESTORE
989     ]
990     )
991 gbeauche 1.21 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
992     [Define if your system supports Mach exceptions.])
993    
994 gbeauche 1.36 dnl Check if Windows exceptions are supported.
995     AC_CACHE_CHECK([whether your system supports Windows exceptions],
996     ac_cv_have_win32_exceptions, [
997     AC_LANG_SAVE
998     AC_LANG_CPLUSPLUS
999     AC_TRY_RUN([
1000     #define HAVE_WIN32_EXCEPTIONS 1
1001     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1002     #include "vm_alloc.cpp"
1003     #include "sigsegv.cpp"
1004     ], [
1005     sigsegv_recovery=win32
1006     ac_cv_have_win32_exceptions=yes
1007     ],
1008     ac_cv_have_win32_exceptions=no,
1009     dnl When cross-compiling, do not assume anything.
1010     ac_cv_have_win32_exceptions=no
1011     )
1012     AC_LANG_RESTORE
1013     ]
1014     )
1015     AC_TRANSLATE_DEFINE(HAVE_WIN32_EXCEPTIONS, "$ac_cv_have_win32_exceptions",
1016     [Define if your system supports Windows exceptions.])
1017    
1018 gbeauche 1.21 dnl Otherwise, check if extended signals are supported.
1019     if [[ -z "$sigsegv_recovery" ]]; then
1020     AC_CACHE_CHECK([whether your system supports extended signal handlers],
1021     ac_cv_have_extended_signals, [
1022     AC_LANG_SAVE
1023     AC_LANG_CPLUSPLUS
1024     AC_TRY_RUN([
1025     #define HAVE_SIGINFO_T 1
1026     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1027     #include "vm_alloc.cpp"
1028     #include "sigsegv.cpp"
1029     ], [
1030     sigsegv_recovery=siginfo
1031     ac_cv_have_extended_signals=yes
1032     ],
1033     ac_cv_have_extended_signals=no,
1034     dnl When cross-compiling, do not assume anything.
1035     ac_cv_have_extended_signals=no
1036     )
1037     AC_LANG_RESTORE
1038     ]
1039     )
1040     AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
1041     [Define if your system support extended signals.])
1042     fi
1043 gbeauche 1.1
1044     dnl Otherwise, check for subterfuges.
1045 gbeauche 1.21 if [[ -z "$sigsegv_recovery" ]]; then
1046 gbeauche 1.1 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
1047     ac_cv_have_sigcontext_hack, [
1048     AC_LANG_SAVE
1049     AC_LANG_CPLUSPLUS
1050     AC_TRY_RUN([
1051     #define HAVE_SIGCONTEXT_SUBTERFUGE 1
1052     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1053     #include "vm_alloc.cpp"
1054     #include "sigsegv.cpp"
1055 gbeauche 1.21 ], [
1056     sigsegv_recovery=sigcontext
1057     ac_cv_have_sigcontext_hack=yes
1058     ],
1059     ac_cv_have_sigcontext_hack=no,
1060 gbeauche 1.1 dnl When cross-compiling, do not assume anything.
1061     ac_cv_have_sigcontext_hack=no
1062     )
1063     AC_LANG_RESTORE
1064     ])
1065     AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
1066     [Define if we know a hack to replace siginfo_t->si_addr member.])
1067     fi
1068    
1069     dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
1070     AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
1071     ac_cv_have_skip_instruction, [
1072     AC_LANG_SAVE
1073     AC_LANG_CPLUSPLUS
1074     AC_TRY_RUN([
1075     #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
1076     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1077     #include "vm_alloc.cpp"
1078     #include "sigsegv.cpp"
1079     ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
1080     dnl When cross-compiling, do not assume anything.
1081     ac_cv_have_skip_instruction=no
1082     )
1083     AC_LANG_RESTORE
1084     ]
1085     )
1086     AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
1087     [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
1088    
1089     dnl Can we do Video on SEGV Signals ?
1090     CAN_VOSF=no
1091 gbeauche 1.21 if [[ -n "$sigsegv_recovery" ]]; then
1092 gbeauche 1.1 CAN_VOSF=yes
1093     fi
1094    
1095 gbeauche 1.23 dnl A dummy program that returns always true
1096 gbeauche 1.28 AC_PATH_PROG([BLESS], "true")
1097 gbeauche 1.23
1098 gbeauche 1.1 dnl Determine the addressing mode to use
1099     if [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
1100     ADDRESSING_MODE="real"
1101     else
1102     ADDRESSING_MODE=""
1103     AC_MSG_CHECKING([for the addressing mode to use])
1104     for am in $ADDRESSING_TEST_ORDER; do
1105     case $am in
1106     real)
1107     dnl Requires ability to mmap() Low Memory globals
1108 gbeauche 1.23 if [[ "x$ac_cv_can_map_lm$ac_cv_pagezero_hack" = "xnono" ]]; then
1109 gbeauche 1.1 continue
1110     fi
1111 gbeauche 1.23 dnl Requires VOSF screen updates
1112 gbeauche 1.1 if [[ "x$CAN_VOSF" = "xno" ]]; then
1113     continue
1114     fi
1115     dnl Real addressing will probably work.
1116     ADDRESSING_MODE="real"
1117     WANT_VOSF=yes dnl we can use VOSF and we need it actually
1118     DEFINES="$DEFINES -DREAL_ADDRESSING"
1119 gbeauche 1.23 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
1120     BLESS=Darwin/lowmem
1121     LDFLAGS="$LDFLAGS -pagezero_size 0x2000"
1122     fi
1123 gbeauche 1.1 break
1124     ;;
1125     direct)
1126     dnl Requires VOSF screen updates
1127     if [[ "x$CAN_VOSF" = "xyes" ]]; then
1128     ADDRESSING_MODE="direct"
1129     WANT_VOSF=yes dnl we can use VOSF and we need it actually
1130     DEFINES="$DEFINES -DDIRECT_ADDRESSING"
1131     break
1132     fi
1133     ;;
1134     banks)
1135     dnl Default addressing mode
1136     ADDRESSING_MODE="memory banks"
1137     break
1138     ;;
1139     *)
1140     AC_MSG_ERROR([Internal configure.in script error for $am addressing mode])
1141     esac
1142     done
1143     AC_MSG_RESULT($ADDRESSING_MODE)
1144     if [[ "x$ADDRESSING_MODE" = "x" ]]; then
1145     AC_MSG_WARN([Sorry, no suitable addressing mode in $ADDRESSING_TEST_ORDER])
1146     ADDRESSING_MODE="memory banks"
1147     fi
1148     fi
1149    
1150 gbeauche 1.5 dnl Banked Memory Addressing mode is not supported by the JIT compiler
1151     if [[ "x$WANT_JIT" = "xyes" -a "x$ADDRESSING_MODE" = "xmemory banks" ]]; then
1152     AC_MSG_ERROR([Sorry, the JIT Compiler requires Direct Addressing, at least])
1153     fi
1154    
1155 gbeauche 1.1 dnl Enable VOSF screen updates with this feature is requested and feasible
1156     if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
1157     AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
1158     else
1159     WANT_VOSF=no
1160     fi
1161    
1162     dnl Check for GAS.
1163     HAVE_GAS=no
1164     AC_MSG_CHECKING(for GAS .p2align feature)
1165     cat >conftest.S << EOF
1166     .text
1167     .p2align 5
1168     EOF
1169     if $CC conftest.S -c -o conftest.o >/dev/null 2>&1 ; then HAVE_GAS=yes; fi
1170     AC_MSG_RESULT($HAVE_GAS)
1171    
1172     dnl Check for GCC 2.7 or higher.
1173     HAVE_GCC27=no
1174     AC_MSG_CHECKING(for GCC 2.7 or higher)
1175 gbeauche 1.53 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5)
1176     # error gcc < 2.7
1177     #endif
1178     ]])],
1179     [AC_MSG_RESULT(yes); HAVE_GCC27=yes],
1180     [AC_MSG_RESULT(no)])
1181 gbeauche 1.1
1182     dnl Check for GCC 3.0 or higher.
1183     HAVE_GCC30=no
1184     AC_MSG_CHECKING(for GCC 3.0 or higher)
1185 gbeauche 1.53 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ >= 3)
1186     # error gcc < 3
1187     #endif
1188     ]])],
1189     [AC_MSG_RESULT(yes); HAVE_GCC30=yes],
1190     [AC_MSG_RESULT(no)])
1191 gbeauche 1.1
1192 gbeauche 1.39 dnl Check for ICC.
1193     AC_MSG_CHECKING(for ICC)
1194     HAVE_ICC=no
1195     if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
1196     HAVE_ICC=yes
1197     fi
1198     AC_MSG_RESULT($HAVE_ICC)
1199    
1200 gbeauche 1.1 dnl Set "-fomit-frame-pointer" on i386 GCC 2.7 or higher.
1201     dnl Also set "-fno-exceptions" for C++ because exception handling requires
1202     dnl the frame pointer.
1203     if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
1204     CFLAGS="$CFLAGS -fomit-frame-pointer"
1205     CXXFLAGS="$CXXFLAGS -fomit-frame-pointer -fno-exceptions"
1206     fi
1207    
1208     dnl (gb) Do not merge constants since it breaks fpu/fpu_x86.cpp.
1209     dnl As of 2001/08/02, this affects the following compilers:
1210     dnl Official: probably gcc-3.1 (mainline CVS)
1211     dnl Mandrake: gcc-2.96 >= 0.59mdk, gcc-3.0.1 >= 0.1mdk
1212     dnl Red Hat : gcc-2.96 >= 89, gcc-3.0 >= 1
1213 gbeauche 1.39 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1214 gbeauche 1.1 SAVED_CXXFLAGS="$CXXFLAGS"
1215     CXXFLAGS="$CXXFLAGS -fno-merge-constants"
1216     AC_CACHE_CHECK([whether GCC supports constants merging], ac_cv_gcc_constants_merging, [
1217     AC_LANG_SAVE
1218     AC_LANG_CPLUSPLUS
1219     AC_TRY_COMPILE([],[],[ac_cv_gcc_constants_merging=yes],[ac_cv_gcc_constants_merging=no])
1220     AC_LANG_RESTORE
1221     ])
1222     if [[ "x$ac_cv_gcc_constants_merging" != "xyes" ]]; then
1223     CXXFLAGS="$SAVED_CXXFLAGS"
1224     fi
1225     fi
1226    
1227 gbeauche 1.33 dnl Store motion was introduced in 3.3-hammer branch and any gcc >= 3.4
1228     dnl However, there are some corner cases exposed on x86-64
1229 gbeauche 1.39 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1230 gbeauche 1.33 SAVED_CXXFLAGS="$CXXFLAGS"
1231     CXXFLAGS="$CXXFLAGS -fno-gcse-sm"
1232     AC_CACHE_CHECK([whether GCC supports store motion], ac_cv_gcc_store_motion, [
1233     AC_LANG_SAVE
1234     AC_LANG_CPLUSPLUS
1235     AC_TRY_COMPILE([],[],[ac_cv_gcc_store_motion=yes],[ac_cv_gcc_store_motion=no])
1236     AC_LANG_RESTORE
1237     ])
1238     if [[ "x$ac_cv_gcc_store_motion" != "xyes" ]]; then
1239     CXXFLAGS="$SAVED_CXXFLAGS"
1240     fi
1241     fi
1242    
1243 gbeauche 1.39 dnl Add -fno-strict-aliasing for slirp sources
1244     if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1245 gbeauche 1.40 SAVED_CFLAGS="$CFLAGS"
1246 gbeauche 1.39 CFLAGS="$CFLAGS -fno-strict-aliasing"
1247     AC_CACHE_CHECK([whether the compiler supports -fno-strict-aliasing],
1248     ac_cv_gcc_no_strict_aliasing, [
1249     AC_TRY_COMPILE([],[],
1250 gbeauche 1.47 [ac_cv_gcc_no_strict_aliasing=yes; AC_SUBST(SLIRP_CFLAGS, "-fno-strict-aliasing")],
1251 gbeauche 1.39 [ac_cv_gcc_no_strict_aliasing=no])
1252     ])
1253     CFLAGS="$SAVED_CFLAGS"
1254     fi
1255    
1256 gbeauche 1.54 dnl Add -mdynamic-no-pic for MacOS X (XXX icc10 will support MacOS X)
1257     if [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1258 gbeauche 1.52 SAVED_CFLAGS="$CFLAGS"
1259     CFLAGS="$CFLAGS -mdynamic-no-pic"
1260     AC_CACHE_CHECK([whether the compiler supports -mdynamic-no-pic],
1261     ac_cv_gcc_mdynamic_no_pic, [
1262     AC_TRY_COMPILE([],[],[ac_cv_gcc_mdynamic_no_pic=yes],[ac_cv_gcc_mdynamic_no_pic=no])
1263     ])
1264     if [[ "x$ac_cv_gcc_mdynamic_no_pic" = "xyes" ]]; then
1265     CXXFLAGS="$CXXFLAGS -mdynamic-no-pic"
1266     else
1267     CFLAGS="$SAVED_CFLAGS"
1268     fi
1269     fi
1270    
1271 gbeauche 1.1 dnl Select appropriate CPU source and REGPARAM define.
1272     ASM_OPTIMIZATIONS=none
1273     CPUSRCS="cpuemu1.cpp cpuemu2.cpp cpuemu3.cpp cpuemu4.cpp cpuemu5.cpp cpuemu6.cpp cpuemu7.cpp cpuemu8.cpp"
1274 gbeauche 1.5
1275     dnl (gb) JITSRCS will be emptied later if the JIT is not available
1276     dnl Other platforms should define their own set of noflags file variants
1277     CAN_JIT=no
1278     JITSRCS="compemu1.cpp compemu2.cpp compemu3.cpp compemu4.cpp compemu5.cpp compemu6.cpp compemu7.cpp compemu8.cpp"
1279    
1280 gbeauche 1.11 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
1281 gbeauche 1.1 dnl i386 CPU
1282 gbeauche 1.7 DEFINES="$DEFINES -DUNALIGNED_PROFITABLE -DREGPARAM=\"__attribute__((regparm(3)))\""
1283 gbeauche 1.1 if [[ "x$HAVE_GAS" = "xyes" ]]; then
1284     ASM_OPTIMIZATIONS=i386
1285 gbeauche 1.7 DEFINES="$DEFINES -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE"
1286 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"
1287 gbeauche 1.11 CAN_JIT=yes
1288 gbeauche 1.13 fi
1289     elif [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_X86_64" = "xyes" ]]; then
1290     dnl x86-64 CPU
1291     DEFINES="$DEFINES -DUNALIGNED_PROFITABLE"
1292     if [[ "x$HAVE_GAS" = "xyes" ]]; then
1293     ASM_OPTIMIZATIONS="x86-64"
1294     DEFINES="$DEFINES -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS"
1295 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"
1296     CAN_JIT=yes
1297 gbeauche 1.34 WANT_33BIT_ADDRESSING=yes
1298 gbeauche 1.1 fi
1299     elif [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_SPARC" = "xyes" -a "x$HAVE_GAS" = "xyes" ]]; then
1300     dnl SPARC CPU
1301     case "$target_os" in
1302     solaris*)
1303     AC_MSG_CHECKING(SPARC CPU architecture)
1304     SPARC_TYPE=`Solaris/which_sparc`
1305     AC_MSG_RESULT($SPARC_TYPE)
1306     case "$SPARC_TYPE" in
1307     SPARC_V8)
1308     ASM_OPTIMIZATIONS="SPARC V8 architecture"
1309     DEFINES="$DEFINES -DSPARC_V8_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
1310     CFLAGS="$CFLAGS -Wa,-Av8"
1311     CXXFLAGS="$CXXFLAGS -Wa,-Av8"
1312     ;;
1313     SPARC_V9)
1314     ASM_OPTIMIZATIONS="SPARC V9 architecture"
1315     DEFINES="$DEFINES -DSPARC_V9_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
1316     CFLAGS="$CFLAGS -Wa,-Av9"
1317     CXXFLAGS="$CXXFLAGS -Wa,-Av9"
1318     ;;
1319     esac
1320     ;;
1321     esac
1322     elif [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
1323     dnl Native m68k, no emulation
1324     CPUINCLUDES="-I../native_cpu"
1325     CPUSRCS="asm_support.s"
1326     fi
1327    
1328 gbeauche 1.5 dnl Enable JIT compiler, if possible.
1329     if [[ "x$WANT_JIT" = "xyes" -a "x$CAN_JIT" ]]; then
1330     JITSRCS="$JITSRCS ../uae_cpu/compiler/compemu_support.cpp ../uae_cpu/compiler/compemu_fpp.cpp compstbl.o cpustbl_nf.o"
1331     DEFINES="$DEFINES -DUSE_JIT -DUSE_JIT_FPU"
1332    
1333     if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
1334     if [[ "x$WANT_MON" = "xyes" ]]; then
1335     DEFINES="$DEFINES -DJIT_DEBUG=1"
1336     else
1337     AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
1338     WANT_JIT_DEBUG=no
1339     fi
1340     fi
1341 gbeauche 1.8
1342     dnl IEEE core is the only FPU emulator to use with the JIT compiler
1343     case $FPE_CORE_TEST_ORDER in
1344     ieee*) ;;
1345     *) AC_MSG_WARN([Forcing use of the IEEE FPU core, as the JIT compiler supports only this one.]) ;;
1346     esac
1347     FPE_CORE_TEST_ORDER="ieee"
1348 gbeauche 1.5 else
1349     WANT_JIT=no
1350     WANT_JIT_DEBUG=no
1351     JITSRCS=""
1352     fi
1353    
1354 gbeauche 1.34 dnl Use 33-bit memory addressing?
1355     if [[ "$ac_cv_have_33bit_addressing:$WANT_33BIT_ADDRESSING" = "yes:yes" ]]; then
1356     use_33bit_addressing=yes
1357     fi
1358     AC_TRANSLATE_DEFINE(USE_33BIT_ADDRESSING, "$use_33bit_addressing",
1359     [Define to use 33-bit memory addressing on 64-bit JIT capable systems.])
1360    
1361 gbeauche 1.1 dnl Utility macro used by next two tests.
1362     dnl AC_EXAMINE_OBJECT(C source code,
1363     dnl commands examining object file,
1364     dnl [commands to run if compile failed]):
1365     dnl
1366     dnl Compile the source code to an object file; then convert it into a
1367     dnl printable representation. All unprintable characters and
1368     dnl asterisks (*) are replaced by dots (.). All white space is
1369     dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
1370     dnl output, but runs of newlines are compressed to a single newline.
1371     dnl Finally, line breaks are forcibly inserted so that no line is
1372     dnl longer than 80 columns and the file ends with a newline. The
1373     dnl result of all this processing is in the file conftest.dmp, which
1374     dnl may be examined by the commands in the second argument.
1375     dnl
1376     AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
1377     [AC_LANG_SAVE
1378     AC_LANG_C
1379     dnl Next bit cribbed from AC_TRY_COMPILE.
1380     cat > conftest.$ac_ext <<EOF
1381     [#line __oline__ "configure"
1382     #include "confdefs.h"
1383     $1
1384     ]EOF
1385     if AC_TRY_EVAL(ac_compile); then
1386     od -c conftest.o |
1387     sed ['s/^[0-7]*[ ]*/ /
1388     s/\*/./g
1389     s/ \\n/*/g
1390     s/ [0-9][0-9][0-9]/./g
1391     s/ \\[^ ]/./g'] |
1392     tr -d '
1393     ' | tr -s '*' '
1394     ' | fold | sed '$a\
1395     ' > conftest.dmp
1396     $2
1397     ifelse($3, , , else
1398     $3
1399     )dnl
1400     fi
1401     rm -rf conftest*
1402     AC_LANG_RESTORE])
1403    
1404     dnl Floating point format probe.
1405     dnl The basic concept is the same as the above: grep the object
1406     dnl file for an interesting string. We have to watch out for
1407     dnl rounding changing the values in the object, however; this is
1408     dnl handled by ignoring the least significant byte of the float.
1409     dnl
1410     dnl Does not know about VAX G-float or C4x idiosyncratic format.
1411     dnl It does know about PDP-10 idiosyncratic format, but this is
1412     dnl not presently supported by GCC. S/390 "binary floating point"
1413     dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
1414     dnl as ASCII?)
1415     dnl
1416     AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
1417     [AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
1418     [gcc_AC_EXAMINE_OBJECT(
1419     [/* This will not work unless sizeof(double) == 8. */
1420     extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
1421    
1422     /* This structure must have no internal padding. */
1423     struct possibility {
1424     char prefix[8];
1425     double candidate;
1426     char postfix[8];
1427     };
1428    
1429     #define C(cand) { "\nformat:", cand, ":tamrof\n" }
1430     struct possibility table [] =
1431     {
1432     C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
1433     C( 3.53802595280598432000e+18), /* D__float - VAX */
1434     C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
1435     C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
1436     C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
1437     };],
1438     [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1439     ac_cv_c_float_format='IEEE (big-endian)'
1440     elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
1441     ac_cv_c_float_format='IEEE (big-endian)'
1442     elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
1443     ac_cv_c_float_format='IEEE (little-endian)'
1444     elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
1445     ac_cv_c_float_format='IEEE (little-endian)'
1446     elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
1447     ac_cv_c_float_format='VAX D-float'
1448     elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
1449     ac_cv_c_float_format='PDP-10'
1450     elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1451     ac_cv_c_float_format='IBM 370 hex'
1452     else
1453     AC_MSG_ERROR(Unknown floating point format)
1454     fi],
1455     [AC_MSG_ERROR(compile failed)])
1456     ])
1457     # IEEE is the default format. If the float endianness isn't the same
1458     # as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
1459     # (which is a tristate: yes, no, default). This is only an issue with
1460     # IEEE; the other formats are only supported by a few machines each,
1461     # all with the same endianness.
1462     format=IEEE_FLOAT_FORMAT
1463     fbigend=
1464     case $ac_cv_c_float_format in
1465     'IEEE (big-endian)' )
1466     if test $ac_cv_c_bigendian = no; then
1467     fbigend=1
1468     fi
1469     ;;
1470     'IEEE (little-endian)' )
1471     if test $ac_cv_c_bigendian = yes; then
1472     fbigend=0
1473     fi
1474     ;;
1475     'VAX D-float' )
1476     format=VAX_FLOAT_FORMAT
1477     ;;
1478     'PDP-10' )
1479     format=PDP10_FLOAT_FORMAT
1480     ;;
1481     'IBM 370 hex' )
1482     format=IBM_FLOAT_FORMAT
1483     ;;
1484     esac
1485     AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
1486     [Define to the floating point format of the host machine.])
1487     if test -n "$fbigend"; then
1488     AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
1489     [Define to 1 if the host machine stores floating point numbers in
1490     memory with the word containing the sign bit at the lowest address,
1491     or to 0 if it does it the other way around.
1492    
1493     This macro should not be defined if the ordering is the same as for
1494     multi-word integers.])
1495     fi
1496     ])
1497    
1498     dnl Select appropriate FPU source.
1499     gcc_AC_C_FLOAT_FORMAT
1500     AC_CHECK_HEADERS(ieee754.h ieeefp.h floatingpoint.h nan.h)
1501    
1502     for fpe in $FPE_CORE_TEST_ORDER; do
1503     case $fpe in
1504     ieee)
1505 gbeauche 1.2 case $ac_cv_c_float_format in
1506     IEEE*)
1507 gbeauche 1.1 FPE_CORE="IEEE fpu core"
1508     DEFINES="$DEFINES -DFPU_IEEE"
1509     FPUSRCS="../uae_cpu/fpu/fpu_ieee.cpp"
1510 gbeauche 1.4 dnl Math functions not mandated by C99 standard
1511     AC_CHECK_FUNCS(isnanl isinfl)
1512     dnl Math functions required by C99 standard, but probably not
1513     dnl implemented everywhere. In that case, we fall back to the
1514     dnl regular variant for doubles.
1515     AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
1516     AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
1517     AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
1518     AC_CHECK_FUNCS(floorl ceill)
1519 gbeauche 1.1 break
1520 gbeauche 1.2 ;;
1521     esac
1522 gbeauche 1.1 ;;
1523     x86)
1524     if [[ ":$HAVE_GCC27:$HAVE_I386:$HAVE_GAS:" = ":yes:yes:yes:" ]]; then
1525     FPE_CORE="i387 fpu core"
1526     DEFINES="$DEFINES -DFPU_X86"
1527     FPUSRCS="../uae_cpu/fpu/fpu_x86.cpp"
1528     break
1529     fi
1530     ;;
1531     uae)
1532     FPE_CORE="uae fpu core"
1533     DEFINES="$DEFINES -DFPU_UAE"
1534     FPUSRCS="../uae_cpu/fpu/fpu_uae.cpp"
1535     break
1536     ;;
1537     *)
1538     AC_MSG_ERROR([Internal configure.in script error for $fpe fpu core])
1539     ;;
1540     esac
1541     done
1542     if [[ "x$FPE_CORE" = "x" ]]; then
1543     AC_MSG_ERROR([Sorry, no suitable FPU core found in $FPE_CORE_TEST_ORDER])
1544     fi
1545    
1546     dnl Check for certain math functions
1547     AC_CHECK_FUNCS(atanh)
1548 gbeauche 1.4 AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
1549 gbeauche 1.1
1550     dnl UAE CPU sources for all non-m68k-native architectures.
1551     if [[ "x$WANT_NATIVE_M68K" = "xno" ]]; then
1552     CPUINCLUDES="-I../uae_cpu"
1553 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"
1554 gbeauche 1.1 fi
1555    
1556     dnl Remove the "-g" option if set for GCC.
1557     if [[ "x$HAVE_GCC27" = "xyes" ]]; then
1558 gbeauche 1.33 CFLAGS=`echo $CFLAGS | sed -e 's/-g\b//g'`
1559     CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g\b//g'`
1560 gbeauche 1.1 fi
1561    
1562 gbeauche 1.14 dnl Or if we have -IPA (MIPSPro compilers)
1563     if [[ "x$HAVE_IPA" = "xyes" ]]; then
1564     CFLAGS="`echo $CFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1565     CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1566 gbeauche 1.1 CXXFLAGS="-LANG:std $CXXFLAGS"
1567 gbeauche 1.14 LDFLAGS="$LDFLAGS -O3 -OPT:Olimit=0 -IPA"
1568 gbeauche 1.1 fi
1569    
1570     dnl Generate Makefile.
1571     AC_SUBST(DEFINES)
1572     AC_SUBST(SYSSRCS)
1573     AC_SUBST(CPUINCLUDES)
1574     AC_SUBST(CPUSRCS)
1575 gbeauche 1.23 AC_SUBST(BLESS)
1576 gbeauche 1.29 AC_SUBST(KEYCODES)
1577 cebix 1.16 AC_CONFIG_FILES([Makefile])
1578     AC_OUTPUT
1579 gbeauche 1.1
1580     dnl Print summary.
1581     echo
1582     echo Basilisk II configuration summary:
1583     echo
1584 gbeauche 1.26 echo SDL support ............................ : $SDL_SUPPORT
1585 gbeauche 1.1 echo XFree86 DGA support .................... : $WANT_XF86_DGA
1586     echo XFree86 VidMode support ................ : $WANT_XF86_VIDMODE
1587     echo fbdev DGA support ...................... : $WANT_FBDEV_DGA
1588     echo Enable video on SEGV signals ........... : $WANT_VOSF
1589     echo ESD sound support ...................... : $WANT_ESD
1590     echo GTK user interface ..................... : $WANT_GTK
1591     echo mon debugger support ................... : $WANT_MON
1592     echo Running m68k code natively ............. : $WANT_NATIVE_M68K
1593 gbeauche 1.5 echo Use JIT compiler ....................... : $WANT_JIT
1594     echo JIT debug mode ......................... : $WANT_JIT_DEBUG
1595 gbeauche 1.1 echo Floating-Point emulation core .......... : $FPE_CORE
1596     echo Assembly optimizations ................. : $ASM_OPTIMIZATIONS
1597     echo Addressing mode ........................ : $ADDRESSING_MODE
1598 gbeauche 1.21 echo Bad memory access recovery type ........ : $sigsegv_recovery
1599 gbeauche 1.1 echo
1600     echo "Configuration done. Now type \"make\" (or \"gmake\")."