ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/configure.ac
Revision: 1.22
Committed: 2005-05-12T11:21:10Z (19 years, 1 month ago) by gbeauche
Branch: MAIN
Changes since 1.21: +1 -1 lines
Log Message:
Enable VidMode extension by default though some Xservers may still be
broken. Probably run-time check for the right VidMode version? My tests
were done with X.org 6.8.2 (VidMode 2.2)

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_FBDEV_DGA=no
127 WANT_XF86_DGA=no
128 WANT_XF86_VIDMODE=no
129 WANT_FBDEV_DGA=no
130 SDL_SUPPORT="$SDL_SUPPORT video"
131 fi
132 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
133 WANT_SDL=yes
134 SDL_SUPPORT="$SDL_SUPPORT audio"
135 fi
136 if [[ "x$WANT_SDL" = "xyes" ]]; then
137 AC_PATH_PROG(sdl_config, "sdl-config")
138 if [[ -n "$sdl_config" ]]; then
139 case $target_os in
140 # Special treatment for Cygwin so that we can still use the POSIX layer
141 *cygwin*)
142 sdl_cflags="-I`$sdl_config --prefix`/include/SDL"
143 sdl_libs="-L`$sdl_config --exec-prefix`/lib -lSDL"
144 ;;
145 *)
146 sdl_cflags=`$sdl_config --cflags`
147 if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then
148 sdl_libs=`$sdl_config --static-libs`
149 else
150 sdl_libs=`$sdl_config --libs`
151 fi
152 ;;
153 esac
154 CFLAGS="$CFLAGS $sdl_cflags"
155 CXXFLAGS="$CXXFLAGS $sdl_cflags"
156 LIBS="$LIBS $sdl_libs"
157 else
158 WANT_SDL=no
159 WANT_SDL_VIDEO=no
160 WANT_SDL_AUDIO=no
161 fi
162 SDL_SUPPORT=`echo "$SDL_SUPPORT" | sed -e "s/^ //"`
163 else
164 SDL_SUPPORT="none"
165 fi
166
167 dnl We need X11, if not using SDL.
168 if [[ "x$WANT_SDL_VIDEO" != "xyes" ]]; then
169 AC_PATH_XTRA
170 if [[ "x$no_x" = "xyes" ]]; then
171 AC_MSG_ERROR([You need X11 to run SheepShaver.])
172 fi
173 CFLAGS="$CFLAGS $X_CFLAGS"
174 CXXFLAGS="$CXXFLAGS $X_CFLAGS"
175 LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
176 fi
177
178 dnl We need pthreads on non-PowerPC systems. Try libpthread first, then libc_r (FreeBSD), then PTL.
179 HAVE_PTHREADS=yes
180 case $EMULATED_PPC:$target_os in
181 no:linux*|no:netbsd*)
182 dnl We do have our own pthread_cancel() implementation
183 AC_DEFINE(HAVE_PTHREAD_CANCEL, 1, [Define if you have the pthread_cancel function.])
184 ;;
185 *:*)
186 AC_CHECK_LIB(pthread, pthread_create, , [
187 AC_CHECK_LIB(c_r, pthread_create, , [
188 AC_CHECK_LIB(PTL, pthread_create, , [
189 AC_MSG_ERROR([You need pthreads to run Basilisk II.])
190 ])
191 ])
192 ])
193 AC_CHECK_FUNCS(pthread_cancel)
194 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
195 AC_CHECK_FUNCS(pthread_mutexattr_settype)
196 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
197 if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
198 AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
199 fi
200 dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
201 SEMSRC=
202 AC_CHECK_FUNCS(sem_init, , [
203 if test "x$HAVE_PTHREADS" = "xyes"; then
204 SEMSRC=posix_sem.cpp
205 fi
206 ])
207 ;;
208 esac
209
210 dnl We use FBDev DGA if possible.
211 if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
212 AC_CHECK_HEADER(linux/fb.h, [
213 AC_DEFINE(ENABLE_FBDEV_DGA, 1, [Define if using Linux fbdev extension.])
214 ], [
215 AC_MSG_WARN([Could not find Linux FBDev extension, ignoring --enable-fbdev-dga.])
216 WANT_FBDEV_DGA=no
217 ])
218 fi
219
220 dnl We use XFree86 DGA if possible.
221 if [[ "x$WANT_XF86_DGA" = "xyes" ]]; then
222 AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, [
223 AC_DEFINE(ENABLE_XF86_DGA, 1, [Define if using XFree86 DGA extension.])
224 LIBS="$LIBS -lXxf86dga"
225 ], [
226 AC_MSG_WARN([Could not find XFree86 DGA extension, ignoring --enable-xf86-dga.])
227 WANT_XF86_DGA=no
228 ])
229 fi
230
231 dnl We use XFree86 VidMode if possible.
232 if [[ "x$WANT_XF86_VIDMODE" = "xyes" ]]; then
233 AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, [
234 AC_DEFINE(ENABLE_XF86_VIDMODE, 1, [Define if using XFree86 DGA extension.])
235 LIBS="$LIBS -lXxf86vm"
236 ], [
237 AC_MSG_WARN([Could not find XFree86 VidMode extension, ignoring --enable-xf86-vidmode.])
238 WANT_XF86_VIDMODE=no
239 ])
240 fi
241
242 dnl We use GTK+ if possible.
243 UISRCS=../dummy/prefs_editor_dummy.cpp
244 case "x$WANT_GTK" in
245 xgtk2*)
246 AM_PATH_GTK_2_0(1.3.15, [
247 AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
248 CFLAGS="$CFLAGS $GTK_CFLAGS"
249 CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
250 LIBS="$LIBS $GTK_LIBS"
251 UISRCS=prefs_editor_gtk.cpp
252 WANT_GTK=gtk2
253 ], [
254 case "x${WANT_GTK}x" in
255 *gtkx)
256 AC_MSG_WARN([Could not find GTK+ 2.0, trying with GTK+ 1.2.])
257 WANT_GTK=gtk
258 ;;
259 *)
260 AC_MSG_WARN([Could not find GTK+, disabling user interface.])
261 WANT_GTK=no
262 ;;
263 esac
264 ])
265 ;;
266 esac
267 if [[ "x$WANT_GTK" = "xgtk" ]]; then
268 AM_PATH_GTK(1.2.0, [
269 AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
270 CFLAGS="$CFLAGS $GTK_CFLAGS"
271 CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
272 LIBS="$LIBS $GTK_LIBS"
273 UISRCS=prefs_editor_gtk.cpp
274 ], [
275 AC_MSG_WARN([Could not find GTK+, disabling user interface.])
276 WANT_GTK=no
277 ])
278 fi
279
280 dnl We use ESD if possible.
281 if [[ "x$WANT_ESD" = "xyes" ]]; then
282 AM_PATH_ESD(0.2.8, [
283 AC_DEFINE(ENABLE_ESD, 1, [Define is using ESD.])
284 CFLAGS="$CFLAGS $ESD_CFLAGS"
285 CXXFLAGS="$CXXFLAGS $ESD_CFLAGS"
286 LIBS="$LIBS $ESD_LIBS"
287 ], [
288 AC_MSG_WARN([Could not find ESD, disabling ESD support.])
289 WANT_ESD=no
290 ])
291 fi
292
293 dnl We use 64-bit file size support if possible.
294 AC_SYS_LARGEFILE
295
296 dnl Checks for header files.
297 AC_HEADER_STDC
298 AC_HEADER_SYS_WAIT
299 AC_CHECK_HEADERS(malloc.h)
300 AC_CHECK_HEADERS(mach/vm_map.h mach/mach_init.h sys/mman.h)
301 AC_CHECK_HEADERS(sys/time.h sys/times.h sys/socket.h)
302 AC_CHECK_HEADERS(unistd.h fcntl.h byteswap.h dirent.h)
303 AC_CHECK_HEADERS(linux/if.h, [], [], [
304 #if HAVE_SYS_SOCKET_H
305 # include <sys/socket.h>
306 #endif
307 ])
308 AC_CHECK_HEADERS(linux/if_tun.h net/if.h net/if_tun.h)
309 AC_CHECK_HEADERS(fenv.h)
310
311 dnl Checks for typedefs, structures, and compiler characteristics.
312 AC_C_BIGENDIAN
313 AC_C_CONST
314 AC_C_INLINE
315 AC_CHECK_SIZEOF(short, 2)
316 AC_CHECK_SIZEOF(int, 4)
317 AC_CHECK_SIZEOF(long, 4)
318 AC_CHECK_SIZEOF(long long, 8)
319 AC_CHECK_SIZEOF(float, 4)
320 AC_CHECK_SIZEOF(double, 8)
321 AC_CHECK_SIZEOF(void *, 4)
322 AC_TYPE_OFF_T
323 AC_CHECK_TYPE(loff_t, off_t)
324 AC_TYPE_SIZE_T
325 AC_TYPE_SIGNAL
326 AC_HEADER_TIME
327 AC_STRUCT_TM
328
329 dnl Check whether struct sigaction has sa_restorer member.
330 AC_CACHE_CHECK([whether struct sigaction has sa_restorer],
331 ac_cv_signal_sa_restorer, [
332 AC_TRY_COMPILE([
333 #include <signal.h>
334 ], [struct sigaction sa; sa.sa_restorer = 0;],
335 ac_cv_signal_sa_restorer=yes, ac_cv_signal_sa_restorer=no,
336 dnl When cross-compiling, do not assume anything.
337 ac_cv_signal_sa_restorer=no
338 )
339 ])
340 if [[ "x$ac_cv_signal_sa_restorer" = "xyes" ]]; then
341 AC_DEFINE(HAVE_SIGNAL_SA_RESTORER, 1, [Define if sa_restorer is available in struct sigaction.])
342 fi
343
344 dnl Checks for library functions.
345 AC_CHECK_FUNCS(strdup strlcpy cfmakeraw)
346 AC_CHECK_FUNCS(nanosleep)
347 AC_CHECK_FUNCS(sigaction signal)
348 AC_CHECK_FUNCS(mmap mprotect munmap)
349 AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
350 AC_CHECK_FUNCS(posix_memalign memalign valloc)
351 AC_CHECK_FUNCS(exp2f log2f exp2 log2 trunc)
352
353 dnl Darwin seems to define mach_task_self() instead of task_self().
354 AC_CHECK_FUNCS(mach_task_self task_self)
355
356 dnl We need clock_gettime() for better performance but it may drag
357 dnl libpthread in, which we don't want for native ppc mode
358 case $EMULATED_PPC:$target_os in
359 no:linux*)
360 ;;
361 *:*)
362 AC_SEARCH_LIBS(clock_gettime, [rt posix4])
363 AC_CHECK_FUNCS(clock_gettime clock_nanosleep)
364 ;;
365 esac
366
367 dnl Check for headers and functions related to pty support (sshpty.c)
368 dnl From openssh-3.2.2p1 configure.ac
369 AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
370 AC_CHECK_FUNCS(_getpty vhangup strlcpy)
371
372 case "$host" in
373 *-*-hpux10.26)
374 disable_ptmx_check=yes
375 ;;
376 *-*-linux*)
377 no_dev_ptmx=1
378 ;;
379 mips-sony-bsd|mips-sony-newsos4)
380 AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).])
381 ;;
382 *-*-sco3.2v4*)
383 no_dev_ptmx=1
384 ;;
385 *-*-sco3.2v5*)
386 no_dev_ptmx=1
387 ;;
388 *-*-cygwin*)
389 no_dev_ptmx=1
390 ;;
391 esac
392
393 if test -z "$no_dev_ptmx" ; then
394 if test "x$disable_ptmx_check" != "xyes" ; then
395 AC_CHECK_FILE([/dev/ptmx],
396 [
397 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
398 have_dev_ptmx=1
399 ]
400 )
401 fi
402 fi
403 AC_CHECK_FILE([/dev/ptc],
404 [
405 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
406 have_dev_ptc=1
407 ]
408 )
409 dnl (end of code from openssh-3.2.2p1 configure.ac)
410
411 dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
412 AC_DEFUN(AC_CHECK_FRAMEWORK, [
413 AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
414 AC_CACHE_CHECK([whether compiler supports framework $1],
415 ac_Framework, [
416 saved_LIBS="$LIBS"
417 LIBS="$LIBS -framework $1"
418 AC_TRY_LINK(
419 [$2], [int main(void) { return 0; }],
420 [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
421 )
422 ])
423 AS_IF([test AS_VAR_GET(ac_Framework) = yes],
424 [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
425 )
426 AS_VAR_POPDEF([ac_Framework])dnl
427 ])
428
429 dnl Check for some MacOS X frameworks
430 AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
431 AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
432
433 dnl Select system-dependant sources.
434 SERIALSRC=serial_unix.cpp
435 ETHERSRC=../dummy/ether_dummy.cpp
436 SCSISRC=../dummy/scsi_dummy.cpp
437 AUDIOSRC=../dummy/audio_dummy.cpp
438 EXTFSSRC=extfs_unix.cpp
439 EXTRASYSSRCS=
440 case "$target_os" in
441 linux*)
442 ETHERSRC=Linux/ether_linux.cpp
443 AUDIOSRC=audio_oss_esd.cpp
444 SCSISRC=Linux/scsi_linux.cpp
445 if [[ "x$EMULATED_PPC" = "xno" ]]; then
446 EXTRASYSSRCS="Linux/paranoia.cpp Linux/sheepthreads.c ppc_asm.S"
447 fi
448 ;;
449 netbsd*)
450 if [[ "x$EMULATED_PPC" = "xno" ]]; then
451 EXTRASYSSRCS="NetBSD/paranoia.cpp NetBSD/sheepthreads.c ppc_asm.S"
452 fi
453 ;;
454 darwin*)
455 if [[ "x$EMULATED_PPC" = "xno" ]]; then
456 EXTRASYSSRCS="Darwin/paranoia.cpp ppc_asm.S"
457 fi
458 if [[ "x$ac_cv_framework_IOKit" = "xyes" ]]; then
459 EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/sys_darwin.cpp"
460 fi
461 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
462 EXTFSSRC=../MacOSX/extfs_macosx.mm
463 fi
464 ;;
465 cygwin*)
466 SERIALSRC="../dummy/serial_dummy.cpp"
467 ;;
468 esac
469
470 dnl SDL overrides
471 if [[ "x$WANT_SDL" = "xyes" ]]; then
472 AC_DEFINE(USE_SDL, 1, [Define to enble SDL support.])
473 fi
474 if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
475 AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support.])
476 VIDEOSRCS="../SDL/video_sdl.cpp"
477 KEYCODES="../SDL/keycodes"
478 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
479 EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp"
480 else
481 case "$target_os" in
482 cygwin*)
483 EXTRASYSSRCS="$EXTRASYSSRCS ../Windows/clip_windows.cpp"
484 ;;
485 *)
486 EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp"
487 ;;
488 esac
489 fi
490 else
491 VIDEOSRCS="video_x.cpp"
492 KEYCODES="keycodes"
493 EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp"
494 fi
495 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
496 AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
497 AUDIOSRC="../SDL/audio_sdl.cpp"
498 fi
499
500 SYSSRCS="$VIDEOSRCS $EXTFSSRC $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $EXTRASYSSRCS"
501
502 dnl Define a macro that translates a yesno-variable into a C macro definition
503 dnl to be put into the config.h file
504 dnl $1 -- the macro to define
505 dnl $2 -- the value to translate
506 dnl $3 -- template name
507 AC_DEFUN(AC_TRANSLATE_DEFINE, [
508 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
509 AC_DEFINE($1, 1, $3)
510 fi
511 ])
512
513 dnl Check that the host supports TUN/TAP devices
514 AC_CACHE_CHECK([whether TUN/TAP is supported],
515 ac_cv_tun_tap_support, [
516 AC_TRY_COMPILE([
517 #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
518 #include <linux/if.h>
519 #include <linux/if_tun.h>
520 #endif
521 #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
522 #include <net/if.h>
523 #include <net/if_tun.h>
524 #endif
525 ], [
526 struct ifreq ifr;
527 memset(&ifr, 0, sizeof(ifr));
528 ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
529 ],
530 ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
531 )
532 ])
533 AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
534 [Define if your system supports TUN/TAP devices.])
535
536 dnl Various checks if the system supports vm_allocate() and the like functions.
537 have_mach_vm=no
538 if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
539 "x$ac_cv_func_vm_protect" = "xyes" ]]; then
540 have_mach_vm=yes
541 fi
542 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
543 [Define if your system has a working vm_allocate()-based memory allocator.])
544
545 dnl Check that vm_allocate(), vm_protect() work
546 if [[ "x$have_mach_vm" = "xyes" ]]; then
547
548 AC_CACHE_CHECK([whether vm_protect works],
549 ac_cv_vm_protect_works, [
550 AC_LANG_SAVE
551 AC_LANG_CPLUSPLUS
552 ac_cv_vm_protect_works=yes
553 dnl First the tests that should segfault
554 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
555 AC_TRY_RUN([
556 #define CONFIGURE_TEST_VM_MAP
557 #define TEST_VM_PROT_$test_def
558 #include "vm_alloc.cpp"
559 ], ac_cv_vm_protect_works=no, rm -f core,
560 dnl When cross-compiling, do not assume anything
561 ac_cv_vm_protect_works="guessing no"
562 )
563 done
564 AC_TRY_RUN([
565 #define CONFIGURE_TEST_VM_MAP
566 #define TEST_VM_PROT_RDWR_WRITE
567 #include "vm_alloc.cpp"
568 ], , ac_cv_vm_protect_works=no,
569 dnl When cross-compiling, do not assume anything
570 ac_cv_vm_protect_works="guessing no"
571 )
572 AC_LANG_RESTORE
573 ]
574 )
575
576 dnl Remove support for vm_allocate() if vm_protect() does not work
577 if [[ "x$have_mach_vm" = "xyes" ]]; then
578 case $ac_cv_vm_protect_works in
579 *yes) have_mach_vm=yes;;
580 *no) have_mach_vm=no;;
581 esac
582 fi
583 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
584 [Define if your system has a working vm_allocate()-based memory allocator.])
585
586 fi dnl HAVE_MACH_VM
587
588 dnl Various checks if the system supports mmap() and the like functions.
589 dnl ... and Mach memory allocators are not supported
590 have_mmap_vm=no
591 if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
592 "x$ac_cv_func_mprotect" = "xyes" ]]; then
593 if [[ "x$have_mach_vm" = "xno" ]]; then
594 have_mmap_vm=yes
595 fi
596 fi
597 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
598 [Define if your system has a working mmap()-based memory allocator.])
599
600 dnl Check that mmap() and associated functions work.
601 if [[ "x$have_mmap_vm" = "xyes" ]]; then
602
603 dnl Check if we have a working anonymous mmap()
604 AC_CACHE_CHECK([whether mmap supports MAP_ANON],
605 ac_cv_mmap_anon, [
606 AC_LANG_SAVE
607 AC_LANG_CPLUSPLUS
608 AC_TRY_RUN([
609 #define HAVE_MMAP_ANON
610 #define CONFIGURE_TEST_VM_MAP
611 #define TEST_VM_MMAP_ANON
612 #include "vm_alloc.cpp"
613 ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
614 dnl When cross-compiling, do not assume anything.
615 ac_cv_mmap_anon="guessing no"
616 )
617 AC_LANG_RESTORE
618 ]
619 )
620 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
621 [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
622
623 AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
624 ac_cv_mmap_anonymous, [
625 AC_LANG_SAVE
626 AC_LANG_CPLUSPLUS
627 AC_TRY_RUN([
628 #define HAVE_MMAP_ANONYMOUS
629 #define CONFIGURE_TEST_VM_MAP
630 #define TEST_VM_MMAP_ANON
631 #include "vm_alloc.cpp"
632 ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
633 dnl When cross-compiling, do not assume anything.
634 ac_cv_mmap_anonymous="guessing no"
635 )
636 AC_LANG_RESTORE
637 ]
638 )
639 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
640 [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
641
642 AC_CACHE_CHECK([whether mprotect works],
643 ac_cv_mprotect_works, [
644 AC_LANG_SAVE
645 AC_LANG_CPLUSPLUS
646 ac_cv_mprotect_works=yes
647 dnl First the tests that should segfault
648 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
649 AC_TRY_RUN([
650 #define CONFIGURE_TEST_VM_MAP
651 #define TEST_VM_PROT_$test_def
652 #include "vm_alloc.cpp"
653 ], ac_cv_mprotect_works=no, rm -f core,
654 dnl When cross-compiling, do not assume anything
655 ac_cv_mprotect_works="guessing no"
656 )
657 done
658 AC_TRY_RUN([
659 #define CONFIGURE_TEST_VM_MAP
660 #define TEST_VM_PROT_RDWR_WRITE
661 #include "vm_alloc.cpp"
662 ], , ac_cv_mprotect_works=no,
663 dnl When cross-compiling, do not assume anything
664 ac_cv_mprotect_works="guessing no"
665 )
666 AC_LANG_RESTORE
667 ]
668 )
669
670 dnl Remove support for mmap() if mprotect() does not work
671 if [[ "x$have_mmap_vm" = "xyes" ]]; then
672 case $ac_cv_mprotect_works in
673 *yes) have_mmap_vm=yes;;
674 *no) have_mmap_vm=no;;
675 esac
676 fi
677 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
678 [Define if your system has a working mmap()-based memory allocator.])
679
680 fi dnl HAVE_MMAP_VM
681
682 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
683 AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x3000],
684 ac_cv_pagezero_hack, [
685 ac_cv_pagezero_hack=no
686 if AC_TRY_COMMAND([Darwin/testlmem.sh 0x3000]); then
687 ac_cv_pagezero_hack=yes
688 dnl might as well skip the test for mmap-able low memory
689 ac_cv_can_map_lm=no
690 fi
691 ])
692 AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
693 [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
694
695 dnl Check if we can mmap 0x3000 bytes from 0x0000
696 AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x3000],
697 ac_cv_can_map_lm, [
698 AC_LANG_SAVE
699 AC_LANG_CPLUSPLUS
700 AC_TRY_RUN([
701 #include "vm_alloc.cpp"
702 int main(void) { /* returns 0 if we could map the lowmem globals */
703 volatile char * lm = 0;
704 if (vm_init() < 0) exit(1);
705 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
706 lm[0] = 'z';
707 if (vm_release((char *)lm, 0x2000) < 0) exit(1);
708 vm_exit(); exit(0);
709 }
710 ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
711 dnl When cross-compiling, do not assume anything.
712 ac_cv_can_map_lm="guessing no"
713 )
714 AC_LANG_RESTORE
715 ]
716 )
717
718 dnl Check signal handlers need to be reinstalled
719 AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
720 ac_cv_signal_need_reinstall, [
721 AC_LANG_SAVE
722 AC_LANG_CPLUSPLUS
723 AC_TRY_RUN([
724 #include <stdlib.h>
725 #ifdef HAVE_UNISTD_H
726 #include <unistd.h>
727 #endif
728 #include <signal.h>
729 static int handled_signal = 0;
730 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
731 int main(void) { /* returns 0 if signals need not to be reinstalled */
732 signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
733 exit(handled_signal == 2);
734 }
735 ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
736 dnl When cross-compiling, do not assume anything.
737 ac_cv_signal_need_reinstall="guessing yes"
738 )
739 AC_LANG_RESTORE
740 ]
741 )
742 AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
743 [Define if your system requires signals to be reinstalled.])
744
745 dnl Check if sigaction handlers need to be reinstalled
746 AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
747 ac_cv_sigaction_need_reinstall, [
748 AC_LANG_SAVE
749 AC_LANG_CPLUSPLUS
750 AC_TRY_RUN([
751 #include <stdlib.h>
752 #ifdef HAVE_UNISTD_H
753 #include <unistd.h>
754 #endif
755 #include <signal.h>
756 static int handled_signal = 0;
757 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
758 typedef RETSIGTYPE (*signal_handler)(int);
759 static signal_handler mysignal(int sig, signal_handler handler) {
760 struct sigaction old_sa;
761 struct sigaction new_sa;
762 new_sa.sa_handler = handler;
763 return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
764 }
765 int main(void) { /* returns 0 if signals need not to be reinstalled */
766 mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
767 exit(handled_signal == 2);
768 }
769 ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
770 dnl When cross-compiling, do not assume anything.
771 ac_cv_sigaction_need_reinstall="guessing yes"
772 )
773 AC_LANG_RESTORE
774 ]
775 )
776 AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
777 [Define if your system requires sigactions to be reinstalled.])
778
779 dnl Check if Mach exceptions supported.
780 AC_CACHE_CHECK([whether your system supports Mach exceptions],
781 ac_cv_have_mach_exceptions, [
782 AC_LANG_SAVE
783 AC_LANG_CPLUSPLUS
784 AC_TRY_RUN([
785 #define HAVE_MACH_EXCEPTIONS 1
786 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
787 #include "vm_alloc.cpp"
788 #include "sigsegv.cpp"
789 ],
790 ac_cv_have_mach_exceptions=yes,
791 ac_cv_have_mach_exceptions=no,
792 dnl When cross-compiling, do not assume anything.
793 ac_cv_have_mach_exceptions=no
794 )
795 AC_LANG_RESTORE
796 ]
797 )
798 if [[ "$ac_cv_have_mach_exceptions" = "yes" ]]; then
799 sigsegv_recovery=mach
800 fi
801 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
802 [Define if your system supports Mach exceptions.])
803
804 dnl Check if Windows exceptions are supported.
805 AC_CACHE_CHECK([whether your system supports Windows exceptions],
806 ac_cv_have_win32_exceptions, [
807 AC_LANG_SAVE
808 AC_LANG_CPLUSPLUS
809 AC_TRY_RUN([
810 #define HAVE_WIN32_EXCEPTIONS 1
811 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
812 #include "vm_alloc.cpp"
813 #include "sigsegv.cpp"
814 ], [
815 sigsegv_recovery=win32
816 ac_cv_have_win32_exceptions=yes
817 ],
818 ac_cv_have_win32_exceptions=no,
819 dnl When cross-compiling, do not assume anything.
820 ac_cv_have_win32_exceptions=no
821 )
822 AC_LANG_RESTORE
823 ]
824 )
825 AC_TRANSLATE_DEFINE(HAVE_WIN32_EXCEPTIONS, "$ac_cv_have_win32_exceptions",
826 [Define if your system supports Windows exceptions.])
827
828 dnl Otherwise, check if extended signals are supported.
829 if [[ -z "$sigsegv_recovery" ]]; then
830 AC_CACHE_CHECK([whether your system supports extended signal handlers],
831 ac_cv_have_extended_signals, [
832 AC_LANG_SAVE
833 AC_LANG_CPLUSPLUS
834 AC_TRY_RUN([
835 #define HAVE_SIGINFO_T 1
836 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
837 #include "vm_alloc.cpp"
838 #include "sigsegv.cpp"
839 ],
840 ac_cv_have_extended_signals=yes,
841 ac_cv_have_extended_signals=no,
842 dnl When cross-compiling, do not assume anything.
843 ac_cv_have_extended_signals=no
844 )
845 AC_LANG_RESTORE
846 ]
847 )
848 if [[ "$ac_cv_have_extended_signals" = "yes" ]]; then
849 sigsegv_recovery=siginfo
850 fi
851 AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
852 [Define if your system support extended signals.])
853 fi
854
855 dnl Otherwise, check for subterfuges.
856 if [[ -z "$sigsegv_recovery" ]]; then
857 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
858 ac_cv_have_sigcontext_hack, [
859 AC_LANG_SAVE
860 AC_LANG_CPLUSPLUS
861 AC_TRY_RUN([
862 #define HAVE_SIGCONTEXT_SUBTERFUGE 1
863 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
864 #include "vm_alloc.cpp"
865 #include "sigsegv.cpp"
866 ],
867 ac_cv_have_sigcontext_hack=yes,
868 ac_cv_have_sigcontext_hack=no,
869 dnl When cross-compiling, do not assume anything.
870 ac_cv_have_sigcontext_hack=no
871 )
872 AC_LANG_RESTORE
873 ])
874 if [[ "$ac_cv_have_sigcontext_hack" = "yes" ]]; then
875 sigsegv_recovery=sigcontext
876 fi
877 AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
878 [Define if we know a hack to replace siginfo_t->si_addr member.])
879 fi
880
881 dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
882 AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
883 ac_cv_have_skip_instruction, [
884 AC_LANG_SAVE
885 AC_LANG_CPLUSPLUS
886 AC_TRY_RUN([
887 #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
888 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
889 #include "vm_alloc.cpp"
890 #include "sigsegv.cpp"
891 ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
892 dnl When cross-compiling, do not assume anything.
893 ac_cv_have_skip_instruction=no
894 )
895 AC_LANG_RESTORE
896 ]
897 )
898 AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
899 [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
900
901 dnl Can we do Video on SEGV Signals ?
902 CAN_VOSF=no
903 if [[ -n "$sigsegv_recovery" ]]; then
904 CAN_VOSF=yes
905 fi
906
907 dnl Enable VOSF screen updates with this feature is requested and feasible
908 if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
909 AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
910 else
911 WANT_VOSF=no
912 fi
913
914 dnl Check addressing mode to use
915 AC_MSG_CHECKING([for addressing mode to use])
916 case "$os_target" in
917 cygwin*)
918 WANT_ADDRESSING_MODE="direct,cygwin-hack"
919 NATMEM_OFFSET=
920 ;;
921 esac
922 if [[ "$EMULATED_PPC" != "yes" ]]; then
923 if [[ "$WANT_ADDRESSING_MODE" != "real" ]]; then
924 AC_MSG_WARN([Running in native PowerPC mode, force use of Real Addressing.])
925 WANT_ADDRESSING_MODE="real"
926 fi
927 fi
928 if [[ "$WANT_ADDRESSING_MODE" = "direct" ]]; then
929 if [[ -n "$NATMEM_OFFSET" ]]; then
930 NATMEM_OFFSET_DEF="-DNATMEM_OFFSET=$NATMEM_OFFSET"
931 fi
932 AC_LANG_SAVE
933 AC_LANG_CPLUSPLUS
934 cat confdefs.h > conftest.$ac_ext
935 cat >> conftest.$ac_ext << EOF
936 #include <stdio.h>
937 #include <string.h>
938 #include "vm_alloc.cpp"
939
940 int main(void)
941 {
942 if (vm_init() < 0)
943 return 1;
944
945 static const struct {
946 unsigned long base;
947 unsigned int size;
948 } ranges[[]] = {
949 { 0x00000000, 0x0003000 },
950 { 0x10000000, 0x2000000 },
951 { 0x40800000, 0x0400000 },
952 { 0x68070000, 0x0010000 },
953 { 0x69000000, 0x0080000 },
954 { 0x68ffe000, 0x0002000 },
955 { 0x5fffe000, 0x0002000 },
956 { 0x60000000, 0x0040000 },
957 };
958 const int n_ranges = sizeof(ranges)/ sizeof(ranges[[0]]);
959
960 #ifdef NATMEM_OFFSET
961 unsigned long ofs = NATMEM_OFFSET;
962 #else
963 for (unsigned long ofs = 0x10000000; ofs <= 0x90000000; ofs += 0x10000000)
964 #endif
965 for (int i = 0; i < n_ranges; i++) {
966 char *m = (char *)(ranges[[i]].base + ofs);
967 if (vm_acquire_fixed(m, ranges[[i]].size) != 0)
968 break;
969 memset(m, 0, ranges[[i]].size);
970 vm_release(m, ranges[[i]].size);
971 if (i == n_ranges - 1) {
972 if (sizeof(void *) == 8 && ofs > 0xffffffff)
973 printf("0x%lxul\n", ofs);
974 else
975 printf("0x%08x\n", ofs);
976 return 0;
977 }
978 }
979
980 vm_exit();
981 return 1;
982 }
983 EOF
984 doit='$CXX conftest.$ac_ext -o conftest.$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS $LIBS $NATMEM_OFFSET_DEF >& AS_MESSAGE_LOG_FD'
985 if AC_TRY_EVAL(doit); then
986 NATMEM_OFFSET=`./conftest.$ac_exeext`
987 else
988 NATMEM_OFFSET=
989 fi
990 rm -f conftest*
991 AC_LANG_RESTORE
992
993 if [[ -z "$NATMEM_OFFSET" ]]; then
994 AC_MSG_ERROR([could not determine a sensible NATMEM_OFFSET value])
995 else
996 WANT_ADDRESSING_MODE="direct,$NATMEM_OFFSET"
997 AC_DEFINE_UNQUOTED(NATMEM_OFFSET, $NATMEM_OFFSET,
998 [Define constant offset for Mac address translation])
999 fi
1000 fi
1001 AC_MSG_RESULT($WANT_ADDRESSING_MODE)
1002
1003 dnl Platform specific binary postprocessor
1004 AC_PATH_PROG(BLESS, "true")
1005 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
1006 BLESS=Darwin/lowmem
1007 LDFLAGS="$LDFLAGS -pagezero_size 0x3000"
1008 fi
1009
1010 dnl Check for GCC 2.7 or higher.
1011 HAVE_GCC27=no
1012 AC_MSG_CHECKING(for GCC 2.7 or higher)
1013 AC_EGREP_CPP(xyes,
1014 [#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5
1015 xyes
1016 #endif
1017 ], [AC_MSG_RESULT(yes); HAVE_GCC27=yes], AC_MSG_RESULT(no))
1018
1019 dnl Check for GCC 3.0 or higher.
1020 HAVE_GCC30=no
1021 AC_MSG_CHECKING(for GCC 3.0 or higher)
1022 AC_EGREP_CPP(xyes,
1023 [#if __GNUC__ >= 3
1024 xyes
1025 #endif
1026 ], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no))
1027
1028 dnl Check for ICC.
1029 AC_MSG_CHECKING(for ICC)
1030 HAVE_ICC=no
1031 if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
1032 HAVE_ICC=yes
1033 fi
1034 AC_MSG_RESULT($HAVE_ICC)
1035
1036 dnl Determine the generated object format
1037 AC_CACHE_CHECK([whether the compiler can generate ELF objects],
1038 ac_cv_object_format, [
1039 echo 'int i;' > conftest.$ac_ext
1040 ac_cv_object_format=no
1041 if AC_TRY_EVAL(ac_compile); then
1042 case `/usr/bin/file conftest.$ac_objext` in
1043 *"ELF"*)
1044 ac_cv_object_format=elf
1045 ;;
1046 *)
1047 ac_cv_object_format=unknown
1048 ;;
1049 esac
1050 fi
1051 rm -rf conftest*
1052 ])
1053
1054 dnl CPU emulator sources
1055 if [[ "x$EMULATED_PPC" = "xyes" ]]; then
1056 CPUSRCS="\
1057 ../kpx_cpu/src/mathlib/ieeefp.cpp \
1058 ../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \
1059 ../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \
1060 ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp \
1061 ../kpx_cpu/src/cpu/ppc/ppc-translate.cpp"
1062 CPPFLAGS="$CPPFLAGS -I../kpx_cpu/include -I../kpx_cpu/src"
1063
1064 dnl Enable JIT compiler, if possible
1065 if [[ "x$WANT_JIT" = "xyes" ]]; then
1066 AC_CACHE_CHECK([whether dyngen can be used],
1067 ac_cv_use_dyngen, [
1068 case $host_cpu:$ac_cv_object_format in
1069 powerpc:elf)
1070 ac_cv_use_dyngen=yes
1071 ;;
1072 x86_64:elf)
1073 ac_cv_use_dyngen=yes
1074 ;;
1075 i?86:elf)
1076 ac_cv_use_dyngen=yes
1077 ;;
1078 *:*)
1079 ac_cv_use_dyngen=no
1080 ;;
1081 esac
1082 dnl Check for a suitable synthetic opcodes compiler (icc is faking itself as gcc 3.2.2)
1083 if [[ -z "$DYNGEN_CC" ]]; then
1084 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1085 DYNGEN_CC=$CXX
1086 else
1087 for p in /usr/bin /usr/local/bin; do
1088 gxx="$p/g++"
1089 if [[ -x "$gxx" ]]; then
1090 DYNGEN_CC="$gxx"
1091 fi
1092 done
1093 fi
1094 fi
1095 if [[ -z "$DYNGEN_CC" ]] || ! { echo '#include <limits>' | $DYNGEN_CC -xc++ -c -o /dev/null - >& /dev/null; }; then
1096 ac_cv_use_dyngen=no
1097 fi
1098 ])
1099 if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
1100 case $host_cpu in
1101 i?86)
1102 DYNGEN_OP_FLAGS="-fomit-frame-pointer -mpreferred-stack-boundary=2"
1103 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1104 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -falign-functions=0"
1105 else
1106 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -malign-functions=0"
1107 fi
1108 ;;
1109 esac
1110 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-limit=10000 -g0"
1111 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1112 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-reorder-blocks -fno-optimize-sibling-calls"
1113 fi
1114 else
1115 WANT_JIT=no
1116 fi
1117 AC_TRANSLATE_DEFINE(ENABLE_DYNGEN, $ac_cv_use_dyngen, [Define to enable dyngen engine])
1118 if [[ "x$WANT_JIT" = "xyes" ]]; then
1119 DYNGENSRCS="\
1120 ../kpx_cpu/src/cpu/jit/dyngen.c \
1121 ../kpx_cpu/src/cpu/jit/cxxdemangle.cpp"
1122 CPUSRCS="\
1123 ../kpx_cpu/src/cpu/jit/jit-cache.cpp \
1124 ../kpx_cpu/src/cpu/jit/basic-dyngen.cpp \
1125 ../kpx_cpu/src/cpu/ppc/ppc-dyngen.cpp $CPUSRCS"
1126 fi
1127 fi
1128 CPUSRCS="$CPUSRCS ../kpx_cpu/sheepshaver_glue.cpp"
1129 else
1130 WANT_JIT=no
1131 fi
1132 if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
1133 AC_CACHE_CHECK([whether static data regions are executable],
1134 ac_cv_have_static_data_exec, [
1135 AC_TRY_RUN([int main(void) {
1136 #if defined(__powerpc__)
1137 static unsigned int p[8] = {0x4e800020,};
1138 asm volatile("dcbst 0,%0" : : "r" (p) : "memory");
1139 asm volatile("sync" : : : "memory");
1140 asm volatile("icbi 0,%0" : : "r" (p) : "memory");
1141 asm volatile("sync" : : : "memory");
1142 asm volatile("isync" : : : "memory");
1143 ((void (*)(void))p)();
1144 return 0;
1145 #endif
1146 return 1;
1147 }], ac_cv_have_static_data_exec=yes, ac_cv_have_static_data_exec=no,
1148 dnl When cross-compiling, do not assume anything.
1149 ac_cv_have_static_data_exec=no
1150 )
1151 ])
1152 else
1153 ac_cv_use_dyngen=no
1154 fi
1155 AC_TRANSLATE_DEFINE(HAVE_STATIC_DATA_EXEC, "$ac_cv_have_static_data_exec",
1156 [Define if your system marks static data pages as executable.])
1157
1158 if [[ "x$WANT_JIT" = "xyes" ]]; then
1159 CPPFLAGS="$CPPFLAGS -DUSE_JIT"
1160 fi
1161
1162 dnl Generate Makefile.
1163 AC_SUBST(PERL)
1164 AC_SUBST(USE_DYNGEN, [$ac_cv_use_dyngen])
1165 AC_SUBST(DYNGENSRCS)
1166 AC_SUBST(DYNGEN_CC)
1167 AC_SUBST(DYNGEN_OP_FLAGS)
1168 AC_SUBST(SYSSRCS)
1169 AC_SUBST(CPUSRCS)
1170 AC_SUBST(BLESS)
1171 AC_SUBST(KEYCODES)
1172 AC_OUTPUT([
1173 Makefile
1174 ../MacOSX/Info.plist
1175 ])
1176
1177 dnl Print summary.
1178 echo
1179 echo SheepShaver configuration summary:
1180 echo
1181 echo SDL support ...................... : $SDL_SUPPORT
1182 echo FBDev DGA support ................ : $WANT_FBDEV_DGA
1183 echo XFree86 DGA support .............. : $WANT_XF86_DGA
1184 echo XFree86 VidMode support .......... : $WANT_XF86_VIDMODE
1185 echo Using PowerPC emulator ........... : $EMULATED_PPC
1186 echo Enable JIT compiler .............. : $WANT_JIT
1187 echo Enable video on SEGV signals ..... : $WANT_VOSF
1188 echo ESD sound support ................ : $WANT_ESD
1189 echo GTK user interface ............... : $WANT_GTK
1190 echo mon debugger support ............. : $WANT_MON
1191 echo Addressing mode .................. : $WANT_ADDRESSING_MODE
1192 echo Bad memory access recovery type .. : $sigsegv_recovery
1193 echo
1194 echo "Configuration done. Now type \"make\"."