ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/configure.ac
Revision: 1.28
Committed: 2005-06-22T16:38:15Z (18 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.27: +0 -1 lines
Log Message:
Rework sheepshaver_cpu object allocation and get rid of POSIX'ish functions.

File Contents

# Content
1 dnl Process this file with autoconf to produce a configure script.
2 dnl Written in 2002 by Christian Bauer
3
4 AC_INIT([SheepShaver], 2.2, [Christian.Bauer@uni-mainz.de], SheepShaver)
5 AC_CONFIG_SRCDIR(main_unix.cpp)
6 AC_PREREQ(2.52)
7 AC_CONFIG_HEADER(config.h)
8
9 dnl Canonical system information.
10 AC_CANONICAL_HOST
11 AC_CANONICAL_TARGET
12
13 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 dnl Options.
18 AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes])
19 AC_ARG_ENABLE(ppc-emulator, [ --enable-ppc-emulator use the selected PowerPC emulator [default=auto]], [WANT_EMULATED_PPC=$enableval], [WANT_EMULATED_PPC=auto])
20 AC_ARG_ENABLE(fbdev-dga, [ --enable-fbdev-dga use direct frame buffer access via /dev/fb0 [default=yes]], [WANT_FBDEV_DGA=$enableval], [WANT_FBDEV_DGA=yes])
21 AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes])
22 AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes])
23 AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes])
24 AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes])
25 AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]],
26 [case "$withval" in
27 gtk1) WANT_GTK="gtk";;
28 gtk|gtk2) WANT_GTK="$withval";;
29 yes) WANT_GTK="gtk2 gtk";;
30 *) WANT_GTK="no";;
31 esac],
32 [WANT_GTK="gtk2 gtk"])
33 AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
34 AC_ARG_WITH(dgcc, [ --with-dgcc=COMPILER use C++ COMPILER to compile synthetic opcodes], [DYNGEN_CC=$withval])
35
36 dnl Addressing mode
37 AC_ARG_ENABLE(addressing,
38 [ --enable-addressing=AM set the addressing mode to use [default=real]],
39 [case "$enableval" in
40 real) WANT_ADDRESSING_MODE="real";;
41 direct) WANT_ADDRESSING_MODE="direct";;
42 direct,0x*) WANT_ADDRESSING_MODE="direct"; NATMEM_OFFSET=`echo "$enableval" | sed -n '/direct,\(0[[xX]][[0-9A-Fa-f]]*\([[UuLl]]\{1,2\}\)\?\)$/s//\1/p'`;;
43 esac],
44 [WANT_ADDRESSING_MODE="real"]
45 )
46
47 dnl SDL options.
48 AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no])
49 AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphics [default=no]], [WANT_SDL_VIDEO=$enableval], [WANT_SDL_VIDEO=no])
50 AC_ARG_ENABLE(sdl-audio, [ --enable-sdl-audio use SDL for audio [default=no]], [WANT_SDL_AUDIO=$enableval], [WANT_SDL_AUDIO=no])
51
52 dnl Checks for programs.
53 AC_PROG_CC
54 AC_PROG_CPP
55 AC_PROG_CXX
56 AC_PROG_MAKE_SET
57 AC_PROG_INSTALL
58 AC_PROG_EGREP
59 AC_PATH_PROGS(FILE, [file false])
60 AC_PATH_PROG(PERL, [perl])
61
62 dnl Check for PowerPC target CPU.
63 HAVE_PPC=no
64 AC_MSG_CHECKING(for PowerPC target CPU)
65 AC_EGREP_CPP(yes,
66 [
67 #ifdef __powerpc__
68 yes
69 #endif
70 #ifdef __ppc__
71 yes
72 #endif
73 ], [AC_MSG_RESULT(yes); HAVE_PPC=yes], AC_MSG_RESULT(no))
74
75 dnl We use native CPU if possible.
76 EMULATED_PPC=yes
77 case $WANT_EMULATED_PPC in
78 auto) [[ "x$HAVE_PPC" = "xyes" ]] && EMULATED_PPC=no;;
79 no) EMULATED_PPC=no;;
80 esac
81 if [[ "x$EMULATED_PPC" = "xyes" ]]; then
82 AC_DEFINE(EMULATED_PPC, 1, [Define if using a PowerPC CPU emulator.])
83 fi
84
85 dnl We use mon if possible.
86 MONSRCS=
87 case "x$WANT_MON" in
88 x/* | x.*)
89 mon_srcdir=$WANT_MON
90 WANT_MON=yes
91 ;;
92 xyes)
93 mon_srcdir=../../../mon/src
94 ;;
95 esac
96 if [[ "x$WANT_MON" = "xyes" ]]; then
97 AC_MSG_CHECKING(for mon)
98 if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
99 AC_MSG_RESULT(yes)
100 AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
101 MONSRCS="$mon_srcdir/mon.cpp $mon_srcdir/mon_6502.cpp $mon_srcdir/mon_z80.cpp $mon_srcdir/mon_cmd.cpp $mon_srcdir/mon_lowmem.cpp $mon_srcdir/mon_disass.cpp $mon_srcdir/mon_ppc.cpp $mon_srcdir/disass/floatformat.c $mon_srcdir/disass/i386-dis.c $mon_srcdir/disass/m68k-dis.c $mon_srcdir/disass/m68k-opc.c"
102 CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
103 AC_CHECK_LIB(ncurses, tgetent, ,
104 AC_CHECK_LIB(termcap, tgetent, ,
105 AC_CHECK_LIB(termlib, tgetent, ,
106 AC_CHECK_LIB(terminfo, tgetent, ,
107 AC_CHECK_LIB(Hcurses, tgetent, ,
108 AC_CHECK_LIB(curses, tgetent))))))
109 AC_CHECK_LIB(readline, readline)
110 AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
111 else
112 AC_MSG_RESULT(no)
113 AC_MSG_WARN([Could not find mon, ignoring --with-mon.])
114 WANT_MON=no
115 fi
116 fi
117 AC_SUBST(MONSRCS)
118
119 dnl Checks for libraries.
120 AC_CHECK_LIB(posix4, sem_init)
121
122 dnl Do we need SDL?
123 WANT_SDL=no
124 if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
125 WANT_SDL=yes
126 WANT_XF86_DGA=no
127 WANT_XF86_VIDMODE=no
128 WANT_FBDEV_DGA=no
129 SDL_SUPPORT="$SDL_SUPPORT video"
130 fi
131 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
132 WANT_SDL=yes
133 SDL_SUPPORT="$SDL_SUPPORT audio"
134 fi
135 if [[ "x$WANT_SDL" = "xyes" ]]; then
136 AC_PATH_PROG(sdl_config, "sdl-config")
137 if [[ -n "$sdl_config" ]]; then
138 case $target_os in
139 # Special treatment for Cygwin so that we can still use the POSIX layer
140 *cygwin*)
141 sdl_cflags="-I`$sdl_config --prefix`/include/SDL"
142 sdl_libs="-L`$sdl_config --exec-prefix`/lib -lSDL"
143 ;;
144 *)
145 sdl_cflags=`$sdl_config --cflags`
146 if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then
147 sdl_libs=`$sdl_config --static-libs`
148 else
149 sdl_libs=`$sdl_config --libs`
150 fi
151 ;;
152 esac
153 CFLAGS="$CFLAGS $sdl_cflags"
154 CXXFLAGS="$CXXFLAGS $sdl_cflags"
155 LIBS="$LIBS $sdl_libs"
156 else
157 WANT_SDL=no
158 WANT_SDL_VIDEO=no
159 WANT_SDL_AUDIO=no
160 fi
161 SDL_SUPPORT=`echo "$SDL_SUPPORT" | sed -e "s/^ //"`
162 else
163 SDL_SUPPORT="none"
164 fi
165
166 dnl We need X11, if not using SDL.
167 if [[ "x$WANT_SDL_VIDEO" != "xyes" ]]; then
168 AC_PATH_XTRA
169 if [[ "x$no_x" = "xyes" ]]; then
170 AC_MSG_ERROR([You need X11 to run SheepShaver.])
171 fi
172 CFLAGS="$CFLAGS $X_CFLAGS"
173 CXXFLAGS="$CXXFLAGS $X_CFLAGS"
174 LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
175 fi
176
177 dnl We need pthreads on non-PowerPC systems. Try libpthread first, then libc_r (FreeBSD), then PTL.
178 HAVE_PTHREADS=yes
179 case $EMULATED_PPC:$target_os in
180 no:linux*|no:netbsd*)
181 dnl We do have our own pthread_cancel() implementation
182 AC_DEFINE(HAVE_PTHREAD_CANCEL, 1, [Define if you have the pthread_cancel function.])
183 ;;
184 *:*)
185 AC_CHECK_LIB(pthread, pthread_create, , [
186 AC_CHECK_LIB(c_r, pthread_create, , [
187 AC_CHECK_LIB(PTL, pthread_create, , [
188 AC_MSG_ERROR([You need pthreads to run Basilisk II.])
189 ])
190 ])
191 ])
192 AC_CHECK_FUNCS(pthread_cancel)
193 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
194 AC_CHECK_FUNCS(pthread_mutexattr_settype)
195 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
196 if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
197 AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
198 fi
199 dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
200 SEMSRC=
201 AC_CHECK_FUNCS(sem_init, , [
202 if test "x$HAVE_PTHREADS" = "xyes"; then
203 SEMSRC=posix_sem.cpp
204 fi
205 ])
206 ;;
207 esac
208
209 dnl We use FBDev DGA if possible.
210 if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
211 AC_CHECK_HEADER(linux/fb.h, [
212 AC_DEFINE(ENABLE_FBDEV_DGA, 1, [Define if using Linux fbdev extension.])
213 ], [
214 AC_MSG_WARN([Could not find Linux FBDev extension, ignoring --enable-fbdev-dga.])
215 WANT_FBDEV_DGA=no
216 ])
217 fi
218
219 dnl We use XFree86 DGA if possible.
220 if [[ "x$WANT_XF86_DGA" = "xyes" ]]; then
221 AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, [
222 AC_DEFINE(ENABLE_XF86_DGA, 1, [Define if using XFree86 DGA extension.])
223 LIBS="$LIBS -lXxf86dga"
224 ], [
225 AC_MSG_WARN([Could not find XFree86 DGA extension, ignoring --enable-xf86-dga.])
226 WANT_XF86_DGA=no
227 ])
228 fi
229
230 dnl We use XFree86 VidMode if possible.
231 if [[ "x$WANT_XF86_VIDMODE" = "xyes" ]]; then
232 AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, [
233 AC_DEFINE(ENABLE_XF86_VIDMODE, 1, [Define if using XFree86 DGA extension.])
234 LIBS="$LIBS -lXxf86vm"
235 ], [
236 AC_MSG_WARN([Could not find XFree86 VidMode extension, ignoring --enable-xf86-vidmode.])
237 WANT_XF86_VIDMODE=no
238 ])
239 fi
240
241 dnl We use GTK+ if possible.
242 UISRCS=../dummy/prefs_editor_dummy.cpp
243 case "x$WANT_GTK" in
244 xgtk2*)
245 AM_PATH_GTK_2_0(1.3.15, [
246 AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
247 CFLAGS="$CFLAGS $GTK_CFLAGS"
248 CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
249 LIBS="$LIBS $GTK_LIBS"
250 UISRCS=prefs_editor_gtk.cpp
251 WANT_GTK=gtk2
252 ], [
253 case "x${WANT_GTK}x" in
254 *gtkx)
255 AC_MSG_WARN([Could not find GTK+ 2.0, trying with GTK+ 1.2.])
256 WANT_GTK=gtk
257 ;;
258 *)
259 AC_MSG_WARN([Could not find GTK+, disabling user interface.])
260 WANT_GTK=no
261 ;;
262 esac
263 ])
264 ;;
265 esac
266 if [[ "x$WANT_GTK" = "xgtk" ]]; then
267 AM_PATH_GTK(1.2.0, [
268 AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
269 CFLAGS="$CFLAGS $GTK_CFLAGS"
270 CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
271 LIBS="$LIBS $GTK_LIBS"
272 UISRCS=prefs_editor_gtk.cpp
273 ], [
274 AC_MSG_WARN([Could not find GTK+, disabling user interface.])
275 WANT_GTK=no
276 ])
277 fi
278
279 dnl We use ESD if possible.
280 if [[ "x$WANT_ESD" = "xyes" ]]; then
281 AM_PATH_ESD(0.2.8, [
282 AC_DEFINE(ENABLE_ESD, 1, [Define is using ESD.])
283 CFLAGS="$CFLAGS $ESD_CFLAGS"
284 CXXFLAGS="$CXXFLAGS $ESD_CFLAGS"
285 LIBS="$LIBS $ESD_LIBS"
286 ], [
287 AC_MSG_WARN([Could not find ESD, disabling ESD support.])
288 WANT_ESD=no
289 ])
290 fi
291
292 dnl We use 64-bit file size support if possible.
293 AC_SYS_LARGEFILE
294
295 dnl Checks for header files.
296 AC_HEADER_STDC
297 AC_HEADER_SYS_WAIT
298 AC_CHECK_HEADERS(malloc.h)
299 AC_CHECK_HEADERS(mach/vm_map.h mach/mach_init.h sys/mman.h)
300 AC_CHECK_HEADERS(sys/time.h sys/times.h sys/socket.h)
301 AC_CHECK_HEADERS(unistd.h fcntl.h byteswap.h dirent.h)
302 AC_CHECK_HEADERS(linux/if.h, [], [], [
303 #if HAVE_SYS_SOCKET_H
304 # include <sys/socket.h>
305 #endif
306 ])
307 AC_CHECK_HEADERS(linux/if_tun.h net/if.h net/if_tun.h)
308 AC_CHECK_HEADERS(fenv.h)
309
310 dnl Checks for typedefs, structures, and compiler characteristics.
311 AC_C_BIGENDIAN
312 AC_C_CONST
313 AC_C_INLINE
314 AC_CHECK_SIZEOF(short, 2)
315 AC_CHECK_SIZEOF(int, 4)
316 AC_CHECK_SIZEOF(long, 4)
317 AC_CHECK_SIZEOF(long long, 8)
318 AC_CHECK_SIZEOF(float, 4)
319 AC_CHECK_SIZEOF(double, 8)
320 AC_CHECK_SIZEOF(void *, 4)
321 AC_TYPE_OFF_T
322 AC_CHECK_TYPE(loff_t, off_t)
323 AC_TYPE_SIZE_T
324 AC_TYPE_SIGNAL
325 AC_HEADER_TIME
326 AC_STRUCT_TM
327
328 dnl Check whether struct sigaction has sa_restorer member.
329 AC_CACHE_CHECK([whether struct sigaction has sa_restorer],
330 ac_cv_signal_sa_restorer, [
331 AC_TRY_COMPILE([
332 #include <signal.h>
333 ], [struct sigaction sa; sa.sa_restorer = 0;],
334 ac_cv_signal_sa_restorer=yes, ac_cv_signal_sa_restorer=no,
335 dnl When cross-compiling, do not assume anything.
336 ac_cv_signal_sa_restorer=no
337 )
338 ])
339 if [[ "x$ac_cv_signal_sa_restorer" = "xyes" ]]; then
340 AC_DEFINE(HAVE_SIGNAL_SA_RESTORER, 1, [Define if sa_restorer is available in struct sigaction.])
341 fi
342
343 dnl Checks for library functions.
344 AC_CHECK_FUNCS(strdup strlcpy cfmakeraw)
345 AC_CHECK_FUNCS(nanosleep)
346 AC_CHECK_FUNCS(sigaction signal)
347 AC_CHECK_FUNCS(mmap mprotect munmap)
348 AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
349 AC_CHECK_FUNCS(exp2f log2f exp2 log2)
350 AC_CHECK_FUNCS(floorf roundf ceilf truncf floor round ceil trunc)
351
352 dnl Darwin seems to define mach_task_self() instead of task_self().
353 AC_CHECK_FUNCS(mach_task_self task_self)
354
355 dnl We need clock_gettime() for better performance but it may drag
356 dnl libpthread in, which we don't want for native ppc mode
357 case $EMULATED_PPC:$target_os in
358 no:linux*)
359 ;;
360 *:*)
361 AC_SEARCH_LIBS(clock_gettime, [rt posix4])
362 AC_CHECK_FUNCS(clock_gettime clock_nanosleep)
363 ;;
364 esac
365
366 dnl Check for headers and functions related to pty support (sshpty.c)
367 dnl From openssh-3.2.2p1 configure.ac
368 AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
369 AC_CHECK_FUNCS(_getpty vhangup strlcpy)
370
371 case "$host" in
372 *-*-hpux10.26)
373 disable_ptmx_check=yes
374 ;;
375 *-*-linux*)
376 no_dev_ptmx=1
377 ;;
378 mips-sony-bsd|mips-sony-newsos4)
379 AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).])
380 ;;
381 *-*-sco3.2v4*)
382 no_dev_ptmx=1
383 ;;
384 *-*-sco3.2v5*)
385 no_dev_ptmx=1
386 ;;
387 *-*-cygwin*)
388 no_dev_ptmx=1
389 ;;
390 esac
391
392 if test -z "$no_dev_ptmx" ; then
393 if test "x$disable_ptmx_check" != "xyes" ; then
394 AC_CHECK_FILE([/dev/ptmx],
395 [
396 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
397 have_dev_ptmx=1
398 ]
399 )
400 fi
401 fi
402 AC_CHECK_FILE([/dev/ptc],
403 [
404 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
405 have_dev_ptc=1
406 ]
407 )
408 dnl (end of code from openssh-3.2.2p1 configure.ac)
409
410 dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
411 AC_DEFUN(AC_CHECK_FRAMEWORK, [
412 AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
413 AC_CACHE_CHECK([whether compiler supports framework $1],
414 ac_Framework, [
415 saved_LIBS="$LIBS"
416 LIBS="$LIBS -framework $1"
417 AC_TRY_LINK(
418 [$2], [int main(void) { return 0; }],
419 [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
420 )
421 ])
422 AS_IF([test AS_VAR_GET(ac_Framework) = yes],
423 [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
424 )
425 AS_VAR_POPDEF([ac_Framework])dnl
426 ])
427
428 dnl Check for some MacOS X frameworks
429 AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
430 AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
431
432 dnl Select system-dependant sources.
433 SERIALSRC=serial_unix.cpp
434 ETHERSRC=../dummy/ether_dummy.cpp
435 SCSISRC=../dummy/scsi_dummy.cpp
436 AUDIOSRC=../dummy/audio_dummy.cpp
437 EXTFSSRC=extfs_unix.cpp
438 EXTRASYSSRCS=
439 case "$target_os" in
440 linux*)
441 ETHERSRC=Linux/ether_linux.cpp
442 AUDIOSRC=audio_oss_esd.cpp
443 SCSISRC=Linux/scsi_linux.cpp
444 if [[ "x$EMULATED_PPC" = "xno" ]]; then
445 EXTRASYSSRCS="Linux/paranoia.cpp Linux/sheepthreads.c ppc_asm.S"
446 fi
447 ;;
448 netbsd*)
449 if [[ "x$EMULATED_PPC" = "xno" ]]; then
450 EXTRASYSSRCS="NetBSD/paranoia.cpp NetBSD/sheepthreads.c ppc_asm.S"
451 fi
452 ;;
453 darwin*)
454 if [[ "x$EMULATED_PPC" = "xno" ]]; then
455 EXTRASYSSRCS="Darwin/paranoia.cpp ppc_asm.S"
456 fi
457 if [[ "x$ac_cv_framework_IOKit" = "xyes" ]]; then
458 EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/sys_darwin.cpp"
459 fi
460 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
461 EXTFSSRC=../MacOSX/extfs_macosx.mm
462 fi
463 ;;
464 cygwin*)
465 SERIALSRC="../dummy/serial_dummy.cpp"
466 ;;
467 esac
468
469 dnl SDL overrides
470 if [[ "x$WANT_SDL" = "xyes" ]]; then
471 AC_DEFINE(USE_SDL, 1, [Define to enble SDL support.])
472 fi
473 if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
474 AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support.])
475 VIDEOSRCS="../SDL/video_sdl.cpp"
476 KEYCODES="../SDL/keycodes"
477 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
478 EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp"
479 else
480 case "$target_os" in
481 cygwin*)
482 EXTRASYSSRCS="$EXTRASYSSRCS ../Windows/clip_windows.cpp"
483 ;;
484 *)
485 EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp"
486 ;;
487 esac
488 fi
489 else
490 VIDEOSRCS="video_x.cpp"
491 KEYCODES="keycodes"
492 EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp"
493 fi
494 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
495 AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
496 AUDIOSRC="../SDL/audio_sdl.cpp"
497 fi
498
499 SYSSRCS="$VIDEOSRCS $EXTFSSRC $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $EXTRASYSSRCS"
500
501 dnl Define a macro that translates a yesno-variable into a C macro definition
502 dnl to be put into the config.h file
503 dnl $1 -- the macro to define
504 dnl $2 -- the value to translate
505 dnl $3 -- template name
506 AC_DEFUN(AC_TRANSLATE_DEFINE, [
507 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
508 AC_DEFINE($1, 1, $3)
509 fi
510 ])
511
512 dnl Check that the host supports TUN/TAP devices
513 AC_CACHE_CHECK([whether TUN/TAP is supported],
514 ac_cv_tun_tap_support, [
515 AC_TRY_COMPILE([
516 #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
517 #include <linux/if.h>
518 #include <linux/if_tun.h>
519 #endif
520 #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
521 #include <net/if.h>
522 #include <net/if_tun.h>
523 #endif
524 ], [
525 struct ifreq ifr;
526 memset(&ifr, 0, sizeof(ifr));
527 ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
528 ],
529 ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
530 )
531 ])
532 AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
533 [Define if your system supports TUN/TAP devices.])
534
535 dnl Various checks if the system supports vm_allocate() and the like functions.
536 have_mach_vm=no
537 if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
538 "x$ac_cv_func_vm_protect" = "xyes" ]]; then
539 have_mach_vm=yes
540 fi
541 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
542 [Define if your system has a working vm_allocate()-based memory allocator.])
543
544 dnl Check that vm_allocate(), vm_protect() work
545 if [[ "x$have_mach_vm" = "xyes" ]]; then
546
547 AC_CACHE_CHECK([whether vm_protect works],
548 ac_cv_vm_protect_works, [
549 AC_LANG_SAVE
550 AC_LANG_CPLUSPLUS
551 ac_cv_vm_protect_works=yes
552 dnl First the tests that should segfault
553 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
554 AC_TRY_RUN([
555 #define CONFIGURE_TEST_VM_MAP
556 #define TEST_VM_PROT_$test_def
557 #include "vm_alloc.cpp"
558 ], ac_cv_vm_protect_works=no, rm -f core,
559 dnl When cross-compiling, do not assume anything
560 ac_cv_vm_protect_works="guessing no"
561 )
562 done
563 AC_TRY_RUN([
564 #define CONFIGURE_TEST_VM_MAP
565 #define TEST_VM_PROT_RDWR_WRITE
566 #include "vm_alloc.cpp"
567 ], , ac_cv_vm_protect_works=no,
568 dnl When cross-compiling, do not assume anything
569 ac_cv_vm_protect_works="guessing no"
570 )
571 AC_LANG_RESTORE
572 ]
573 )
574
575 dnl Remove support for vm_allocate() if vm_protect() does not work
576 if [[ "x$have_mach_vm" = "xyes" ]]; then
577 case $ac_cv_vm_protect_works in
578 *yes) have_mach_vm=yes;;
579 *no) have_mach_vm=no;;
580 esac
581 fi
582 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
583 [Define if your system has a working vm_allocate()-based memory allocator.])
584
585 fi dnl HAVE_MACH_VM
586
587 dnl Various checks if the system supports mmap() and the like functions.
588 dnl ... and Mach memory allocators are not supported
589 have_mmap_vm=no
590 if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
591 "x$ac_cv_func_mprotect" = "xyes" ]]; then
592 if [[ "x$have_mach_vm" = "xno" ]]; then
593 have_mmap_vm=yes
594 fi
595 fi
596 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
597 [Define if your system has a working mmap()-based memory allocator.])
598
599 dnl Check that mmap() and associated functions work.
600 if [[ "x$have_mmap_vm" = "xyes" ]]; then
601
602 dnl Check if we have a working anonymous mmap()
603 AC_CACHE_CHECK([whether mmap supports MAP_ANON],
604 ac_cv_mmap_anon, [
605 AC_LANG_SAVE
606 AC_LANG_CPLUSPLUS
607 AC_TRY_RUN([
608 #define HAVE_MMAP_ANON
609 #define CONFIGURE_TEST_VM_MAP
610 #define TEST_VM_MMAP_ANON
611 #include "vm_alloc.cpp"
612 ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
613 dnl When cross-compiling, do not assume anything.
614 ac_cv_mmap_anon="guessing no"
615 )
616 AC_LANG_RESTORE
617 ]
618 )
619 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
620 [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
621
622 AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
623 ac_cv_mmap_anonymous, [
624 AC_LANG_SAVE
625 AC_LANG_CPLUSPLUS
626 AC_TRY_RUN([
627 #define HAVE_MMAP_ANONYMOUS
628 #define CONFIGURE_TEST_VM_MAP
629 #define TEST_VM_MMAP_ANON
630 #include "vm_alloc.cpp"
631 ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
632 dnl When cross-compiling, do not assume anything.
633 ac_cv_mmap_anonymous="guessing no"
634 )
635 AC_LANG_RESTORE
636 ]
637 )
638 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
639 [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
640
641 AC_CACHE_CHECK([whether mprotect works],
642 ac_cv_mprotect_works, [
643 AC_LANG_SAVE
644 AC_LANG_CPLUSPLUS
645 ac_cv_mprotect_works=yes
646 dnl First the tests that should segfault
647 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
648 AC_TRY_RUN([
649 #define CONFIGURE_TEST_VM_MAP
650 #define TEST_VM_PROT_$test_def
651 #include "vm_alloc.cpp"
652 ], ac_cv_mprotect_works=no, rm -f core,
653 dnl When cross-compiling, do not assume anything
654 ac_cv_mprotect_works="guessing no"
655 )
656 done
657 AC_TRY_RUN([
658 #define CONFIGURE_TEST_VM_MAP
659 #define TEST_VM_PROT_RDWR_WRITE
660 #include "vm_alloc.cpp"
661 ], , ac_cv_mprotect_works=no,
662 dnl When cross-compiling, do not assume anything
663 ac_cv_mprotect_works="guessing no"
664 )
665 AC_LANG_RESTORE
666 ]
667 )
668
669 dnl Remove support for mmap() if mprotect() does not work
670 if [[ "x$have_mmap_vm" = "xyes" ]]; then
671 case $ac_cv_mprotect_works in
672 *yes) have_mmap_vm=yes;;
673 *no) have_mmap_vm=no;;
674 esac
675 fi
676 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
677 [Define if your system has a working mmap()-based memory allocator.])
678
679 fi dnl HAVE_MMAP_VM
680
681 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
682 AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x3000],
683 ac_cv_pagezero_hack, [
684 ac_cv_pagezero_hack=no
685 if AC_TRY_COMMAND([Darwin/testlmem.sh 0x3000]); then
686 ac_cv_pagezero_hack=yes
687 dnl might as well skip the test for mmap-able low memory
688 ac_cv_can_map_lm=no
689 fi
690 ])
691 AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
692 [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
693
694 dnl Check if we can mmap 0x3000 bytes from 0x0000
695 AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x3000],
696 ac_cv_can_map_lm, [
697 AC_LANG_SAVE
698 AC_LANG_CPLUSPLUS
699 AC_TRY_RUN([
700 #include "vm_alloc.cpp"
701 int main(void) { /* returns 0 if we could map the lowmem globals */
702 volatile char * lm = 0;
703 if (vm_init() < 0) exit(1);
704 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
705 lm[0] = 'z';
706 if (vm_release((char *)lm, 0x2000) < 0) exit(1);
707 vm_exit(); exit(0);
708 }
709 ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
710 dnl When cross-compiling, do not assume anything.
711 ac_cv_can_map_lm="guessing no"
712 )
713 AC_LANG_RESTORE
714 ]
715 )
716
717 dnl Check signal handlers need to be reinstalled
718 AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
719 ac_cv_signal_need_reinstall, [
720 AC_LANG_SAVE
721 AC_LANG_CPLUSPLUS
722 AC_TRY_RUN([
723 #include <stdlib.h>
724 #ifdef HAVE_UNISTD_H
725 #include <unistd.h>
726 #endif
727 #include <signal.h>
728 static int handled_signal = 0;
729 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
730 int main(void) { /* returns 0 if signals need not to be reinstalled */
731 signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
732 exit(handled_signal == 2);
733 }
734 ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
735 dnl When cross-compiling, do not assume anything.
736 ac_cv_signal_need_reinstall="guessing yes"
737 )
738 AC_LANG_RESTORE
739 ]
740 )
741 AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
742 [Define if your system requires signals to be reinstalled.])
743
744 dnl Check if sigaction handlers need to be reinstalled
745 AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
746 ac_cv_sigaction_need_reinstall, [
747 AC_LANG_SAVE
748 AC_LANG_CPLUSPLUS
749 AC_TRY_RUN([
750 #include <stdlib.h>
751 #ifdef HAVE_UNISTD_H
752 #include <unistd.h>
753 #endif
754 #include <signal.h>
755 static int handled_signal = 0;
756 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
757 typedef RETSIGTYPE (*signal_handler)(int);
758 static signal_handler mysignal(int sig, signal_handler handler) {
759 struct sigaction old_sa;
760 struct sigaction new_sa;
761 new_sa.sa_handler = handler;
762 return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
763 }
764 int main(void) { /* returns 0 if signals need not to be reinstalled */
765 mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
766 exit(handled_signal == 2);
767 }
768 ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
769 dnl When cross-compiling, do not assume anything.
770 ac_cv_sigaction_need_reinstall="guessing yes"
771 )
772 AC_LANG_RESTORE
773 ]
774 )
775 AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
776 [Define if your system requires sigactions to be reinstalled.])
777
778 dnl Check if Mach exceptions supported.
779 AC_CACHE_CHECK([whether your system supports Mach exceptions],
780 ac_cv_have_mach_exceptions, [
781 AC_LANG_SAVE
782 AC_LANG_CPLUSPLUS
783 AC_TRY_RUN([
784 #define HAVE_MACH_EXCEPTIONS 1
785 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
786 #include "vm_alloc.cpp"
787 #include "sigsegv.cpp"
788 ],
789 ac_cv_have_mach_exceptions=yes,
790 ac_cv_have_mach_exceptions=no,
791 dnl When cross-compiling, do not assume anything.
792 ac_cv_have_mach_exceptions=no
793 )
794 AC_LANG_RESTORE
795 ]
796 )
797 if [[ "$ac_cv_have_mach_exceptions" = "yes" ]]; then
798 sigsegv_recovery=mach
799 fi
800 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
801 [Define if your system supports Mach exceptions.])
802
803 dnl Check if Windows exceptions are supported.
804 AC_CACHE_CHECK([whether your system supports Windows exceptions],
805 ac_cv_have_win32_exceptions, [
806 AC_LANG_SAVE
807 AC_LANG_CPLUSPLUS
808 AC_TRY_RUN([
809 #define HAVE_WIN32_EXCEPTIONS 1
810 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
811 #include "vm_alloc.cpp"
812 #include "sigsegv.cpp"
813 ], [
814 sigsegv_recovery=win32
815 ac_cv_have_win32_exceptions=yes
816 ],
817 ac_cv_have_win32_exceptions=no,
818 dnl When cross-compiling, do not assume anything.
819 ac_cv_have_win32_exceptions=no
820 )
821 AC_LANG_RESTORE
822 ]
823 )
824 AC_TRANSLATE_DEFINE(HAVE_WIN32_EXCEPTIONS, "$ac_cv_have_win32_exceptions",
825 [Define if your system supports Windows exceptions.])
826
827 dnl Otherwise, check if extended signals are supported.
828 if [[ -z "$sigsegv_recovery" ]]; then
829 AC_CACHE_CHECK([whether your system supports extended signal handlers],
830 ac_cv_have_extended_signals, [
831 AC_LANG_SAVE
832 AC_LANG_CPLUSPLUS
833 AC_TRY_RUN([
834 #define HAVE_SIGINFO_T 1
835 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
836 #include "vm_alloc.cpp"
837 #include "sigsegv.cpp"
838 ],
839 ac_cv_have_extended_signals=yes,
840 ac_cv_have_extended_signals=no,
841 dnl When cross-compiling, do not assume anything.
842 ac_cv_have_extended_signals=no
843 )
844 AC_LANG_RESTORE
845 ]
846 )
847 if [[ "$ac_cv_have_extended_signals" = "yes" ]]; then
848 sigsegv_recovery=siginfo
849 fi
850 AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
851 [Define if your system support extended signals.])
852 fi
853
854 dnl Otherwise, check for subterfuges.
855 if [[ -z "$sigsegv_recovery" ]]; then
856 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
857 ac_cv_have_sigcontext_hack, [
858 AC_LANG_SAVE
859 AC_LANG_CPLUSPLUS
860 AC_TRY_RUN([
861 #define HAVE_SIGCONTEXT_SUBTERFUGE 1
862 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
863 #include "vm_alloc.cpp"
864 #include "sigsegv.cpp"
865 ],
866 ac_cv_have_sigcontext_hack=yes,
867 ac_cv_have_sigcontext_hack=no,
868 dnl When cross-compiling, do not assume anything.
869 ac_cv_have_sigcontext_hack=no
870 )
871 AC_LANG_RESTORE
872 ])
873 if [[ "$ac_cv_have_sigcontext_hack" = "yes" ]]; then
874 sigsegv_recovery=sigcontext
875 fi
876 AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
877 [Define if we know a hack to replace siginfo_t->si_addr member.])
878 fi
879
880 dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
881 AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
882 ac_cv_have_skip_instruction, [
883 AC_LANG_SAVE
884 AC_LANG_CPLUSPLUS
885 AC_TRY_RUN([
886 #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
887 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
888 #include "vm_alloc.cpp"
889 #include "sigsegv.cpp"
890 ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
891 dnl When cross-compiling, do not assume anything.
892 ac_cv_have_skip_instruction=no
893 )
894 AC_LANG_RESTORE
895 ]
896 )
897 AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
898 [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
899
900 dnl Can we do Video on SEGV Signals ?
901 CAN_VOSF=no
902 if [[ -n "$sigsegv_recovery" ]]; then
903 CAN_VOSF=yes
904 fi
905
906 dnl Enable VOSF screen updates with this feature is requested and feasible
907 if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
908 AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
909 else
910 WANT_VOSF=no
911 fi
912
913 dnl Check addressing mode to use
914 AC_MSG_CHECKING([for addressing mode to use])
915 case "$os_target" in
916 cygwin*)
917 WANT_ADDRESSING_MODE="direct,cygwin-hack"
918 NATMEM_OFFSET=
919 ;;
920 esac
921 if [[ "$EMULATED_PPC" != "yes" ]]; then
922 if [[ "$WANT_ADDRESSING_MODE" != "real" ]]; then
923 AC_MSG_WARN([Running in native PowerPC mode, force use of Real Addressing.])
924 WANT_ADDRESSING_MODE="real"
925 fi
926 fi
927 if [[ "$WANT_ADDRESSING_MODE" = "direct" ]]; then
928 if [[ -n "$NATMEM_OFFSET" ]]; then
929 NATMEM_OFFSET_DEF="-DNATMEM_OFFSET=$NATMEM_OFFSET"
930 fi
931 AC_LANG_SAVE
932 AC_LANG_CPLUSPLUS
933 cat confdefs.h > conftest.$ac_ext
934 cat >> conftest.$ac_ext << EOF
935 #include <stdio.h>
936 #include <string.h>
937 #include "vm_alloc.cpp"
938
939 int main(void)
940 {
941 if (vm_init() < 0)
942 return 1;
943
944 static const struct {
945 unsigned long base;
946 unsigned int size;
947 } ranges[[]] = {
948 { 0x00000000, 0x0003000 },
949 { 0x10000000, 0x2000000 },
950 { 0x40800000, 0x0400000 },
951 { 0x68070000, 0x0010000 },
952 { 0x69000000, 0x0080000 },
953 { 0x68ffe000, 0x0002000 },
954 { 0x5fffe000, 0x0002000 },
955 { 0x60000000, 0x0040000 },
956 };
957 const int n_ranges = sizeof(ranges)/ sizeof(ranges[[0]]);
958
959 #ifdef NATMEM_OFFSET
960 unsigned long ofs = NATMEM_OFFSET;
961 #else
962 for (unsigned long ofs = 0x10000000; ofs <= 0x90000000; ofs += 0x10000000)
963 #endif
964 for (int i = 0; i < n_ranges; i++) {
965 char *m = (char *)(ranges[[i]].base + ofs);
966 if (vm_acquire_fixed(m, ranges[[i]].size) != 0)
967 break;
968 memset(m, 0, ranges[[i]].size);
969 vm_release(m, ranges[[i]].size);
970 if (i == n_ranges - 1) {
971 if (sizeof(void *) == 8 && ofs > 0xffffffff)
972 printf("0x%lxul\n", ofs);
973 else
974 printf("0x%08x\n", ofs);
975 return 0;
976 }
977 }
978
979 vm_exit();
980 return 1;
981 }
982 EOF
983 doit='$CXX conftest.$ac_ext -o conftest.$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS $LIBS $NATMEM_OFFSET_DEF >& AS_MESSAGE_LOG_FD'
984 if AC_TRY_EVAL(doit); then
985 NATMEM_OFFSET=`./conftest.$ac_exeext`
986 else
987 NATMEM_OFFSET=
988 fi
989 rm -f conftest*
990 AC_LANG_RESTORE
991
992 if [[ -z "$NATMEM_OFFSET" ]]; then
993 AC_MSG_ERROR([could not determine a sensible NATMEM_OFFSET value])
994 else
995 WANT_ADDRESSING_MODE="direct,$NATMEM_OFFSET"
996 AC_DEFINE_UNQUOTED(NATMEM_OFFSET, $NATMEM_OFFSET,
997 [Define constant offset for Mac address translation])
998 fi
999 fi
1000 AC_MSG_RESULT($WANT_ADDRESSING_MODE)
1001
1002 dnl Utility macro used by next two tests.
1003 dnl AC_EXAMINE_OBJECT(C source code,
1004 dnl commands examining object file,
1005 dnl [commands to run if compile failed]):
1006 dnl
1007 dnl Compile the source code to an object file; then convert it into a
1008 dnl printable representation. All unprintable characters and
1009 dnl asterisks (*) are replaced by dots (.). All white space is
1010 dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
1011 dnl output, but runs of newlines are compressed to a single newline.
1012 dnl Finally, line breaks are forcibly inserted so that no line is
1013 dnl longer than 80 columns and the file ends with a newline. The
1014 dnl result of all this processing is in the file conftest.dmp, which
1015 dnl may be examined by the commands in the second argument.
1016 dnl
1017 AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
1018 [AC_LANG_SAVE
1019 AC_LANG_C
1020 dnl Next bit cribbed from AC_TRY_COMPILE.
1021 cat > conftest.$ac_ext <<EOF
1022 [#line __oline__ "configure"
1023 #include "confdefs.h"
1024 $1
1025 ]EOF
1026 if AC_TRY_EVAL(ac_compile); then
1027 od -c conftest.o |
1028 sed ['s/^[0-7]*[ ]*/ /
1029 s/\*/./g
1030 s/ \\n/*/g
1031 s/ [0-9][0-9][0-9]/./g
1032 s/ \\[^ ]/./g'] |
1033 tr -d '
1034 ' | tr -s '*' '
1035 ' | fold | sed '$a\
1036 ' > conftest.dmp
1037 $2
1038 ifelse($3, , , else
1039 $3
1040 )dnl
1041 fi
1042 rm -rf conftest*
1043 AC_LANG_RESTORE])
1044
1045 dnl Floating point format probe.
1046 dnl The basic concept is the same as the above: grep the object
1047 dnl file for an interesting string. We have to watch out for
1048 dnl rounding changing the values in the object, however; this is
1049 dnl handled by ignoring the least significant byte of the float.
1050 dnl
1051 dnl Does not know about VAX G-float or C4x idiosyncratic format.
1052 dnl It does know about PDP-10 idiosyncratic format, but this is
1053 dnl not presently supported by GCC. S/390 "binary floating point"
1054 dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
1055 dnl as ASCII?)
1056 dnl
1057 AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
1058 [AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
1059 [gcc_AC_EXAMINE_OBJECT(
1060 [/* This will not work unless sizeof(double) == 8. */
1061 extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
1062
1063 /* This structure must have no internal padding. */
1064 struct possibility {
1065 char prefix[8];
1066 double candidate;
1067 char postfix[8];
1068 };
1069
1070 #define C(cand) { "\nformat:", cand, ":tamrof\n" }
1071 struct possibility table [] =
1072 {
1073 C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
1074 C( 3.53802595280598432000e+18), /* D__float - VAX */
1075 C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
1076 C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
1077 C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
1078 };],
1079 [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1080 ac_cv_c_float_format='IEEE (big-endian)'
1081 elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
1082 ac_cv_c_float_format='IEEE (big-endian)'
1083 elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
1084 ac_cv_c_float_format='IEEE (little-endian)'
1085 elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
1086 ac_cv_c_float_format='IEEE (little-endian)'
1087 elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
1088 ac_cv_c_float_format='VAX D-float'
1089 elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
1090 ac_cv_c_float_format='PDP-10'
1091 elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1092 ac_cv_c_float_format='IBM 370 hex'
1093 else
1094 AC_MSG_ERROR(Unknown floating point format)
1095 fi],
1096 [AC_MSG_ERROR(compile failed)])
1097 ])
1098 # IEEE is the default format. If the float endianness isn't the same
1099 # as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
1100 # (which is a tristate: yes, no, default). This is only an issue with
1101 # IEEE; the other formats are only supported by a few machines each,
1102 # all with the same endianness.
1103 format=IEEE_FLOAT_FORMAT
1104 fbigend=
1105 case $ac_cv_c_float_format in
1106 'IEEE (big-endian)' )
1107 if test $ac_cv_c_bigendian = no; then
1108 fbigend=1
1109 fi
1110 ;;
1111 'IEEE (little-endian)' )
1112 if test $ac_cv_c_bigendian = yes; then
1113 fbigend=0
1114 fi
1115 ;;
1116 'VAX D-float' )
1117 format=VAX_FLOAT_FORMAT
1118 ;;
1119 'PDP-10' )
1120 format=PDP10_FLOAT_FORMAT
1121 ;;
1122 'IBM 370 hex' )
1123 format=IBM_FLOAT_FORMAT
1124 ;;
1125 esac
1126 AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
1127 [Define to the floating point format of the host machine.])
1128 if test -n "$fbigend"; then
1129 AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
1130 [Define to 1 if the host machine stores floating point numbers in
1131 memory with the word containing the sign bit at the lowest address,
1132 or to 0 if it does it the other way around.
1133
1134 This macro should not be defined if the ordering is the same as for
1135 multi-word integers.])
1136 fi
1137 ])
1138
1139 dnl Check for host float format
1140 gcc_AC_C_FLOAT_FORMAT
1141
1142 dnl Platform specific binary postprocessor
1143 AC_PATH_PROG(BLESS, "true")
1144 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
1145 BLESS=Darwin/lowmem
1146 LDFLAGS="$LDFLAGS -pagezero_size 0x3000"
1147 fi
1148
1149 dnl Check for GCC 2.7 or higher.
1150 HAVE_GCC27=no
1151 AC_MSG_CHECKING(for GCC 2.7 or higher)
1152 AC_EGREP_CPP(xyes,
1153 [#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5
1154 xyes
1155 #endif
1156 ], [AC_MSG_RESULT(yes); HAVE_GCC27=yes], AC_MSG_RESULT(no))
1157
1158 dnl Check for GCC 3.0 or higher.
1159 HAVE_GCC30=no
1160 AC_MSG_CHECKING(for GCC 3.0 or higher)
1161 AC_EGREP_CPP(xyes,
1162 [#if __GNUC__ >= 3
1163 xyes
1164 #endif
1165 ], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no))
1166
1167 dnl Check for ICC.
1168 AC_MSG_CHECKING(for ICC)
1169 HAVE_ICC=no
1170 if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
1171 HAVE_ICC=yes
1172 fi
1173 AC_MSG_RESULT($HAVE_ICC)
1174
1175 dnl Determine the generated object format
1176 AC_CACHE_CHECK([the format of compiler generated objects],
1177 ac_cv_object_format, [
1178 echo 'int i;' > conftest.$ac_ext
1179 ac_cv_object_format=no
1180 if AC_TRY_EVAL(ac_compile); then
1181 case `/usr/bin/file conftest.$ac_objext` in
1182 *"ELF"*)
1183 ac_cv_object_format=elf
1184 ;;
1185 *"Mach-O"*)
1186 ac_cv_object_format=mach
1187 ;;
1188 *)
1189 ac_cv_object_format=unknown
1190 ;;
1191 esac
1192 fi
1193 rm -rf conftest*
1194 ])
1195
1196 dnl CPU emulator sources
1197 if [[ "x$EMULATED_PPC" = "xyes" ]]; then
1198 CPUSRCS="\
1199 ../kpx_cpu/src/mathlib/ieeefp.cpp \
1200 ../kpx_cpu/src/mathlib/mathlib.cpp \
1201 ../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \
1202 ../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \
1203 ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp \
1204 ../kpx_cpu/src/cpu/ppc/ppc-translate.cpp"
1205 CPPFLAGS="$CPPFLAGS -I../kpx_cpu/include -I../kpx_cpu/src"
1206
1207 dnl Enable JIT compiler, if possible
1208 if [[ "x$WANT_JIT" = "xyes" ]]; then
1209 AC_CACHE_CHECK([whether dyngen can be used],
1210 ac_cv_use_dyngen, [
1211 case $host_cpu:$ac_cv_object_format in
1212 powerpc:elf)
1213 ac_cv_use_dyngen=yes
1214 ;;
1215 x86_64:elf)
1216 ac_cv_use_dyngen=yes
1217 ;;
1218 i?86:elf)
1219 ac_cv_use_dyngen=yes
1220 ;;
1221 powerpc:mach)
1222 ac_cv_use_dyngen=yes
1223 ;;
1224 *:*)
1225 ac_cv_use_dyngen=no
1226 ;;
1227 esac
1228 dnl Check for a suitable synthetic opcodes compiler (icc is faking itself as gcc 3.2.2)
1229 if [[ -z "$DYNGEN_CC" ]]; then
1230 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1231 DYNGEN_CC=$CXX
1232 else
1233 for p in /usr/bin /usr/local/bin; do
1234 gxx="$p/g++"
1235 if [[ -x "$gxx" ]]; then
1236 DYNGEN_CC="$gxx"
1237 fi
1238 done
1239 fi
1240 fi
1241 if [[ -z "$DYNGEN_CC" ]]; then
1242 ac_cv_use_dyngen=no
1243 fi
1244 ])
1245 if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
1246 case $host_cpu in
1247 i?86)
1248 DYNGEN_OP_FLAGS="-fomit-frame-pointer -mpreferred-stack-boundary=2"
1249 ;;
1250 powerpc)
1251 if [[ "x$ac_cv_object_format" = "xmach" ]]; then
1252 DYNGEN_OP_FLAGS="-mdynamic-no-pic"
1253 fi
1254 ;;
1255 esac
1256 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1257 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -falign-functions=0"
1258 else
1259 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -malign-functions=0"
1260 fi
1261 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-limit=10000 -fno-exceptions -g0"
1262 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1263 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-reorder-blocks -fno-optimize-sibling-calls"
1264 fi
1265 else
1266 WANT_JIT=no
1267 fi
1268 AC_TRANSLATE_DEFINE(ENABLE_DYNGEN, $ac_cv_use_dyngen, [Define to enable dyngen engine])
1269 if [[ "x$WANT_JIT" = "xyes" ]]; then
1270 DYNGENSRCS="\
1271 ../kpx_cpu/src/cpu/jit/dyngen.c \
1272 ../kpx_cpu/src/cpu/jit/cxxdemangle.cpp"
1273 CPUSRCS="\
1274 ../kpx_cpu/src/cpu/jit/jit-cache.cpp \
1275 ../kpx_cpu/src/cpu/jit/basic-dyngen.cpp \
1276 ../kpx_cpu/src/cpu/ppc/ppc-dyngen.cpp $CPUSRCS"
1277 fi
1278 fi
1279 CPUSRCS="$CPUSRCS ../kpx_cpu/sheepshaver_glue.cpp"
1280 else
1281 WANT_JIT=no
1282 fi
1283 if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
1284 AC_CACHE_CHECK([whether static data regions are executable],
1285 ac_cv_have_static_data_exec, [
1286 AC_TRY_RUN([int main(void) {
1287 #if defined(__powerpc__) || defined(__ppc__)
1288 static unsigned int p[8] = {0x4e800020,};
1289 asm volatile("dcbst 0,%0" : : "r" (p) : "memory");
1290 asm volatile("sync" : : : "memory");
1291 asm volatile("icbi 0,%0" : : "r" (p) : "memory");
1292 asm volatile("sync" : : : "memory");
1293 asm volatile("isync" : : : "memory");
1294 ((void (*)(void))p)();
1295 return 0;
1296 #endif
1297 return 1;
1298 }], ac_cv_have_static_data_exec=yes, ac_cv_have_static_data_exec=no,
1299 dnl When cross-compiling, do not assume anything.
1300 ac_cv_have_static_data_exec=no
1301 )
1302 ])
1303 else
1304 ac_cv_use_dyngen=no
1305 fi
1306 AC_TRANSLATE_DEFINE(HAVE_STATIC_DATA_EXEC, "$ac_cv_have_static_data_exec",
1307 [Define if your system marks static data pages as executable.])
1308
1309 if [[ "x$WANT_JIT" = "xyes" ]]; then
1310 CPPFLAGS="$CPPFLAGS -DUSE_JIT"
1311 fi
1312
1313 dnl Generate Makefile.
1314 AC_SUBST(PERL)
1315 AC_SUBST(USE_DYNGEN, [$ac_cv_use_dyngen])
1316 AC_SUBST(DYNGENSRCS)
1317 AC_SUBST(DYNGEN_CC)
1318 AC_SUBST(DYNGEN_OP_FLAGS)
1319 AC_SUBST(SYSSRCS)
1320 AC_SUBST(CPUSRCS)
1321 AC_SUBST(BLESS)
1322 AC_SUBST(KEYCODES)
1323 AC_OUTPUT([
1324 Makefile
1325 ../MacOSX/Info.plist
1326 ])
1327
1328 dnl Print summary.
1329 echo
1330 echo SheepShaver configuration summary:
1331 echo
1332 echo SDL support ...................... : $SDL_SUPPORT
1333 echo FBDev DGA support ................ : $WANT_FBDEV_DGA
1334 echo XFree86 DGA support .............. : $WANT_XF86_DGA
1335 echo XFree86 VidMode support .......... : $WANT_XF86_VIDMODE
1336 echo Using PowerPC emulator ........... : $EMULATED_PPC
1337 echo Enable JIT compiler .............. : $WANT_JIT
1338 echo Enable video on SEGV signals ..... : $WANT_VOSF
1339 echo ESD sound support ................ : $WANT_ESD
1340 echo GTK user interface ............... : $WANT_GTK
1341 echo mon debugger support ............. : $WANT_MON
1342 echo Addressing mode .................. : $WANT_ADDRESSING_MODE
1343 echo Bad memory access recovery type .. : $sigsegv_recovery
1344 echo
1345 echo "Configuration done. Now type \"make\"."