ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/configure.ac
Revision: 1.69
Committed: 2010-10-19T22:20:01Z (13 years, 11 months ago) by asvitkine
Branch: MAIN
Changes since 1.68: +27 -0 lines
Log Message:
[Geoffrey Brown]
VHD support

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