ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/configure.ac
Revision: 1.36
Committed: 2005-07-06T05:26:01Z (18 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.35: +12 -10 lines
Log Message:
Fix detection of GCC versions, avoid AC_EGREP_CPP (J.P. Larocque)

File Contents

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