1# -*- Autoconf -*-
2# Process this file with autoconf to produce a configure script.
3
4AC_PREREQ([2.67])
5
6m4_define([fsbuild_version], [3.1.35])
7m4_define([fsbuild_version_major], [3])
8m4_define([fsbuild_version_minor], [1])
9m4_define([fsbuild_version_revision], [35])
10m4_define([fsbuild_commit], [])
11
12AC_INIT([FS-UAE], [fsbuild_version],
13        [frode@fs-uae.net], [fs-uae], [https://fs-uae.net])
14AC_CONFIG_AUX_DIR([.])
15AC_CANONICAL_HOST
16AC_CONFIG_SRCDIR([src/main.cpp])
17AC_CONFIG_HEADERS([config.h])
18
19# AC_CONFIG_MACRO_DIRS requires newer autoconf/automake than is found in
20# Debian 7.0
21# AC_CONFIG_MACRO_DIRS([m4])
22m4_include([m4/ax_c___builtin_expect.m4])
23m4_include([m4/ax_check_compile_flag.m4])
24m4_include([m4/ax_check_link_flag.m4])
25m4_include([m4/ax_gcc_var_attribute.m4])
26m4_include([m4/ax_gcc_func_attribute.m4])
27
28AM_INIT_AUTOMAKE([tar-ustar subdir-objects])
29
30AC_SUBST([PACKAGE_SERIES], [devel])
31
32AC_DEFINE_UNQUOTED([UAE_BASE_VERSION], ["WinUAE 3300b2"],
33[Which UAE core this version is based on.])
34
35PACKAGE_MAJOR=`echo ${PACKAGE_VERSION} | sed -e 's,\(\.*\)\..*\..*,\1,g'`
36PACKAGE_MINOR=`echo ${PACKAGE_VERSION} | sed -e 's,.*\.\(.*\)\..*,\1,g'`
37PACKAGE_REVISION=`echo ${PACKAGE_VERSION} | sed -e 's,.*\..*\.\([[0-9]]*\).*,\1,g'`
38AC_SUBST(PACKAGE_MAJOR)
39AC_DEFINE_UNQUOTED([PACKAGE_MAJOR], [$PACKAGE_MAJOR], [Package major version])
40AC_SUBST(PACKAGE_MINOR)
41AC_DEFINE_UNQUOTED([PACKAGE_MINOR], [$PACKAGE_MINOR], [Package minor version])
42AC_SUBST(PACKAGE_REVISION)
43AC_DEFINE_UNQUOTED([PACKAGE_REVISION], [$PACKAGE_REVISION], [Package revision])
44
45
46# Checks for programs
47
48AC_PROG_CC
49AC_PROG_CXX
50AC_PROG_CPP
51AC_PROG_INSTALL
52# AC_PROG_LIBTOOL
53AC_PROG_LN_S
54AC_PROG_MAKE_SET
55AC_PROG_RANLIB
56AM_PROG_CC_C_O
57# AC_PATH_TOOL(OBJCOPY, objcopy)
58AC_PATH_PROG([MSGFMT], [msgfmt], [not found])
59if test "$MSGFMT" = "not found"; then
60  AC_MSG_ERROR([msgfmt not found on path])
61fi
62AC_PATH_PROG([ZIP], [zip], [not found])
63if test "$ZIP" = "not found"; then
64  AC_MSG_ERROR([zip not found on path])
65fi
66PKG_PROG_PKG_CONFIG
67
68
69# Feature test macros
70
71AC_DEFUN([OPT_FEATURE], [
72AC_ARG_ENABLE([$3], [AS_HELP_STRING([--disable-$3], [$4])])
73AS_IF([test x$enable_$2 != xno], [AC_DEFINE([$1], [1], [$4])])
74AM_CONDITIONAL([$1], [test x$enable_$2 != xno])
75])
76
77AC_DEFUN([DIS_FEATURE], [
78AC_ARG_ENABLE([$3], [AS_HELP_STRING([--enable-$3], [$4])])
79AS_IF([test x$enable_$2 = xyes], [AC_DEFINE([$1], [1], [$4])])
80AM_CONDITIONAL([$1], [test x$enable_$2 = xyes])
81])
82
83AC_DEFUN([REQ_FEATURE], [
84AC_DEFINE([$1], [1], [$4])
85AM_CONDITIONAL([$1], [true])
86])
87
88
89# Misc system checks
90
91AC_SYS_LARGEFILE
92# AC_LTDL_SHLIBEXT
93
94
95# Static build
96
97DIS_FEATURE([STATIC_BUILD], [static], [static],
98            [static build (works on Windows)])
99
100AS_IF([test "x$enable_static" = xyes],
101      [PKG_CONFIG="$PKG_CONFIG --static"])
102
103
104# Compiler / linker feature checks
105
106AX_CHECK_COMPILE_FLAG(-fno-strict-overflow,
107[f_no_strict_overflow=yes],
108[f_no_strict_overflow=no])
109AM_CONDITIONAL([F_NO_STRICT_OVERFLOW],
110[test x$f_no_strict_overflow = xyes])
111
112AX_CHECK_COMPILE_FLAG(-fno-strict-aliasing,
113[f_no_strict_aliasing=yes],
114[f_no_strict_aliasing=no])
115AM_CONDITIONAL([F_NO_STRICT_ALIASING],
116[test x$f_no_strict_aliasing = xyes])
117
118AX_CHECK_COMPILE_FLAG(-Wmissing-declarations,
119[w_missing_declarations=yes],
120[w_missing_declarations=no])
121AM_CONDITIONAL([W_MISSING_DECLARATIONS],
122[test x$w_missing_declarations = xyes])
123
124AX_CHECK_COMPILE_FLAG(-Waddress,
125[w_address=yes],
126[w_address=no])
127AM_CONDITIONAL([W_ADDRESS],
128[test x$w_address = xyes])
129
130AX_CHECK_COMPILE_FLAG(-Wmissing-format-attribute,
131[w_missing_format_attribute=yes],
132[w_missing_format_attribute=no])
133AM_CONDITIONAL([W_MISSING_FORMAT_ATTRIBUTE],
134[test x$w_missing_format_attribute = xyes])
135
136AX_CHECK_COMPILE_FLAG(-fno-pie,
137[fno_pie=yes],
138[fno_pie=no])
139AM_CONDITIONAL([FNO_PIE],
140[test x$fno_pie = xyes])
141
142AX_CHECK_COMPILE_FLAG(-fno-PIE,
143[fno_pie_cap=yes],
144[fno_pie_cap=no])
145AM_CONDITIONAL([FNO_PIE_CAP],
146[test x$fno_pie_cap = xyes])
147
148AX_CHECK_LINK_FLAG(-no-pie,
149[no_pie=yes],
150[no_pie=no])
151AM_CONDITIONAL([NO_PIE],
152[test x$no_pie = xyes])
153
154# AX_CHECK_LINK_FLAG([-Wl,-Tdata=0x10000000],
155# [wl_tdata=yes],
156# [wl_tdata=no])
157# AM_CONDITIONAL([WL_TDATA],
158# [test x$wl_tdata = xyes])
159
160AX_C___BUILTIN_EXPECT
161
162# Checks for libraries.
163
164AC_SUBST([CARBON_LIBS])
165AS_CASE([$host_os],
166[darwin*], [
167	AC_MSG_NOTICE([Using Carbon.framework])
168	CARBON_LIBS="-framework Carbon"
169])
170
171AC_ARG_WITH(cef, AS_HELP_STRING(
172    [--with-cef], [use Chromium Embedded Framework (experimental)]))
173AM_CONDITIONAL([BUILTIN_CEF], [test x$with_cef = xyes])
174AS_IF([test "x$with_cef" = xyes], [
175    AC_DEFINE([WITH_CEF], [1], [Define to 1 to use CEF])
176])
177
178AC_CHECK_LIB([compat], [ftime])
179
180AC_CHECK_LIB([dl], [dlopen])
181
182# not using freetype right now
183# AC_DEFINE([USE_FREETYPE], [1], [Define to 1 to use FreeType])
184# PKG_CHECK_MODULES([FREETYPE], [freetype2])
185AC_SUBST([FREETYPE_CFLAGS])
186AC_SUBST([FREETYPE_LIBS])
187
188AC_CHECK_LIB([gdi32], [main])
189
190AC_DEFINE([USE_GLIB], [1], [Define to 1 to use GLib])
191PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.32 gthread-2.0])
192
193AC_CHECK_LIB([Iphlpapi], [main])
194
195AC_ARG_WITH(glad, AS_HELP_STRING(
196    [--without-glad], [use GLAD OpenGL loader]))
197AS_IF([test "x$with_glad" != xno], [
198    AC_DEFINE([WITH_GLAD], [1], [Define to 1 to use GLAD])
199])
200AM_CONDITIONAL([WITH_GLAD], [test x$with_glad != xno])
201
202AC_ARG_WITH(glew, AS_HELP_STRING(
203    [--with-glew], [use GLEW library]))
204AS_IF([test "x$with_glew" = xyes], [
205    PKG_CHECK_MODULES([GLEW], [glew])
206    AC_DEFINE([WITH_GLEW], [1], [Define to 1 to use GLEW])
207])
208
209AC_ARG_WITH(libmpeg2, AS_HELP_STRING(
210    [--without-libmpeg2], [or --with-libmpeg2=builtin to use included version]))
211AM_CONDITIONAL([BUILTIN_LIBMPEG2], [test x$with_libmpeg2 = xbuiltin])
212AS_IF([test "x$with_libmpeg2" != xno], [
213    AS_IF([test "x$with_libmpeg2" = xbuiltin], [
214    ], [
215        PKG_CHECK_MODULES([LIBMPEG2], [libmpeg2 libmpeg2convert])
216    ])
217    AC_DEFINE([WITH_LIBMPEG2], [1], [Define to 1 to use libmpeg2])
218])
219
220AM_CONDITIONAL([BUILTIN_MANYMOUSE], [true])
221
222# The built-in Lua has been sandboxed, which is why we do not
223# want to pick up the system lua, if present.
224
225AC_SUBST([LUA_CFLAGS])
226AS_CASE([$host_os],
227	[mingw*], [],
228	[LUA_CFLAGS="-DLUA_USE_POSIX"]
229)
230
231AC_SUBST([IOKIT_LIBS])
232AS_CASE([$host_os],
233[darwin*], [
234	AC_MSG_NOTICE([Using IOKit.framework])
235	IOKIT_LIBS="-framework IOKit"
236])
237
238AC_CHECK_LIB([m], [floor])
239
240# Workaround for bug in libsdl2-dev / ubuntu, SDL headers
241# depend on mirclient/mircommon headers.
242# https://bugs.launchpad.net/ubuntu/+source/libsdl2/+bug/1306629
243PKG_CHECK_MODULES([MIR], [mirclient], [
244], [
245	AC_SUBST([MIR_CFLAGS])
246])
247
248# AC_SUBST([USE_OPENAL], [1])
249AC_DEFINE([WITH_OPENAL], [1], [Define to 1 to use OpenAL])
250PKG_CHECK_MODULES([OPENAL], [openal], [
251], [
252        AS_CASE([$host_os],
253	[darwin*], [
254		AC_MSG_NOTICE([Using OpenAL.framework])
255		OPENAL_LIBS="-framework OpenAL"
256	],
257	[
258		AC_CHECK_LIB([openal], [alcOpenDevice], [
259			OPENAL_LIBS="-lopenal"
260		], [
261			AC_MSG_FAILURE([OpenAL not found])
262		])
263	])
264	AC_SUBST([OPENAL_CFLAGS])
265	AC_SUBST([OPENAL_LIBS])
266
267])
268
269# AC_SUBST([USE_OPENGL], [1])
270AC_DEFINE([USE_OPENGL], [1], [Define to 1 to use OpenGL])
271PKG_CHECK_MODULES([OPENGL], [gl], [
272], [
273        AS_CASE([$host_os],
274	[darwin*], [
275		AC_MSG_NOTICE([Using OpenGL.framework])
276		OPENGL_LIBS="-framework OpenGL"
277
278	],
279	[
280		AC_CHECK_LIB([GL], [glViewport])
281		AC_CHECK_LIB([OpenGL32], [main], [OPENGL_LIBS=-lOpenGL32])
282	])
283	AC_SUBST([OPENGL_CFLAGS])
284	AC_SUBST([OPENGL_LIBS])
285])
286
287AC_DEFINE([USE_PNG], [1], [Define to 1 to use libpng])
288PKG_CHECK_MODULES([PNG], [libpng])
289
290AC_ARG_WITH(qt, AS_HELP_STRING(
291    [--with-qt], [use QT]))
292AS_IF([test "x$with_qt" = xyes], [
293    AC_DEFINE([WITH_QT], [1], [Define to 1 to use QT])
294    PKG_CHECK_MODULES([QT], [Qt5Gui])
295])
296
297AC_DEFINE([USE_SDL2], [1], [Define to 1 to use SDL 2.0])
298PKG_CHECK_MODULES([SDL2], [sdl2])
299AC_DEFINE([USE_SDL_VIDEO], [1], [Define to 1 to use SDL for video])
300AC_DEFINE([USE_SDL_INPUT], [1], [Define to 1 to use SDL for input])
301
302AS_CASE([$host_os],
303[mingw*], [],
304[darwin*], [],
305[
306    X11_LIBS="-lX11"
307    AC_DEFINE([USE_X11], [1], [Define to 1 to use X11])
308
309#    X11_LIBS="$X11_LIBS -lXtst"
310#    AC_DEFINE([USE_X11_XTEST], [1], [Define to 1 to use X11 XTEST extension])
311])
312AC_SUBST([X11_LIBS])
313
314AC_DEFINE([USE_ZLIB], [1], [Define to 1 to use zlib])
315PKG_CHECK_MODULES([ZLIB], [zlib], [
316], [
317	AC_CHECK_LIB([z], [compress])
318	AC_SUBST([ZLIB_CFLAGS])
319	AC_SUBST([ZLIB_LIBS])
320])
321
322AC_CHECK_LIB([Winmm], [main])
323
324AC_CHECK_LIB([Ws2_32], [main])
325
326
327# Operating system
328
329AC_SUBST([OS_CPPFLAGS])
330AC_SUBST([OS_LDFLAGS])
331AC_SUBST([OS_NAME])
332AC_SUBST([OS_NAME_2])
333AC_SUBST([OS_NAME_3])
334AC_SUBST([PACKAGE_ARCH])
335AS_CASE([$host_os],
336[mingw*], [
337    OS_NAME="windows"
338    OS_NAME_2="Windows"
339    OS_NAME_3="Windows"
340    OS_CPPFLAGS="-DWINDOWS"
341    AS_CASE([$host_cpu],
342    [x86_64], [
343        OS_LDFLAGS="-mwindows -Wl,--image-base=0x400000"
344        PACKAGE_ARCH="x86-64"
345    ], [
346        OS_LDFLAGS="-mwindows -Wl,--large-address-aware"
347        PACKAGE_ARCH="x86"
348    ])
349    LOADABLE_MODULE_EXT=".dll"
350],
351[linux*], [
352    OS_NAME="linux"
353    OS_NAME_2="Linux"
354    OS_NAME_3="Linux"
355    OS_CPPFLAGS="-DLINUX"
356    LOADABLE_MODULE_EXT=".so"
357],
358[darwin*], [
359    OS_NAME="macos"
360    OS_NAME_2="macOS"
361    OS_NAME_3="macOS"
362    OS_CPPFLAGS="-DMACOSX -DMACOS"
363    LOADABLE_MODULE_EXT=".so"
364    AS_CASE([$host_cpu],
365    [x86_64], [
366        OS_LDFLAGS="-headerpad_max_install_names -pagezero_size 0x2000 -rpath @executable_path/../Frameworks"
367    ], [
368        OS_LDFLAGS="-headerpad_max_install_names -rpath @executable_path/../Frameworks"
369    ])
370],
371[freebsd*], [
372    OS_NAME="freebsd"
373    OS_NAME_2="FreeBSD"
374    OS_NAME_3="FreeBSD"
375    OS_CPPFLAGS="-DFREEBSD"
376    LOADABLE_MODULE_EXT=".so"
377],
378[openbsd*], [
379    OS_NAME="openbsd"
380    OS_NAME_2="OpenBSD"
381    OS_NAME_3="OpenBSD"
382    OS_CPPFLAGS="-DOPENBSD"
383    LOADABLE_MODULE_EXT=".so"
384],
385[dragonfly*], [
386    OS_NAME="dragonflybsd"
387    OS_NAME_2="DragonFlyBSD"
388    OS_NAME_3="DragonFlyBSD"
389    OS_CPPFLAGS="-DDRAGONFLYBSD"
390    LOADABLE_MODULE_EXT=".so"
391],
392[
393    OS_NAME="unknown"
394    OS_NAME_2="Unknown OS"
395    OS_NAME_3="Unknown"
396    LOADABLE_MODULE_EXT=".unknown"
397])
398
399AM_CONDITIONAL([LINUX], [test x$OS_NAME = xlinux])
400AM_CONDITIONAL([MACOS], [test x$OS_NAME = xmacos])
401AM_CONDITIONAL([WINDOWS], [test x$OS_NAME = xwindows])
402
403# Not using libtool right now, but use name LT_MODULE_EXT anyway in case
404# transitioning to libtool later.
405AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$LOADABLE_MODULE_EXT"],
406[Define to the extension used for runtime loadable modules, say, ".so".])
407
408AC_DEFINE_UNQUOTED([OS_NAME], ["$OS_NAME"],
409[Define to a name identifier for the operating system, "linux".])
410
411AC_DEFINE_UNQUOTED([OS_NAME_2], ["$OS_NAME_2"],
412[Define to a nicely formatted name for the operating system, "Linux".])
413
414AC_DEFINE_UNQUOTED([OS_NAME_3], ["$OS_NAME_3"],
415[New name identifier for the operating system, "Linux".])
416
417# Checks for header files.
418
419AC_CHECK_HEADERS([AL/al.h])
420AC_CHECK_HEADERS([AL/alc.h])
421AC_CHECK_HEADERS([arpa/inet.h])
422AC_CHECK_HEADERS([byteswap.h])
423AC_CHECK_HEADERS([dlfcn.h])
424AC_CHECK_HEADERS([endian.h])
425AC_CHECK_HEADERS([fcntl.h])
426AC_CHECK_HEADERS([fenv.h])
427AC_CHECK_HEADERS([float.h])
428AC_CHECK_HEADERS([inttypes.h])
429# AC_CHECK_HEADERS([sys/ipc.h])
430AC_CHECK_HEADERS([libkern/OSByteOrder.h])
431AC_CHECK_HEADERS([limits.h])
432AC_CHECK_HEADERS([locale.h])
433AC_CHECK_HEADERS([malloc.h])
434AC_CHECK_HEADERS([netdb.h])
435AC_CHECK_HEADERS([netinet/in.h])
436AC_CHECK_HEADERS([OpenAL/al.h])
437AC_CHECK_HEADERS([OpenAL/alc.h])
438AC_CHECK_HEADERS([stddef.h])
439AC_CHECK_HEADERS([stdint.h])
440AC_CHECK_HEADERS([stdlib.h])
441AC_CHECK_HEADERS([string.h])
442AC_CHECK_HEADERS([strings.h])
443AC_CHECK_HEADERS([sys/endian.h])
444AC_CHECK_HEADERS([sys/filsys.h])
445AC_CHECK_HEADERS([sys/fs/s5param.h])
446AC_CHECK_HEADERS([sys/ioctl.h])
447# AC_CHECK_HEADERS([sys/mman.h])
448AC_CHECK_HEADERS([sys/mount.h])
449AC_CHECK_HEADERS([sys/param.h])
450AC_CHECK_HEADERS([sys/socket.h])
451AC_CHECK_HEADERS([sys/statfs.h])
452AC_CHECK_HEADERS([sys/statvfs.h])
453AC_CHECK_HEADERS([sys/time.h])
454AC_CHECK_HEADERS([sys/timeb.h])
455AC_CHECK_HEADERS([sys/vfs.h])
456AC_CHECK_HEADERS([termios.h])
457AC_CHECK_HEADERS([unistd.h])
458AC_CHECK_HEADERS([utime.h])
459AC_CHECK_HEADERS([values.h])
460AC_CHECK_HEADERS([wchar.h])
461
462
463# Checks for typedefs, structures, and compiler characteristics.
464
465AC_C_BIGENDIAN
466AC_C_CONST
467AC_C_INLINE
468AC_C_RESTRICT
469AC_C_VOLATILE
470
471AX_GCC_FUNC_ATTRIBUTE(always_inline)
472AX_GCC_FUNC_ATTRIBUTE(fastcall)
473AX_GCC_FUNC_ATTRIBUTE(format)
474AX_GCC_FUNC_ATTRIBUTE(noinline)
475AX_GCC_FUNC_ATTRIBUTE(noreturn)
476AX_GCC_FUNC_ATTRIBUTE(regparm)
477AX_GCC_FUNC_ATTRIBUTE(unused)
478
479AX_GCC_VAR_ATTRIBUTE(unused)
480
481# FIXME: not found on the mingw box
482# AC_CHECK_HEADER_STDBOOL
483
484AC_CHECK_MEMBERS([struct stat.st_rdev])
485AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec])
486AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec])
487AC_CHECK_MEMBERS([struct stat.st_mtime_nsec])
488AC_CHECK_MEMBERS([struct in_addr.S_un])
489AC_CHECK_MEMBERS([struct ucontext.uc_mcontext.gregs],
490	[], [], [[#include <sys/ucontext.h>]])
491AC_CHECK_MEMBERS([struct ucontext_t.uc_mcontext.gregs],
492	[], [], [[#include <sys/ucontext.h>]])
493
494AC_CHECK_TYPES([ptrdiff_t])
495AC_STRUCT_ST_BLOCKS
496AC_TYPE_INT16_T
497AC_TYPE_INT32_T
498AC_TYPE_INT64_T
499AC_TYPE_INT8_T
500AC_TYPE_MODE_T
501AC_TYPE_OFF_T
502AC_TYPE_SIZE_T
503AC_TYPE_SSIZE_T
504AC_TYPE_UID_T
505AC_TYPE_UINT16_T
506AC_TYPE_UINT32_T
507AC_TYPE_UINT64_T
508AC_TYPE_UINT8_T
509AC_CHECK_TYPES([__uint128_t])
510AC_TYPE_LONG_LONG_INT
511
512AC_CHECK_SIZEOF(int)
513AC_CHECK_SIZEOF(long)
514AC_CHECK_SIZEOF(long long)
515AC_CHECK_SIZEOF(long long int)
516AC_CHECK_SIZEOF(short)
517AC_CHECK_SIZEOF(void *)
518
519# Checks for library functions.
520
521AC_FUNC_ALLOCA
522AC_FUNC_CHOWN
523AC_FUNC_ERROR_AT_LINE
524AC_FUNC_FORK
525AC_FUNC_FSEEKO
526AC_FUNC_MKTIME
527AC_FUNC_MMAP
528AC_FUNC_REALLOC
529AC_FUNC_STRCOLL
530AC_FUNC_STRTOD
531AC_CHECK_FUNCS([atexit])
532AC_CHECK_FUNCS([bzero])
533
534# AC_CHECK_FUNCS([bswap_16])
535# AC_CHECK_FUNCS([bswap_32])
536
537AC_CHECK_FUNCS([dlopen])
538AC_CHECK_FUNCS([dup2])
539AC_CHECK_FUNCS([floor])
540AC_CHECK_FUNCS([fseeko64])
541AC_CHECK_FUNCS([ftello64])
542AC_CHECK_FUNCS([ftime])
543AC_CHECK_FUNCS([ftruncate])
544AC_CHECK_FUNCS([getcwd])
545AC_CHECK_FUNCS([gethostbyaddr])
546AC_CHECK_FUNCS([gethostbyname])
547AC_CHECK_FUNCS([gethostname])
548AC_CHECK_FUNCS([getpagesize])
549AC_CHECK_FUNCS([gmtime_r])
550AC_CHECK_FUNCS([index])
551AC_CHECK_FUNCS([inet_aton])
552AC_CHECK_FUNCS([inet_ntoa])
553AC_CHECK_FUNCS([localeconv])
554AC_CHECK_FUNCS([localtime_r])
555AC_CHECK_FUNCS([memchr])
556AC_CHECK_FUNCS([memmove])
557AC_CHECK_FUNCS([memset])
558AC_CHECK_FUNCS([mkdir])
559AC_CHECK_FUNCS([munmap])
560AC_CHECK_FUNCS([pow])
561AC_CHECK_FUNCS([putenv])
562AC_CHECK_FUNCS([rmdir])
563AC_CHECK_FUNCS([posix_memalign])
564AC_CHECK_FUNCS([select])
565AC_CHECK_FUNCS([setenv])
566AC_CHECK_FUNCS([setlocale])
567AC_CHECK_FUNCS([socket])
568AC_CHECK_FUNCS([sqrt])
569AC_CHECK_FUNCS([stpcpy])
570AC_CHECK_FUNCS([strcasecmp])
571AC_CHECK_FUNCS([strchr])
572AC_CHECK_FUNCS([strcspn])
573AC_CHECK_FUNCS([strdup])
574AC_CHECK_FUNCS([strerror])
575AC_CHECK_FUNCS([strlcpy])
576AC_CHECK_FUNCS([strncasecmp])
577AC_CHECK_FUNCS([strpbrk])
578AC_CHECK_FUNCS([strrchr])
579AC_CHECK_FUNCS([strspn])
580AC_CHECK_FUNCS([strstr])
581AC_CHECK_FUNCS([strtol])
582AC_CHECK_FUNCS([strtoul])
583AC_CHECK_FUNCS([strtoull])
584AC_CHECK_FUNCS([tzset])
585AC_CHECK_FUNCS([utime])
586
587
588# Check for time functions and whether we have support for monotonic clock.
589
590AC_CHECK_FUNCS([clock_gettime])
591AC_CHECK_FUNCS([gettimeofday])
592AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [#include <time.h>])
593
594
595# Check for POSIX support.
596
597AS_CASE([$host_os],
598	[mingw*], [],
599	[
600		AC_DEFINE([POSIX_SERIAL], [1],
601			[Define to 1 if you have POSIX serial support])
602	]
603)
604#AC_CHECK_FUNC(ioctl, [
605#	AC_DEFINE(POSIX_SERIAL)
606#])
607
608
609# Byte swapping
610
611AC_MSG_CHECKING(for bswap_16)
612AC_TRY_LINK([
613	#if HAVE_BYTESWAP_H
614	# include <byteswap.h>
615	#endif
616], [
617	bswap_16(0x12);
618], [
619	AC_DEFINE(HAVE_BSWAP_16, 1, [Define to 1 if you have the 'bswap_16' function.])
620	AC_MSG_RESULT(yes)
621], [
622	AC_MSG_RESULT(no)
623])
624AC_MSG_CHECKING(for bswap_32)
625AC_TRY_LINK([
626	#if HAVE_BYTESWAP_H
627	# include <byteswap.h>
628	#endif
629], [
630	bswap_32(0x1234);
631], [
632	AC_DEFINE(HAVE_BSWAP_32, 1, [Define to 1 if you have the 'bswap_32' function.])
633	AC_MSG_RESULT(yes)
634], [
635	AC_MSG_RESULT(no)
636])
637
638
639# More feature macros. Many of these are generally always enabled, and
640# compiling without them may not work (without further changes to
641# source code).
642
643OPT_FEATURE([A2065], [a2065], [a2065],
644            [A2065 ethernet card])
645REQ_FEATURE([A2091], [a2091], [a2091],
646            [A590/A2091 SCSI])
647OPT_FEATURE([ACTION_REPLAY], [action_replay], [action-replay],
648            [Action Replay 1/2/3 support])
649OPT_FEATURE([AGA], [aga], [aga],
650            [AGA chipset emulation])
651DIS_FEATURE([AHI], [ahi], [ahi],
652            [builtin AHI device (unsupported)])
653OPT_FEATURE([ARCADIA], [arcadia], [arcadia],
654            [Arcadia arcade system])
655REQ_FEATURE([AUTOCONFIG], [autoconfig], [autoconfig],
656            [autoconfig support, fast ram, harddrives etc...])
657OPT_FEATURE([BSDSOCKET], [bsdsocket], [bsdsocket],
658            [built-in bsdsocket.library])
659DIS_FEATURE([WITH_BUILTIN_SLIRP], [builtin_slirp], [builtin-slirp],
660            [built-in SLIRP implementation (unsupported)])
661OPT_FEATURE([CAPS], [caps], [caps],
662            [IPF support via libcapsimage])
663OPT_FEATURE([CD32], [cd32], [cd32],
664            [CD32 emulation])
665OPT_FEATURE([CDTV], [cdtv], [cdtv],
666            [CDTV emulation])
667OPT_FEATURE([CODEGEN], [codegen], [codegen],
668            [Code generation (disable for cross-compilation)])
669OPT_FEATURE([CPUEMU_0], [cpuemu_0], [cpuemu-0],
670            [generic 680x0 emulation])
671OPT_FEATURE([CPUEMU_11], [cpuemu_11], [cpuemu-11],
672            [68000/68010 prefetch emulation])
673REQ_FEATURE([CPUEMU_13], [cpuemu_13], [cpuemu-13],
674            [68000/68010 cycle-exact cpu&blitter])
675OPT_FEATURE([CPUEMU_20], [cpuemu_20], [cpuemu-20],
676            [68020 prefetch])
677OPT_FEATURE([CPUEMU_21], [cpuemu_21], [cpuemu-21],
678            [68020 "cycle-exact" + blitter])
679OPT_FEATURE([CPUEMU_22], [cpuemu_22], [cpuemu-22],
680            [68030 prefetch])
681OPT_FEATURE([CPUEMU_23], [cpuemu_23], [cpuemu-23],
682            [68030 "cycle-exact" + blitter])
683OPT_FEATURE([CPUEMU_24], [cpuemu_24], [cpuemu-24],
684            [68060 "cycle-exact" + blitter])
685OPT_FEATURE([CPUEMU_25], [cpuemu_25], [cpuemu-25],
686            [68040 "cycle-exact" + blitter (needs cpuemu-24)])
687OPT_FEATURE([CPUEMU_31], [cpuemu_31], [cpuemu-31],
688            [Aranym 68040 MMU])
689OPT_FEATURE([CPUEMU_32], [cpuemu_32], [cpuemu-32],
690            [Previous 68030 MMU])
691OPT_FEATURE([CPUEMU_33], [cpuemu_33], [cpuemu-33],
692            [68060 MMU])
693OPT_FEATURE([CPUEMU_40], [cpuemu_40], [cpuemu-40],
694            [generic 680x0 with JIT direct memory access])
695OPT_FEATURE([CPUEMU_50], [cpuemu_50], [cpuemu-50],
696            [generic 680x0 with indirect memory access])
697REQ_FEATURE([WITH_CPUBOARD], [cpuboard], [cpuboard],
698            [cpu board emulation])
699OPT_FEATURE([DEBUGGER], [debugger], [debugger],
700            [debugger support (cannot be disabled right now)])
701OPT_FEATURE([A_DMS], [dms], [dms],
702            [DMS support])
703OPT_FEATURE([DRIVESOUND], [drivesound], [drivesound],
704            [drive sound emulation])
705OPT_FEATURE([FDI2RAW], [fdi2raw], [fdi2raw],
706            [FDI 1.0 and 2.x image support])
707REQ_FEATURE([FILESYS], [filesys], [filesys],
708            [directory hard drives])
709REQ_FEATURE([FPUEMU], [fpuemu], [fpuemu],
710            [FPU emulation])
711DIS_FEATURE([FSE_DRIVERS], [drivers], [drivers],
712            [multiple driver backends (experimental)])
713OPT_FEATURE([GFXBOARD], [gfxboard], [gfxboard],
714            [GFX hardware boards])
715AC_ARG_ENABLE([jit], [AS_HELP_STRING([--disable-jit], [JIT compiler])])
716AS_IF([test "x$enable_jit" != xno], [
717    AC_TRY_COMPILE([
718    ], [
719        #if !defined(__i386__) && !defined(__x86_64__)
720        #error JIT is only supported on x86/x86-64
721        #endif
722        #if defined(__OpenBSD__) || defined(__FreeBSD__)
723        #error no JIT on OpenBSD/FreeBSD right now
724        #endif
725    ], [
726        AC_DEFINE([JIT], [1], [Define to 1 to enable JIT compilation])
727    ], [
728        if test "x$enable_jit" = xyes; then
729            AC_MSG_FAILURE(
730                [JIT is not supported on $host])
731        else
732            enable_jit=no
733        fi
734    ])
735])
736AM_CONDITIONAL([JIT],
737[test x$enable_jit != xno])
738
739OPT_FEATURE([USE_JIT_FPU], [jit_fpu], [jit-fpu],
740            [JIT compilation of FPU instructions])
741DIS_FEATURE([WITH_LUA], [lua], [lua],
742            [LUA scripting (unfinished)])
743OPT_FEATURE([WITH_NETPLAY], [netplay], [netplay],
744            [netplay support])
745OPT_FEATURE([NCR], [ncr], [ncr],
746            [A4000T/A4091, 53C710/53C770 SCSI])
747OPT_FEATURE([NCR9X], [ncr9x], [ncr9x],
748            [53C9X SCSI])
749OPT_FEATURE([PARALLEL_PORT], [parallel_port], [parallel-port],
750            [parallell port (printer) emulation])
751DIS_FEATURE([WITH_PEARPC_CPU], [pearpc_cpu], [pearpc-cpu],
752            [use PearPC for PPC emulation (deprecated)])
753REQ_FEATURE([PICASSO96], [picasso96], [picasso96],
754            [Picasso 96 (uaegfx.card)])
755OPT_FEATURE([WITH_PPC], [ppc], [ppc],
756            [PPC (requires cpu board)])
757OPT_FEATURE([PROWIZARD], [prowizard], [prowizard],
758            [prowizard])
759OPT_FEATURE([SAVESTATE], [savestate], [savestate],
760            [save state support])
761OPT_FEATURE([SCP], [scp], [scp],
762            [SuperCardPro floppy image support])
763OPT_FEATURE([WITH_SEGTRACKER], [segtracker], [segtracker],
764            [segtracker support in debugger])
765OPT_FEATURE([SERIAL_PORT], [serial_port], [serial-port],
766            [serial port emulation])
767OPT_FEATURE([WITH_SLIRP], [slirp], [slirp],
768            [SLIRP (user mode NAT)])
769OPT_FEATURE([WITH_SOFTFLOAT], [softfloat], [softfloat],
770            [use softfloat library])
771OPT_FEATURE([WITH_QEMU_CPU], [qemu_cpu], [qemu-cpu],
772            [use QEMU plugin for PPC emulation])
773OPT_FEATURE([WITH_QEMU_SLIRP], [qemu_slirp], [qemu-slirp],
774            [use QEMU plugin for SLIRP implementation])
775REQ_FEATURE([WITH_TOCCATA], [toccata], [toccata],
776            [Toccata sound card emulation])
777OPT_FEATURE([WITH_UAENATIVE], [uaenative], [uaenative],
778            [uaenative.library])
779OPT_FEATURE([SANA2], [uaenet], [uaenet],
780            [uaenet.device])
781OPT_FEATURE([SCSIEMU], [uaescsi], [uaescsi],
782            [uaescsi.device])
783OPT_FEATURE([UAESERIAL], [uaeserial], [uaeserial],
784            [uaeserial.device])
785OPT_FEATURE([WITH_UDIS86], [udis86], [udis86],
786            [UDIS86 x86/x86-64 disassembler])
787OPT_FEATURE([WITH_VPAR], [vpar], [vpar],
788            [vpar virtual parallel port])
789OPT_FEATURE([WITH_XML_SHADER], [xml_shader], [xml-shader],
790            [XML shader support])
791OPT_FEATURE([A_ZIP], [zip], [zip],
792            [ZIP archive support])
793
794AC_DEFINE([FPU_UAE], [1], [Define to 1])
795
796AC_CONFIG_SUBDIRS([libmpeg2])
797
798# Write Makefile
799
800AC_CONFIG_FILES([
801    dist/linux/Makefile
802    dist/macos/Info.plist
803    dist/macos/Makefile
804    dist/steamos/Makefile
805    dist/windows/fs-uae.iss
806    dist/windows/Makefile
807    src/fs-uae/fs-uae.rc
808    Makefile
809])
810AC_OUTPUT
811
812# Summary
813
814echo ""
815echo "Configuration summary for FS-UAE:"
816echo ""
817echo "  Building for OS:   $host_os (\"$OS_NAME\")"
818echo "  Building for CPU:  $host_cpu"
819echo "  Module extension:  $LOADABLE_MODULE_EXT"
820echo ""
821echo "  LIBMPEG2_CFLAGS:   $LIBMPEG2_CFLAGS"
822echo "  LIBMPEG2_LIBS:     $LIBMPEG2_LIBS"
823echo "  OPENAL_CFLAGS:     $OPENAL_CFLAGS"
824echo "  OPENAL_LIBS:       $OPENAL_LIBS"
825echo "  OPENGL_CFLAGS:     $OPENGL_CFLAGS"
826echo "  OPENGL_LIBS:       $OPENGL_LIBS"
827echo "  OS_CPPFLAGS:       $OS_CPPFLAGS"
828echo "  OS_LDFLAGS:        $OS_LDFLAGS"
829echo "  SDL2_CFLAGS:       $SDL2_CFLAGS"
830echo "  SDL2_LIBS:         $SDL2_LIBS"
831echo ""
832