ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.75
Committed: 2009-03-03T08:04:42Z (15 years, 8 months ago) by asvitkine
Branch: MAIN
Changes since 1.74: +63 -21 lines
Log Message:
[patch by Mike Sliczniak]

Here is a patch to allow compiling of SS and B2 with an SDL Framework. You can
get this by downloading from:

http://www.libsdl.org/release/SDL-1.2.13.dmg

Here is how I tested on an intel 32-bit mac with Mac OS X 10.5.6:

SS ./autogen.sh --disable-standalone-gui --enable-vosf --enable-sdl-framework --enable-sdl-framework-prefix=/Users/mzs/Library/Frameworks --enable-sdl-video --disable-sdl-audio --enable-addressing=real
--without-esd --without-gtk --without-mon --without-x

SS /autogen.sh --disable-standalone-gui --enable-vosf --disable-sdl-framework --disable-sdl-video --disable-sdl-audio --enable-addressing=real --without-esd --without-gtk --without-mon --with-x

B2 ./autogen.sh --disable-standalone-gui --enable-vosf --enable-sdl-framework --enable-sdl-framework-prefix=/Users/mzs/Library/Frameworks --enable-sdl-video --enable-sdl-audio --enable-addressing=real --without-esd --without-gtk --without-mon --without-x --enable-jit-compiler

B2 ./autogen.sh --disable-standalone-gui --enable-vosf --disable-sdl-framework --disable-sdl-video --disable-sdl-audio --enable-addressing=real --with-esd --without-gtk --without-mon --with-x --enable-jit-compiler

(esound does not really work on mac, it needs some better coreaudio patches.)

configure.ac for SS has two little additional fixes so that the Cocoa prefs gui
does not get built if you are building for X11 and so that you can use esd, sdl,
or coreaudio for sound.

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