ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.76
Committed: 2010-03-07T00:45:10Z (14 years, 8 months ago) by asvitkine
Branch: MAIN
Changes since 1.75: +5 -5 lines
Log Message:
[Amadeusz Slawinski]
These patches fix the issues with using newer versions of autoconf,
which led to generating broken configure script.

File Contents

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