diff --git a/configure.ac b/configure.ac index 6c2b2a7ea8b..afa508ca556 100644 --- a/configure.ac +++ b/configure.ac @@ -1,1354 +1,1354 @@ -dnl Init. -AC_INIT(dosbox-x,2023.10.06,[https://github.com/joncampbell123/dosbox-x/issues],[],[https://dosbox-x.com]) -AC_PREREQ(2.60) -AC_CONFIG_SRCDIR(README.md) - -dnl Utility function ============================ - -# AC_CHECK_CPPFLAGS(ADDITIONAL-CPPFLAGS, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) -# -# checks whether the $(C) compiler accepts the ADDITIONAL-CPPFLAGS -# if so, they are added to the CPPFLAGS -AC_DEFUN([AC_CHECK_CPPFLAGS], -[ - AC_MSG_CHECKING([whether $CPP accepts "$1"]) - temp_check_cppflags="${CPPFLAGS}" - CPPFLAGS="$1 ${CPPFLAGS}" - AC_PREPROC_IFELSE( - [AC_LANG_SOURCE([[int main(void){return 0;}]])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]); CPPFLAGS="${temp_check_cppflags}"]) -])# AC_CHECK_CPPFLAGS - -dnl LIBRARY TEST: OpenGL support -AC_CHECK_LIB(GL, main, have_gl_lib=yes, have_gl_lib=no , ) -AC_CHECK_LIB(opengl32, main, have_opengl32_lib=yes,have_opengl32_lib=no , ) -AC_CHECK_HEADER(GL/gl.h, have_gl_h=yes , have_gl_h=no , ) - -dnl LIBRARY TEST: Direct3D 9 header support -AC_CHECK_HEADER(d3d9.h, have_d3d9_h=yes , have_d3d9_h=no , ) -AC_CHECK_HEADER(d3dx9math.h, have_d3dx9math_h=yes , have_d3dx9math_h=no , ) - -dnl Utility function ============================ - -# AC_CHECK_CXXFLAGS(ADDITIONAL-CXXFLAGS, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) -# -# checks whether the $(CXX) (c++) compiler accepts the ADDITIONAL-CXXFLAGS -# if so, they are added to the CXXFLAGS -AC_DEFUN([AC_CHECK_CXXFLAGS], -[ - AC_MSG_CHECKING([whether $CXX accepts "$1"]) -cat > conftest.c++ << EOF -int main(){ - return 0; -} -EOF -if $CXX $CPPFLAGS $CXXFLAGS -Werror -c -o conftest.o conftest.c++ [$1] > /dev/null 2>&1 -then - AC_MSG_RESULT([yes]) - CXXFLAGS="${CXXFLAGS} [$1]" - AC_CHECK_CPPFLAGS([$1]) - [$2] -else - AC_MSG_RESULT([no]) - [$3] -fi -])# AC_CHECK_CXXFLAGS - -dnl End Utility function ============================ - -dnl Detect the canonical host and target build environment -AC_CANONICAL_HOST -AC_CANONICAL_BUILD - -dnl Setup for automake -AM_INIT_AUTOMAKE([foreign subdir-objects]) -AC_CONFIG_HEADER(config.h) -AH_BOTTOM([/* - Define HAS_CDIRECTLPT as 1 if C_DIRECTLPT is defined (as 1) *and* parallel - pass-through is available on the current platform. It is only available on - x86{_64} with Windows or BSD, and on Linux. - We cannot override the value of C_DIRECTLPT, because configure will replace - "#undef C_DIRECTLPT" or "#define C_DIRECTLPT 0" with "#define C_DIRECTLPT 1". -*/ -#ifdef C_DIRECTLPT -#if ((defined __i386__ || defined __x86_64__ || defined _M_IX86 || defined _M_X64) && \ - (defined WIN32 || defined BSD || defined __CYGWIN__)) || \ - /* WIN32 is not defined by default on Cygwin */ \ - defined LINUX /* Linux, including non-x86 (e.g. Raspberry Pi) */ -#define HAS_CDIRECTLPT 1 -#endif -#endif // C_DIRECTLPT -#ifndef HAS_CDIRECTLPT -#define HAS_CDIRECTLPT 0 -#endif]) - -dnl Checks for programs. -AC_PROG_MAKE_SET -AC_PROG_CC -AC_PROG_CPP -AC_PROG_CXX -AC_PROG_OBJCXX -AC_PROG_INSTALL -AC_CHECK_TOOL(AR, ar) -AC_PROG_RANLIB -AC_PREFIX_DEFAULT([/usr/local]) - -dnl this code needs large file support on 32-bit systems -AC_SYS_LARGEFILE - -#Check for big endian machine, should #define WORDS_BIGENDIAN if so -AC_C_BIGENDIAN - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_C_INLINE -AC_TYPE_SIZE_T -AC_STRUCT_TM - -dnl some semi complex check for sys/socket so it works on darwin as well -AC_CHECK_HEADERS([stdlib.h sys/types.h]) -AC_CHECK_HEADERS([sys/socket.h netinet/in.h pwd.h], [], [], -[#include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -]) - -dnl C++11 is mandatory in this codebase. -dnl C++14 is optional at this time, will eventually become mandatory. - -dnl AC_CHECK_CXXFLAGS will prepend gnu++11 to CXXFLAGS if supported, for us. -OLDCFLAGS="$CFLAGS" -OLDCPPFLAGS="$CPPFLAGS" -OLDCXXFLAGS="$CXXFLAGS" - -AC_MSG_CHECKING([checking for C++14 support]) -AC_CHECK_CXXFLAGS([ -std=gnu++14 ], [ ], [ - warn_cpp11=1 -]) - -CXXFLAGS="$OLDCXXFLAGS" -CPPFLAGS="$OLDCPPFLAGS" -CFLAGS="$OLDCFLAGS" - -AC_MSG_CHECKING([checking for C++11 support]) -AC_CHECK_CXXFLAGS([ -std=gnu++11 ], [ ], [ - warn_cpp0x=1 -]) - -CXXFLAGS="$OLDCXXFLAGS" -CPPFLAGS="$OLDCPPFLAGS" -CFLAGS="$OLDCFLAGS" - -if test x$warn_cpp0x = x1; then - AC_MSG_ERROR([ Your compiler must support C++11 or better ]) -fi - -dnl Allow devs to force compile as C++11 as long as this code supports C++11 as a baseline -AC_ARG_ENABLE(force-cxx11,AC_HELP_STRING([--enable-force-cxx11],[Force compile as C++11]),force_cxx11=yes) - -if test x$warn_cpp11 = x1; then - AC_MSG_WARN([ Your compiler does not support C++14. Currently it is optional. At some point in the future, it will be required ]) - CFLAGS="$CFLAGS -std=gnu11"; - CXXFLAGS="$CXXFLAGS -std=gnu++11"; -elif test x$force_cxx11 = xyes; then - CFLAGS="$CFLAGS -std=gnu11"; - CXXFLAGS="$CXXFLAGS -std=gnu++11"; -else - AC_MSG_WARN([ DOSBox-X is still intended to support compilation as C++11. If you add new code please make sure it works as C++11 by running ./configure with --enable-force-cxx11 ]) - CFLAGS="$CFLAGS -std=gnu11"; # no such "gnu14" - CXXFLAGS="$CXXFLAGS -std=gnu++14"; -fi - -dnl Allow the SDL drawn menu to be enabled on Windows or macOS instead of their native menu system. -AH_TEMPLATE(C_FORCE_MENU_SDLDRAW,[Define to 1 to force SDL-drawn menus]) -AC_ARG_ENABLE(force-menu-sdldraw,AC_HELP_STRING([--enable-force-menu-sdldraw],[Force SDL drawn menus]),enable_force_menu_sdldraw=yes) - -dnl This is how the build script can specify a HX DOS extender target -AH_TEMPLATE(C_HX_DOS,[Define to 1 to target HX DOS]) -AC_ARG_ENABLE(hx-dos,AC_HELP_STRING([--enable-hx-dos],[Enable HX target]),enable_hx=yes) - -dnl This is how the build script can use libopencow for win9x unicode -# AH_TEMPLATE(C_OPENCOW,[Define to 1 to enable opencow]) -AC_ARG_ENABLE(opencow,AC_HELP_STRING([--enable-opencow],[Enable OpenCOW]),enable_opencow=yes) - -dnl Disable SDLnet for win9x builds -AC_ARG_ENABLE(sdlnet,AC_HELP_STRING([--disable-sdlnet],[Disable SDLNet]),disable_sdl_net=yes) - -dnl Let me know if you're targeting Emscripten -AH_TEMPLATE(C_EMSCRIPTEN,[Define to 1 to target Emscripten]) -AC_ARG_ENABLE(emscripten,AC_HELP_STRING([--enable-emscripten],[Enable Emscripten target]),enable_emscripten=$enableval,enable_emscripten=no) - -dnl Allow disabling X11 integration if your platform doesn't support it -AC_ARG_ENABLE(x11,AC_HELP_STRING([--disable-x11],[Don't enable X11 integration])) - -dnl Optimize for speed by default -AC_ARG_ENABLE(optimize,AC_HELP_STRING([--disable-optimize],[Don't enable compiler optimizations])) - -dnl FIXME: Remove default "-O2" set by some autotools versions. TODO: check availability of sed. -CFLAGS=["`echo $CFLAGS' ' | sed -e 's/-O[^ ]* //g'`"] -CXXFLAGS=["`echo $CXXFLAGS' ' | sed -e 's/-O[^ ]* //g'`"] - -if test x$enable_optimize != xno; then - if test x$enable_emscripten = xyes; then - CFLAGS="$CFLAGS -Os" - CXXFLAGS="$CXXFLAGS -Os" - else - CFLAGS="$CFLAGS -O2" - CXXFLAGS="$CXXFLAGS -O2" - fi -fi - -if test x$enable_emscripten = xyes; then - AC_DEFINE(C_EMSCRIPTEN,1,[Targeting Emscripten]) - AC_DEFINE(C_DIRECTSERIAL, 0, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) -fi - -dnl Some stuff for the icon. -case "$host" in - *-*-cygwin* | *-*-mingw32*) - if test x$enable_hx = xyes; then - CXXFLAGS="$CXXFLAGS -DHX_DOS" - AC_DEFINE(C_HX_DOS,1,[Targeting HX DOS extender]) - fi - ;; -esac - -if test x$enable_force_menu_sdldraw = xyes; then - CXXFLAGS="$CXXFLAGS -DFORCE_SDLDRAW" - AC_DEFINE(C_FORCE_MENU_SDLDRAW,1,[Force SDL drawn menus]) -fi - -dnl TEST: Environ can be included -AC_MSG_CHECKING(if environ can be included) -AC_LINK_IFELSE([AC_LANG_PROGRAM([[ -#include -#include ]],[[*environ;]])], -[AC_MSG_RESULT(yes);AC_DEFINE(ENVIRON_INCLUDED,1,[environ can be included])],AC_MSG_RESULT(no)) - -dnl TEST: Environ can be linked -AC_MSG_CHECKING(if environ can be linked) -AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern char ** environ;]],[[*environ;]])], -[AC_MSG_RESULT(yes);AC_DEFINE(ENVIRON_LINKED,1,[environ can be linked])],AC_MSG_RESULT(no)) - -dnl TEST: dirent includes d_type -AC_MSG_CHECKING([if dirent includes d_type]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([ -#include -#include -void blah(){ -struct dirent d_test; -d_test.d_type = 0; -}])],[AC_MSG_RESULT(yes);AC_DEFINE(DIRENT_HAS_D_TYPE,1,[struct dirent has d_type])],AC_MSG_RESULT(no)) - -dnl TEST: Check for powf -AC_MSG_CHECKING(for powf in libm); -LIBS_BACKUP=$LIBS; -LIBS="$LIBS -lm"; -AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ - powf(1.0f, 1.0f); -]])], [AC_MSG_RESULT(yes)], [AC_DEFINE([DB_HAVE_NO_POWF],[1],[libm does not include powf])]) -LIBS=$LIBS_BACKUP - -dnl Look for clock_gettime, a DB_HAVE_CLOCK_GETTIME is set when present -AH_TEMPLATE([DB_HAVE_CLOCK_GETTIME],[Determines if the function clock_gettime is available.]) -AC_SEARCH_LIBS([clock_gettime], [rt] , [found_clock_gettime=yes], [found_clock_gettime=no]) -if test x$found_clock_gettime = xyes; then - AC_DEFINE(DB_HAVE_CLOCK_GETTIME) -fi - -dnl TEST: Check if the compiler support attributes -AH_TEMPLATE([C_HAS_ATTRIBUTE],[Determines if the compilers supports attributes for structures.]) -AC_MSG_CHECKING(if compiler allows __attribute__) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -typedef struct { } __attribute__((packed)) junk;]], -[[ ]])],[ AC_MSG_RESULT(yes);AC_DEFINE(C_HAS_ATTRIBUTE)],AC_MSG_RESULT(no)) - -dnl TEST: Check if the compiler supports certain attributes -OLDCFLAGS="$CFLAGS" -CFLAGS="-Werror" - -AH_TEMPLATE([C_ATTRIBUTE_ALWAYS_INLINE],[Determines if the compilers supports always_inline attribute.]) -AC_MSG_CHECKING(if compiler allows __attribute__((always_inline)) ) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([ inline void __attribute__((always_inline)) test(){} -])],[ AC_MSG_RESULT(yes);AC_DEFINE(C_ATTRIBUTE_ALWAYS_INLINE)],AC_MSG_RESULT(no)) - -AH_TEMPLATE([C_ATTRIBUTE_FASTCALL],[Determines if the compilers supports fastcall attribute.]) -AC_MSG_CHECKING(if compiler allows __attribute__((fastcall)) ) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([ void __attribute__((fastcall)) test(){} -])],[ AC_MSG_RESULT(yes);AC_DEFINE(C_ATTRIBUTE_FASTCALL)],AC_MSG_RESULT(no)) - -CFLAGS="$OLDCFLAGS" - -dnl TEST: Check if the compiler supports __builtin_expect -#Switch language to c++ -AC_LANG_PUSH(C++) -AH_TEMPLATE([C_HAS_BUILTIN_EXPECT],[Determines if the compilers supports __builtin_expect for branch prediction.]) -AC_MSG_CHECKING(if compiler allows __builtin_expect) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[ -int x=10;if( __builtin_expect ((x==1),0) ) ; -]])], [ AC_MSG_RESULT(yes);AC_DEFINE(C_HAS_BUILTIN_EXPECT)],AC_MSG_RESULT(no)) -#switch language back -AC_LANG_POP(C++) - -dnl Check for mach_vm_remap (Darwin) -AH_TEMPLATE(C_HAVE_MACH_VM_REMAP,[Define to 1 if you have the mach_vm_remap function]) -AC_CHECK_HEADER([mach/mach.h], [ -AC_CHECK_FUNC([mach_vm_remap],[AC_DEFINE(C_HAVE_MACH_VM_REMAP,1)]) -]) - -dnl Check for mprotect. Needed for 64 bits linux -AH_TEMPLATE(C_HAVE_MPROTECT,[Define to 1 if you have the mprotect function]) -AC_CHECK_HEADER([sys/mman.h], [ -AC_CHECK_FUNC([mprotect],[AC_DEFINE(C_HAVE_MPROTECT,1)]) -]) - -dnl Check for memfd_create, for dynamic core. You need the glibc version, not just the syscall. -AH_TEMPLATE(C_HAVE_MEMFD_CREATE,[Define to 1 if you have the memfd_create function]) -AC_CHECK_HEADER([sys/mman.h], [ -AC_CHECK_FUNC([memfd_create],[AC_DEFINE(C_HAVE_MEMFD_CREATE,1)]) -]) - -dnl Check for posix_memalign -AH_TEMPLATE(C_HAVE_POSIX_MEMALIGN,[Define to 1 if you have the posix_memalign function]) -AC_CHECK_HEADER([stdlib.h], [ -AC_CHECK_FUNC([posix_memalign],[AC_DEFINE(C_HAVE_POSIX_MEMALIGN,1)]) -]) - -dnl Check for mmap -AH_TEMPLATE(C_HAVE_MMAP,[Define to 1 if you have the mmap function]) -AC_CHECK_HEADER([sys/mman.h], [ -AC_CHECK_FUNC([mmap],[AC_DEFINE(C_HAVE_MMAP,1)]) -]) - -dnl Check for realpath. Used on Linux -AC_CHECK_FUNCS([realpath]) - -dnl Setpriority -AH_TEMPLATE(C_SET_PRIORITY,[Define to 1 if you have setpriority support]) -AC_MSG_CHECKING(for setpriority support) -AC_LINK_IFELSE([AC_LANG_SOURCE([ -#include -int main(int argc,char **argv) { - return setpriority (PRIO_PROCESS, 0,PRIO_MIN+PRIO_MAX); -}; -])],AC_MSG_RESULT(yes);AC_DEFINE(C_SET_PRIORITY,1),AC_MSG_RESULT(no)) - -dnl Some target detection and actions for them -case "$host" in - *-*-darwin* | *-*-openbsd*) - dnl El Capitan's refusal to allow sudo make install to /usr/include, and the failure of most open source to - dnl include from /usr/local/include is irritating and tiresome... - CFLAGS="$CFLAGS -I/usr/local/include" - CPPFLAGS="$CPPFLAGS -I/usr/local/include" - ;; -esac - -if test x$enable_emscripten = xyes; then - CXXFLAGS="$CXXFLAGS" -else - dnl Some default CPU flags - case "$host_cpu" in - x86_64 | amd64) - # SSE is part of the x86_64 ABI - CXXFLAGS="$CXXFLAGS -msse" - ;; - esac -fi - -dnl Some needed libaries for OS2 -dnl perharps join this with the other target depended checks. move them upwards -if test x$host = xi386-pc-os2-emx ; then - CXXFLAGS="$CXXFLAGS -Zmt" - LDFLAGS="$LDFLAGS -Zomf -Zmt" -fi - -dnl I would like to know of any concerns given by the C++ compiler. -dnl Clang/LLVM already does this to some degree, let's get GCC to do it too. -AC_CHECK_CXXFLAGS([ -Wall ]) -AC_CHECK_CXXFLAGS([ -Wextra ]) -AC_CHECK_CXXFLAGS([ -Wunused ]) -AC_CHECK_CXXFLAGS([ -pedantic ]) -AC_CHECK_CXXFLAGS([ -Wno-error=format-security ]) # imfc.cpp and later versions of GCC, see https://github.com/joncampbell123/dosbox-x/issues/4436 -#AC_CHECK_CXXFLAGS([ -Wconversion ]) DO NOT ENABLE. THIS WARNING IS WAY TOO PEDANTIC TO BE USEFUL, EXCEPT FOR SPECIFIC CASES -#AC_CHECK_CXXFLAGS([ -Wsign-conversion ]) -AC_CHECK_CXXFLAGS([ -Wlogical-op ]) -AC_CHECK_CXXFLAGS([ -Wsign-promo ]) -AC_CHECK_CXXFLAGS([ -Wconversion-null ]) -#AC_CHECK_CXXFLAGS([ -Woverloaded-virtual ]) NOT TOO USEFUL -AC_CHECK_CXXFLAGS([ -Wno-deprecated-declarations ]) - -dnl Let GCC 7.3.x know that the "fall through" switch cases in this codebase -dnl are often intentional. -AC_CHECK_CXXFLAGS([ -Wno-implicit-fallthrough ]) - -dnl Stop reporting "type punning" warnings, I'm sick of hearing about it. -AC_CHECK_CXXFLAGS([ -Wno-strict-aliasing ]) - -dnl other -AC_CHECK_CXXFLAGS([ -Wno-missing-field-initializers ]) -AC_CHECK_CXXFLAGS([ -Wno-format-zero-length ]) - -dnl Clang/LLVM warning: don't care the address of a member may be unaligned, unless targeting ARM! -AC_CHECK_CXXFLAGS([ -Wno-address-of-packed-member ]) -dnl Clang/LLVM warning: don't care about int to void*, since void* is either same size or larger -AC_CHECK_CXXFLAGS([ -Wno-int-to-void-pointer-cast ]) - -dnl Some stuff for the icon and other makefile platform stuff. -dnl Slightly double with the above, but that deals more with compiled features. -case "$host" in - *-*-cygwin* | *-*-mingw32*) - dnl Some stuff for the ico - AC_CHECK_TOOL(WINDRES, windres, :) - LDFLAGS="-static -static-libgcc -static-libstdc++ $LDFLAGS" - DBPLATFORM="win" - ;; - *-*-darwin*) - WINDRES=":" - DBPLATFORM="mac" - ;; - *) - WINDRES=":" - DBPLATFORM="other" - ;; -esac - AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:") - AM_CONDITIONAL(MACOSX, test "x$DBPLATFORM" = "xmac") - AC_SUBST(WINDRES) - -dnl LIBRARY TEST: SDL 2.x -SDL2_VERSION=2.0.5 -AM_PATH_SDL2($SDL2_VERSION) - -dnl LIBRARY TEST: SDL 1.x -SDL_VERSION=1.2.0 -AM_PATH_SDL($SDL_VERSION) - -dnl LIBRARY USE: SDL selection -if test -n "$SDL2_LIBS"; then - LIBS="$LIBS $SDL2_LIBS" - CPPFLAGS="$CPPFLAGS $SDL2_CFLAGS" -else - if test -n "$SDL_LIBS"; then - LIBS="$LIBS $SDL_LIBS" - CPPFLAGS="$CPPFLAGS $SDL_CFLAGS" - else - AC_MSG_ERROR([SDL 1.x or SDL 2.x is required to compile this program]) - fi -fi - -AH_TEMPLATE(C_GAMELINK,[Define to 1 to enable game link headless mode]) -AC_CHECK_LIB(rt, main, have_rt_lib=yes, have_rt_lib=no , ) -AC_ARG_ENABLE(gamelink,AC_HELP_STRING([--disable-gamelink],[Disable headless game link output mode (only for SDL2)]),,enable_gamelink=yes) -AC_MSG_CHECKING(whether gamelink is enabled) -if test x$enable_gamelink = xyes; then - if test "x$SDL2_LIBS" = "x"; then - AC_MSG_RESULT(no (SDL2 missing)) - else - AC_MSG_RESULT(yes) - C_GAMELINK=1 - AC_DEFINE(C_GAMELINK,1) - fi -else - AC_MSG_RESULT(no) -fi -AM_CONDITIONAL([C_GAMELINK], [test "x$C_GAMELINK" = x1]) - - -dnl FEATURE: Whether to use OpenGL -AH_TEMPLATE(C_OPENGL,[Define to 1 to use opengl display output support]) -AC_ARG_ENABLE(opengl,AC_HELP_STRING([--disable-opengl],[Disable opengl support]),enable_opengl=$enableval,enable_opengl=yes) -AC_MSG_CHECKING(whether opengl display output will be enabled) - -# We need to do this before any other AC_CHECK_LIB runs just to make sure -# linking doesn't fail if SDL is using OpenGL -if test x$enable_opengl = xyes; then -case "$host" in - *-*-darwin*) - AC_MSG_RESULT(yes) - LIBS="$LIBS -framework OpenGL" - AC_DEFINE(C_OPENGL,1) - ;; - *) - pkg-config --exists gl; RES=$? - if test x$RES = x0; then - AC_MSG_RESULT(yes) - CFLAGS="$CFLAGS "`pkg-config gl --cflags` - CPPFLAGS="$CPPFLAGS "`pkg-config gl --cflags` - LIBS="$LIBS "`pkg-config gl --libs` - AC_DEFINE(C_OPENGL,1) - elif test x$have_gl_h = xyes -a x$have_gl_lib = xyes ; then - AC_MSG_RESULT(yes) - LIBS="$LIBS -lGL" - AC_DEFINE(C_OPENGL,1) - elif test x$have_gl_h = xyes -a x$have_opengl32_lib = xyes ; then - AC_MSG_RESULT(yes) - LIBS="$LIBS -lopengl32" - AC_DEFINE(C_OPENGL,1) - else - AC_MSG_RESULT(no) - fi - ;; -esac -fi - -# FIXME: Arrggh we need the WHOLE PATH -pwd=`realpath $srcdir` -if [[ -z "$pwd" ]]; then pwd=`pwd`; fi - -CFLAGS="$CFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" -LDFLAGS="$LDFLAGS -L$pwd/vs/sdlnet/linux-host/lib" -CPPFLAGS="$CPPFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" -CXXFLAGS="$CXXFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" - -if test x$enable_emscripten != xyes; then -dnl Some target detection and actions for them -case "$host" in - *-*-cygwin* | *-*-mingw32*) - LIBS="$LIBS -lwinmm -ldsound -limm32 -lole32 -loleaut32 -lversion -lsetupapi" - CXXFLAGS="$CXXFLAGS -mno-ms-bitfields" - dnl FEATURE: Whether to support direct parallel port pass-through - AC_DEFINE(C_DIRECTLPT, 1, [ Define to 1 if you want parallel pass-through support (Win32, Linux and BSD).]) - dnl FEATURE: Whether to support direct serial port pass-through - AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) - ;; - *-*-darwin*) - dnl We have a problem here: both Mac OS X and Darwin report - dnl the same signature "powerpc-apple-darwin*" - so we have - dnl to do more to distinguish them. - dnl For now I am lazy and do not add proper detection code. - macosx=1 - if test x$warn_cpp11 = x1; then - OBJCXXFLAGS="$OBJCXXFLAGS -std=gnu++14"; - else - OBJCXXFLAGS="$OBJCXXFLAGS -std=gnu++11"; - fi - AC_DEFINE(MACOSX, 1, [Compiling on Mac OS X]) - LIBS="$LIBS -framework Carbon -framework CoreFoundation -framework CoreMIDI -framework AudioUnit -framework AudioToolbox -framework ApplicationServices -framework AppKit -framework IOKit" - dnl FEATURE: Whether to support direct serial port pass-through - AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) - ;; - *-*-linux*) - AC_DEFINE(LINUX, 1, [Compiling on GNU/Linux]) - CXXFLAGS="$CXXFLAGS -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L" - LIBS="$LIBS -lrt" # uses shm_* functions which requires librt on Linux - dnl FEATURE: Whether to support direct parallel port pass-through - AC_DEFINE(C_DIRECTLPT, 1, [ Define to 1 if you want parallel pass-through support (Win32, Linux and BSD).]) - dnl FEATURE: Whether to support direct serial port pass-through - AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) - ;; - *-*-haiku*) - AC_DEFINE(HAIKU, 1, [Compiling on Haiku]) - dnl FEATURE: Whether to support direct serial port pass-through - AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) - LIBS="$LIBS -lnetwork -lbsd -lbe" - ;; - *-*-freebsd* | *-*-dragonfly* | *-*-netbsd* | *-*-openbsd*) - dnl FEATURE: Whether to support direct parallel port pass-through - AC_DEFINE(C_DIRECTLPT, 1, [ Define to 1 if you want parallel pass-through support (Win32, Linux and BSD).]) - dnl Disabled directserial for now. It doesn't do anything without - dnl specifying an extra ifdef in directserial_posix.* - dnl directserial detection should be rewritten to test for the needed - dnl functions and headers. I currently do not know - dnl which ones are needed for BSD - AC_DEFINE(BSD, 1, [Compiling on BSD]) - dnl FEATURE: Whether to support direct serial port pass-through - AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) - ;; - *-*-os2-emx*) - AC_DEFINE(OS2, 1, [Compiling on OS/2 EMX]) - dnl FEATURE: Whether to support direct serial port pass-through - AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) - ;; - *-*-riscos*) - AC_DEFINE(RISCOS, 1, [Compiling on RISC OS]) - dnl The following line is required in order to use std::to_string() - CXXFLAGS="$CXXFLAGS -D_GLIBCXX_USE_C99=1" - ;; -esac - -dnl Fix for FreeBSD not automatically linking to pthread for std::thread -case "$host" in - *-*-freebsd*) - LIBS="$LIBS -lpthread" - ;; -esac - -dnl OpenBSD/i386 and NetBSD/i386 require linking to libi386.a for i386_iopl() (for initPassthroughIO()). -dnl OpenBSD/x86_64 requires linking to libamd64.a for amd64_iopl(). NetBSD/x86_64 requires linking to libx86_64.a for x86_64_iopl(). -case "$host" in - i*86-*-openbsd* | i*86-*-netbsd*) - LIBS="$LIBS -li386" - ;; - x86_64-*-openbsd*) - LIBS="$LIBS -lamd64" - ;; - x86_64-*-netbsd*) - LIBS="$LIBS -lx86_64" - ;; -esac -fi - -AM_CONDITIONAL(MACOSX, test x"$macosx" = x"1") -AM_CONDITIONAL(EMSCRIPTEN, test x"$enable_emscripten" = x"yes") - -dnl The target cpu checks for dynamic cores -AH_TEMPLATE(C_TARGETCPU,[The type of cpu this target has]) -AC_MSG_CHECKING(for target cpu type) -case "$host_cpu" in - x86_64 | amd64) - AC_DEFINE(C_TARGETCPU,X86_64) - AC_MSG_RESULT(x86-64 bit compatible) - c_targetcpu="x86_64" - c_unalignedmemory=yes - ;; - i?86) - AC_DEFINE(C_TARGETCPU,X86) - AC_MSG_RESULT(x86 compatible) - c_targetcpu="x86" - c_unalignedmemory=yes - ;; - powerpc*) - AC_DEFINE(C_TARGETCPU,POWERPC) - AC_MSG_RESULT(Power PC) - c_targetcpu="powerpc" - c_unalignedmemory=yes - ;; - m68k*) - AC_DEFINE(C_TARGETCPU,M68K) - AC_MSG_RESULT(Motorola 68000) - c_targetcpu="m68k" - c_unalignedmemory=yes - ;; - armv7*) - AC_DEFINE(C_TARGETCPU,ARMV7LE) - AC_MSG_RESULT(ARMv7 Little Endian) - c_targetcpu="arm" - c_unalignedmemory=yes - ;; - armv6*) - AC_DEFINE(C_TARGETCPU,ARMV4LE) - AC_MSG_RESULT(ARMv6 Little Endian) - c_targetcpu="arm" - dnl c_unalignedmemory=yes - ;; - aarch64) - AC_DEFINE(C_TARGETCPU,ARMV8LE) - AC_MSG_RESULT(ARMv8 Little Endian 64-bit) - c_targetcpu="arm" - c_unalignedmemory=yes - ;; - arm) # Mac OS X uname -m says "arm64", for some reason it becomes "arm" ? - AC_DEFINE(C_TARGETCPU,ARMV8LE) - AC_MSG_RESULT(ARMv8 Little Endian 64-bit) - c_targetcpu="arm" - c_unalignedmemory=yes - ;; - *) - AC_DEFINE(C_TARGETCPU,UNKNOWN) - AC_MSG_RESULT(unknown) - c_unalignedmemory=no - ;; -esac - -dnl TODO: Need GCC to know this code is using C++ lamda functions - -dnl LIBRARY TEST: ALSA -AM_PATH_ALSA(0.9.0, AC_DEFINE(HAVE_ALSA,1,[Define to 1 to use ALSA for MIDI]) , : ) - -dnl Some stuff for the icon. -case "$host" in - *-*-cygwin* | *-*-mingw32*) - dnl MinGW puts ncurses headers in a subdir - ncursescfg=`ncursesw6-config --cflags` - CXXFLAGS="$CXXFLAGS $ncursescfg" - CPPFLAGS="$CPPFLAGS $ncursescfg" - CFLAGS="$CFLAGS $ncursescfg" - ;; - *) - WINDRES=":" - ;; -esac - - -dnl LIBRARY TEST: curses -AC_CHECK_HEADER(curses.h,have_curses_h=yes,) -AC_CHECK_LIB(curses, initscr, curses_lib=curses, , ) -AC_CHECK_LIB(ncurses, initscr, curses_lib=ncurses, , ) -AC_CHECK_LIB(pdcurses, initscr, curses_lib=pdcurses, , ) -# Check if this system's ncurses uses a separate tinfo library -AC_CHECK_LIB(tinfo, nodelay, - if test x$curses_lib = xncurses ; then - LIBS="$LIBS -ltinfo"; - fi) - -dnl LIBRARY TEST: libzlib -AC_CHECK_HEADER(zlib.h,have_zlib_h=yes,) -AC_CHECK_LIB(z, inflateEnd, have_zlib_lib=yes, ,) - -dnl LIBRARY TEST: libpng -AC_CHECK_HEADER(png.h,have_png_h=yes,) -AC_CHECK_LIB(png, png_get_io_ptr, have_png_lib=yes, ,-lz) - -dnl LIBRARY TEST: libpcap -AC_CHECK_HEADER(pcap.h,have_pcap_h=yes,) -AC_CHECK_LIB(pcap, pcap_open_live, have_pcap_lib=yes, ,-lz) - -dnl LIBRARY TEST: libslirp -AC_CHECK_HEADER(slirp/libslirp.h,have_slirp_h=yes,) -AC_CHECK_LIB(slirp, slirp_input, have_slirp_lib=yes, ,-lz) - -dnl LIBRARY TEST: libiconv -AC_CHECK_HEADER(iconv.h,have_iconv_h=yes,) -dnl TEST: check if iconv uses const char -AC_MSG_CHECKING([whether iconv uses const char**]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([ -#include -size_t iconv(iconv_t, const char **restrict, size_t *restrict, char **restrict, size_t *restrict); -])], AC_DEFINE(ICONV_CONST_CHAR, 1) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -AH_TEMPLATE(ICONV_CONST_CHAR,[Whether iconv uses const char**]) - -dnl LIBRARY TEST: SDLnet -AC_CHECK_HEADER(SDL_net.h,have_sdl_net_h=yes,) -AC_CHECK_LIB(SDL2_net, SDLNet_Init, have_sdl2_net_lib=yes, , ) -AC_CHECK_LIB(SDL_net, SDLNet_Init, have_sdl_net_lib=yes, , ) - -AC_COMPILE_IFELSE([AC_LANG_SOURCE([ -#include -#ifndef SDL_VIDEO_DRIVER_X11 -#error SDL_VIDEO_DRIVER_X11 -#endif -void test(){} -])], , enable_x11=no) -if test x$enable_x11 != xno; then - dnl LIBRARY TEST: X11 Xlib support - AC_CHECK_LIB(X11, main, have_x11_lib=yes, have_x11_lib=no, ) - AC_CHECK_LIB(Xrandr, XRRGetCrtcInfo, have_xrandr_lib=yes, have_xrandr_lib=no, ) - AC_CHECK_HEADER(X11/XKBlib.h, have_x11_h=yes, have_x11_h=no, ) - - dnl Compile test will fail for XKBrules.h if we do not also include XKBlib.h - dnl Hope your compiler supports the GCC style -include option! - if test x$have_x11_h = xyes; then - save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -include X11/XKBlib.h" - - AC_CHECK_HEADER(X11/extensions/XKBrules.h, have_x11_ext_xkbrules_h=yes, have_x11_ext_xkbrules_h=no, ) - AC_CHECK_HEADER(X11/extensions/XKBfile.h, have_xkbfile_h=yes, have_xkbfile_h=no, ) - - CPPFLAGS=$save_CPPFLAGS - fi -fi - -dnl LIBRARY TEST: Fluidsynth support -AC_CHECK_HEADER(fluidsynth.h,have_fluidsynth_h=yes,) -AC_CHECK_LIB(fluidsynth, fluid_synth_sysex, have_fluidsynth_lib=yes,,) - -dnl LIBRARY TEST: FreeType2 -AH_TEMPLATE(C_FREETYPE,[Define to 1 to enable freetype support]) -AC_ARG_ENABLE(freetype,AC_HELP_STRING([--disable-freetype],[Disable freetype support]),enable_freetype=$enableval,enable_freetype=yes) -AM_CONDITIONAL(C_FREETYPE, test "x$enable_freetype" = "xyes") -if test x$enable_freetype = xyes; then - AC_MSG_CHECKING(for freetype) - if test x$INTERNAL_FREETYPE = x1; then - # CFLAGS and LDFLAGS were already updated by build-macos - AC_DEFINE(C_FREETYPE,1) - AC_MSG_RESULT(yes) - else - pkg-config --exists freetype2; RES=$? - if test x$RES = x0; then - CFLAGS="$CFLAGS "`pkg-config freetype2 --cflags` - CPPFLAGS="$CPPFLAGS "`pkg-config freetype2 --cflags` - LIBS="$LIBS "`pkg-config freetype2 --libs` - AC_DEFINE(C_FREETYPE,1) - AC_MSG_RESULT(yes) - else - enable_freetype=no - AC_MSG_RESULT(no) - fi - fi -fi - -dnl LIBRARY TEST: FFMPEG support -pkg-config --exists libavcodec; RES=$? -if test x$RES = x0; then - have_avcodec_h=yes - have_ffmpeg=yes -else - have_avcodec_h=no - have_ffmpeg=no -fi - -dnl LIBRARY TEST: OpenGL support -AC_CHECK_LIB(GL, main, have_gl_lib=yes, have_gl_lib=no , ) -AC_CHECK_LIB(opengl32, main, have_opengl32_lib=yes,have_opengl32_lib=no , ) -AC_CHECK_HEADER(GL/gl.h, have_gl_h=yes , have_gl_h=no , ) - -dnl LIBRARY TEST: Direct3D 9 header support -AC_CHECK_HEADER(d3d9.h, have_d3d9_h=yes , have_d3d9_h=no , ) -AC_CHECK_HEADER(d3dx9math.h, have_d3dx9math_h=yes , have_d3dx9math_h=no , ) - -dnl ================== SDL net special test for OS/2 -if test x$host = xi386-pc-os2-emx ; then - LIBS_BACKUP=$LIBS; - LIBS="$LIBS -lSDL_Net"; - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ - SDLNet_Init (); - ]])], [AC_MSG_RESULT(yes); have_sdl_net_lib=yes], AC_MSG_RESULT(no)) - LIBS=$LIBS_BACKUP -fi - -dnl FEATURE: PRINTER (requires FreeType2) -AH_TEMPLATE(C_PRINTER,[Define to 1 to enable printer emulation]) -AC_ARG_ENABLE(printer,AC_HELP_STRING([--disable-printer],[disable printer emulation]),enable_printer=$enableval,enable_printer=yes) -AM_CONDITIONAL(C_PRINTER, test "x$enable_printer" = "xyes") -if test x$enable_freetype = xyes; then - if test x$enable_printer = xyes; then - AC_DEFINE(C_PRINTER,1) - fi -fi - -dnl FEATURE: xBRZ -AH_TEMPLATE(C_XBRZ,[Define to 1 to enable XBRZ scaler]) -AC_ARG_ENABLE(xbrz,AC_HELP_STRING([--enable-xbrz],[compile with xBRZ scaler (default yes)]),enable_xbrz=$enableval,enable_xbrz=yes) -AM_CONDITIONAL(C_XBRZ, test "x$enable_xbrz" = "xyes") -if test x$enable_emscripten != xyes; then - if test x$enable_xbrz = xyes; then - AC_DEFINE(C_XBRZ,1) - fi -fi - -dnl FEATURE: xBRZ -AH_TEMPLATE(C_SCALER_FULL_LINE,[Define to 1 to alter the simpler render scalers to operate only on the full scanline instead of detecting differences. This is a performance adjustment for slow or embedded systems]) -AC_ARG_ENABLE(scaler-full-line,AC_HELP_STRING([--enable-scaler-full-line],[scaler render full line instead of detecting changes, for slower systems]),enable_scaler_full_line=$enableval,enable_scaler_full_line=no) -AM_CONDITIONAL(C_SCALER_FULL_LINE, test "x$enable_scaler_full_line" = "xyes") -if test x$enable_scaler_full_line = xyes; then - AC_DEFINE(C_SCALER_FULL_LINE,1) -fi - -dnl FEATURE: MIDI through ALSA -AC_ARG_ENABLE(alsa-midi, -AC_HELP_STRING([--enable-alsa-midi],[compile with alsa midi support (default yes)]), -[ case "${enableval}" in - yes) alsa_midi=true;; - no) alsa_midi=false;; -esac], -[alsa_midi=true]) -if test x$alsa_midi = xtrue ; then - CXXFLAGS="$CXXFLAGS $ALSA_CFLAGS" -fi - -dnl FEATURE: MT32 (MUNT) emulation -AH_TEMPLATE(C_MT32,[Define to 1 to enable MT32 emulation]) -AC_ARG_ENABLE(mt32,AC_HELP_STRING([--disable-mt32],[Disable MT32 emulation]),,enable_mt32=yes) -AC_MSG_CHECKING(whether MT32 emulation will be enabled) - -# test -if test x$enable_mt32 = xyes ; then - case "$host_cpu" in - x86_64 | amd64) - AC_MSG_RESULT(yes) - AC_DEFINE(C_MT32,1) - ;; - i?86) - AC_MSG_RESULT(yes) - AC_DEFINE(C_MT32,1) - ;; - arm) - AC_MSG_RESULT(yes) - AC_DEFINE(C_MT32,1) - ;; - aarch64) - AC_MSG_RESULT(yes) - AC_DEFINE(C_MT32,1) - ;; - *) - enable_mt32=no - AC_MSG_RESULT(no) - ;; - esac -else - enable_mt32=no - AC_MSG_RESULT(no) -fi -AM_CONDITIONAL(C_MT32, test "x$enable_mt32" = "xyes") - -dnl On some Linux platforms, std::atomic needs a helper library -case "$host" in - *-*-linux*) - case "$host_cpu" in - x86_64 | amd64) - ;; - i?86) - ;; - *) - AC_MSG_CHECKING(whether -latomic is needed) - AC_LINK_IFELSE([AC_LANG_SOURCE([ - #include - #include - std::atomic v; - int main() { - return v; - } - ])],STD_ATOMIC_NEED_LIBATOMIC=no,STD_ATOMIC_NEED_LIBATOMIC=yes) - AC_MSG_RESULT($STD_ATOMIC_NEED_LIBATOMIC) - if test "x$STD_ATOMIC_NEED_LIBATOMIC" = xyes; then - LIBS="$LIBS -latomic" - fi - ;; - esac - ;; -esac - -dnl NASM (Netwide Assembler) -AC_PATH_PROG([NASM], [nasm]) -if test -z "$ac_cv_path_NASM"; then - AC_MSG_WARN([NASM (netwide assembler) not found, you will not be able to compile the external x86 .asm files if they are modified]) -fi - -dnl FEATURE: DEBUG and HEAVY DEBUG options (debugger) -AH_TEMPLATE(C_DEBUG,[Define to 1 to enable internal debugger, requires libcurses]) -AH_TEMPLATE(C_HEAVY_DEBUG,[Define to 1 to enable heavy debugging, also have to enable C_DEBUG]) -AC_ARG_ENABLE(debug,AC_HELP_STRING([--enable-debug],[Enable debug mode]),[ - if test x$enable_debug = xno; then - AC_MSG_RESULT([Debugger not enabled]) - elif test x$curses_lib != x -a x$have_curses_h = xyes; then - LIBS="$LIBS -l$curses_lib" - AC_DEFINE(C_DEBUG,1) - if test x$enable_debug = xheavy ; then - AC_DEFINE(C_HEAVY_DEBUG,1) - fi - else - AC_MSG_ERROR([Can't find curses, which is required for debug mode]) - fi -],) - -dnl automake 1.14 and upwards rewrite the host to have always 64 bit unless i386 as host is passed -dnl this can make building a 32 bit executable a bit tricky, as dosbox relies on the host to select the -dnl dynamic/dynrec core -AC_MSG_CHECKING([whether Apple user wants to override the build process to produce a 32 bit binary]) -case "$host" in - *-*-darwin*) - if test x$c_targetcpu = xx86_64 -a x$c_sizep = x4 ; then - AC_MSG_RESULT(yes) - AC_DEFINE(C_TARGETCPU,X86) - c_targetcpu="x86" - else - AC_MSG_RESULT(no) - fi - ;; - *) - AC_MSG_RESULT([no, not on Apple]) - ;; -esac - -dnl FEATURE: Whether to enable dynamic core -AC_ARG_ENABLE(dynamic-core,AC_HELP_STRING([--disable-dynamic-core],[Disable all dynamic cores]),,enable_dynamic_core=yes) - -dnl FEATURE: Whether to enable x86 dynamic core -AH_TEMPLATE(C_DYNAMIC_X86,[Define to 1 to use x86/x64 dynamic cpu core]) -AC_ARG_ENABLE(dynamic-x86,AC_HELP_STRING([--disable-dynamic-x86],[Disable x86/x64 dynamic cpu core]),,enable_dynamic_x86=yes) -AC_MSG_CHECKING(whether x86 dynamic cpu core will be enabled) -if test x$enable_dynamic_x86 = xno -o x$enable_dynamic_core = xno; then - AC_MSG_RESULT(no) -elif test x$c_targetcpu = xx86 -o x$c_targetcpu = xx86_64; then - AC_DEFINE(C_DYNAMIC_X86,1) - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) -fi - -dnl FEATURE: Whether to enable recompiling dynamic core -AH_TEMPLATE(C_DYNREC,[Define to 1 to use recompiling cpu core]) -AC_ARG_ENABLE(dynrec,AC_HELP_STRING([--disable-dynrec],[Disable recompiling cpu core]),,enable_dynrec=yes) -AC_MSG_CHECKING(whether recompiling cpu core will be enabled) -if test x$enable_dynrec = xno -o x$enable_dynamic_core = xno; then - AC_MSG_RESULT(no) -# test for MIPS32 is missing from this Dynamic Recompiler whitelist -elif test x$c_targetcpu = xx86 -o x$c_targetcpu = xx86_64 -o x$c_targetcpu = xarm; then - AC_DEFINE(C_DYNREC,1) - AC_MSG_RESULT(yes) - - case "$host" in - *-*-openbsd*) - AC_MSG_WARN([DOSBox-X will be linked with "wxneeded" to support dynrec core on OpenBSD]) - LDFLAGS="-Wl,-z,wxneeded $LDFLAGS" - ;; - esac -else - AC_MSG_RESULT(no) -fi - -dnl FEATURE: Whether to emulate the floating point unit -AH_TEMPLATE(C_FPU,[Define to 1 to enable floating point emulation]) -AC_ARG_ENABLE(fpu,AC_HELP_STRING([--disable-fpu],[Disable fpu support]),,enable_fpu=yes) -AC_MSG_CHECKING(whether fpu emulation will be enabled) -if test x$enable_fpu = xyes ; then - AC_MSG_RESULT(yes) - AC_DEFINE(C_FPU,1) -else - AC_MSG_RESULT(no) -fi - -AH_TEMPLATE(C_FPU_X86,[Define to 1 to use a x86/x64 assembly fpu core]) -AC_ARG_ENABLE(fpu-x86,AC_HELP_STRING([--disable-fpu-x86],[Disable x86 assembly fpu core]),,enable_fpu_x86=yes) -AC_ARG_ENABLE(fpu-x64,AC_HELP_STRING([--disable-fpu-x64],[Disable x64 assembly fpu core]),,enable_fpu_x64=yes) -AC_MSG_CHECKING(whether the x86/x64 assembly fpu core will be enabled) -if test x$enable_fpu_x86 = xno -o x$enable_fpu_x64 = xno; then - AC_MSG_RESULT(no) -else - if test x$enable_fpu = xyes; then - if test x$c_targetcpu = xx86 -o x$c_targetcpu = xx86_64; then - AC_DEFINE(C_FPU_X86,1) - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - else - AC_MSG_RESULT(no) - fi -fi - -dnl FEATURE: Whether to enable unaligned memory access -AH_TEMPLATE(C_UNALIGNED_MEMORY,[Define to 1 to use a unaligned memory access]) -AC_ARG_ENABLE(unaligned_memory,AC_HELP_STRING([--disable-unaligned-memory],[Disable unaligned memory access]),,enable_unaligned_memory=yes) -AC_MSG_CHECKING(whether to enable unaligned memory access) -if test x$enable_unaligned_memory = xyes -a x$c_unalignedmemory = xyes; then - AC_DEFINE(C_UNALIGNED_MEMORY,1) - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) -fi - -dnl FEATURE: Whether to support SDL net, and emulate modem and IPX connections -AH_TEMPLATE(C_SDL_NET,[Indicate whether SDL_net is present]) -AH_TEMPLATE(C_MODEM,[Define to 1 to enable internal modem support, requires SDL_net]) -AH_TEMPLATE(C_IPX,[Define to 1 to enable IPX over Internet networking, requires SDL_net]) - -case "$host" in - *-*-cygwin* | *-*-mingw32*) - if test x$have_sdl_net_h = xyes; then - have_sdl_net_lib=yes - fi - ;; -esac -dnl enable SDL2 net if SDL2 -if test -n "$SDL2_LIBS"; then - if test x$disable_sdl_net = xyes ; then - AC_MSG_WARN([SDL_net is disabled in parameters]) - elif test x$have_sdl2_net_lib = xyes -a x$have_sdl_net_h = xyes ; then - LIBS="$LIBS -lSDL2_net" - AC_DEFINE(C_SDL_NET,1) - AC_DEFINE(C_MODEM,1) - AC_DEFINE(C_IPX,1) - have_sdl_net=yes - elif test x$have_sdl_net_lib = xyes -a x$have_sdl_net_h = xyes ; then - LIBS="$LIBS -lSDL_net" - AC_DEFINE(C_SDL_NET,1) - AC_DEFINE(C_MODEM,1) - AC_DEFINE(C_IPX,1) - have_sdl_net=yes - else - AC_MSG_WARN([Can't find SDL_net, internal modem and ipx disabled]) - fi -else - if test x$disable_sdl_net = xyes ; then - AC_MSG_WARN([SDL_net is disabled in parameters]) - elif test x$have_sdl_net_lib = xyes -a x$have_sdl_net_h = xyes ; then - LIBS="$LIBS -lSDL_net" - AC_DEFINE(C_SDL_NET,1) - AC_DEFINE(C_MODEM,1) - AC_DEFINE(C_IPX,1) - have_sdl_net=yes - else - AC_MSG_WARN([Can't find SDL_net, internal modem and ipx disabled]) - fi -fi - -dnl FEATURE: Whether to support libz, and enable snapshots -AH_TEMPLATE(C_LIBZ,[Define to 1 if you have libz]) -if test x$have_zlib_lib = xyes -a x$have_zlib_h = xyes ; then - LIBS="$LIBS -lz" - AC_DEFINE(C_LIBZ,1) -fi - -dnl FEATURE: Whether to support libpng, and enable snapshots -AH_TEMPLATE(C_LIBPNG,[Define to 1 if you have libpng]) -AH_TEMPLATE(C_SSHOT,[Define to 1 to enable screenshots, requires libpng]) -AC_ARG_ENABLE(screenshots,AC_HELP_STRING([--disable-screenshots],[Disable screenshots and movie recording]),,enable_screenshots=yes) -AC_MSG_CHECKING([whether screenshots will be enabled]) -if test x$enable_screenshots = xyes; then - if test x$have_png_lib = xyes -a x$have_png_h = xyes ; then - LIBS="$LIBS -lpng -lz" - AC_DEFINE(C_LIBPNG,1) - AC_DEFINE(C_SSHOT,1) - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no, can't find libpng.]) - fi -else - AC_MSG_RESULT([no]) -fi - -dnl FEATURE: Whether to use libpcap, and enable ethernet pass-through -AH_TEMPLATE(C_PCAP,[Define to 1 to enable ethernet pass-through, requires libpcap]) -case "$host" in - *-*-cygwin* | *-*-mingw32*) - CFLAGS="$CFLAGS -I$pwd/vs/pcap" - CXXFLAGS="$CXXFLAGS -I$pwd/vs/pcap" - AC_DEFINE(C_PCAP,1) - ;; - *) - if test x$have_pcap_lib = xyes -a x$have_pcap_h = xyes ; then - LIBS="$LIBS -lpcap"; - AC_DEFINE(C_PCAP,1) - else - AC_MSG_WARN([Can't find libpcap, ethernet pass-through disabled]) - fi - ;; -esac - -dnl FEATURE: Whether to use libslirp, and enable userspace TCP/IP emulation -AH_TEMPLATE(C_SLIRP, [Define to 1 to enable userspace TCP/IP emulation, requires libslirp]) -AC_ARG_ENABLE(libslirp,AC_HELP_STRING([--disable-libslirp],[Disable libslirp support]),enable_libslirp=$enableval,enable_libslirp=yes) -if test x$enable_libslirp = xyes ; then - case "$host" in - *-*-cygwin* | *-*-mingw32*) - if test x$have_slirp_h = xyes; then - have_slirp_lib=yes - fi - ;; - esac - if test x$have_slirp_lib = xyes -a x$have_slirp_h = xyes ; then - have_slirp=yes - AC_DEFINE(C_SLIRP,1) - LIBS="$LIBS "`pkg-config slirp --libs` - CFLAGS="$CFLAGS "`pkg-config slirp --cflags` - CPPFLAGS="$CPPFLAGS "`pkg-config slirp --cflags` - case "$host" in - *-*-cygwin* | *-*-mingw32*) - LIBS="$LIBS -lintl" - ;; - esac - else - have_slirp=no - AC_MSG_WARN([Can't find libslirp, userspace TCP/IP emulation disabled]) - fi -fi - -if test x$enable_x11 != xno; then - dnl FEATURE: Whether to use X11 XKBlib - AH_TEMPLATE(C_X11_XKB,[define to 1 if you have XKBlib.h and X11 lib]) - AC_MSG_CHECKING(for XKBlib support) - if test x$have_x11_lib = xyes -a x$have_x11_h = xyes ; then - LIBS="$LIBS -lX11" - AC_DEFINE(C_X11_XKB,1) - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - - dnl FEATURE: Whether to use X11 XRandR - AH_TEMPLATE(C_X11_XRANDR,[define to 1 if you have XRandr.h and X11 lib]) - AC_MSG_CHECKING(for XRandR support) - if test x$have_xrandr_lib = xyes -a x$have_x11_h = xyes ; then - LIBS="$LIBS -lXrandr" - AC_DEFINE(C_X11_XRANDR,1) - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - - dnl Having XKBlib doesn't mean XKBrules.h is around - if test x$have_x11_ext_xkbrules_h = xyes ; then - AH_TEMPLATE(C_X11_EXT_XKBRULES,[define to 1 if XKBrules.h is present]) - AC_DEFINE(C_X11_EXT_XKBRULES,1) - fi - if test x$have_xkbfile_h = xyes ; then - AH_TEMPLATE(C_X11_XKBFILE,[define to 1 if XKBfile.h is present]) - AC_DEFINE(C_X11_XKBFILE,1) - LIBS="$LIBS -lxkbfile" - fi - - if test x$have_x11_h = xyes ; then - AH_TEMPLATE(C_X11,[define to 1 to enable X11 support]) - AC_DEFINE(C_X11,1) - fi -fi - -dnl FEATURE: Whether to use Fluidsynth -AH_TEMPLATE(C_FLUIDSYNTH,[Define to 1 to enable libfluidsynth MIDI synthesis]) -AC_ARG_ENABLE(libfluidsynth,AC_HELP_STRING([--disable-libfluidsynth],[Disable libfluidsynth support]),enable_libfluidsynth=$enableval,enable_libfluidsynth=yes) -if test x$enable_libfluidsynth = xyes; then - case "$host" in - *-*-linux*) - if test x$have_fluidsynth_h = xyes; then - have_fluidsynth_lib=yes - fi - ;; - esac - if test x$have_fluidsynth_lib = xyes -a x$have_fluidsynth_h = xyes ; then - LIBS="$LIBS -lfluidsynth" - AC_DEFINE(C_FLUIDSYNTH,1) - else - AC_MSG_WARN([libfluidsynth MIDI synthesis not available]) - fi -fi - -dnl FEATURE: FFMPEG output support -AH_TEMPLATE(C_AVCODEC,[Define to 1 to use FFMPEG libavcodec for video capture]) -AC_ARG_ENABLE(avcodec,AC_HELP_STRING([--enable-avcodec],[Enable FFMPEG avcodec support]),enable_ffmpeg=$enableval,enable_ffmpeg=yes) -if test x$enable_ffmpeg = xyes; then - if test x$have_ffmpeg = xyes; then - if test x$have_avcodec_h = xyes; then - PKGS="libavcodec libavformat libavutil libswscale libswresample" - CFLAGS="$CFLAGS "`pkg-config $PKGS --cflags` - CPPFLAGS="$CPPFLAGS "`pkg-config $PKGS --cflags` - LIBS=`pkg-config $PKGS --libs`" $LIBS" - AC_MSG_RESULT(yes) - AC_DEFINE(C_AVCODEC,1) - fi - fi -fi - -dnl FEATURE: Whether to use Direct3D 9 output -AH_TEMPLATE(HAVE_D3D9_H,[Define to 1 to use Direct3D 9 display output support]) -AC_ARG_ENABLE(d3d9,AC_HELP_STRING([--enable-d3d9],[Enable Direct3D 9 support]),enable_d3d9=$enableval,enable_d3d9=no) -AC_MSG_CHECKING(whether Direct3D 9 display output will be enabled) - -dnl FEATURE: Direct3D9 shaders -AH_TEMPLATE(C_D3DSHADERS,[Define to 1 to use Direct3D shaders]) -AC_ARG_ENABLE(d3d-shaders,AC_HELP_STRING([--enable-d3d-shaders],[Enable Direct3D shaders]),enable_d3d_shaders=$enableval,enable_d3d_shaders=no) - -if test x$enable_d3d9 = xyes; then - case "$host" in - *-*-cygwin* | *-*-mingw32*) - if test x$have_d3d9_h = xyes -a x$have_d3dx9math_h = xyes ; then - do_d3d=1 - AC_MSG_RESULT(yes) - AH_TEMPLATE(C_DIRECT3D,[Define to 1 to enable Direct3D 9 display output support]) - AC_DEFINE(HAVE_D3D9_H,1) - AC_DEFINE(C_DIRECT3D,1) - if test x$enable_d3d_shaders = xyes; then - AC_DEFINE(C_D3DSHADERS,1) - fi - else - AC_MSG_RESULT(no) - fi - ;; - *) - AC_MSG_RESULT(no) - ;; - esac -else - AC_MSG_RESULT(no) -fi - -AM_CONDITIONAL(C_DIRECT3D, test x"$do_d3d" = x"1") - -AH_TEMPLATE(C_ICONV,[Define to 1 to use iconv]) -if test x$have_iconv_h = xyes; then - AC_DEFINE(C_ICONV,1) - AC_MSG_CHECKING([whether we must link against -liconv]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #include - iconv_t wrap_open(const char *tocode, const char *fromcode) { - return iconv_open(tocode, fromcode); - }]])], - AC_MSG_RESULT(no), [AC_MSG_RESULT(yes);LIBS="$LIBS -liconv"]) -fi - -dnl placeholder -AH_TEMPLATE(C_ICONV_WIN32,[Define to 1 to use Win32 functions in iconv backend]) - -dnl If networking is used, add networking libraries last on Windows -dnl so SDL_net, fluidsynth and libslirp successfully link to them -if test x$enable_emscripten != xyes; then -case "$host" in - *-*-cygwin* | *-*-mingw32*) - if test x$have_slirp = xyes; then - LIBS="$LIBS -luuid -lole32" - fi - LIBS="$LIBS -lwsock32 -lws2_32 -liphlpapi -lshlwapi" - if test x$enable_freetype = xyes; then - LIBS="$LIBS -lfreetype -lwinspool" - fi - ;; -esac -fi - -dnl LIBRARY USE: opencow -case "$host" in - *-*-cygwin* | *-*-mingw32*) - if test x$enable_opencow = xyes; then - LIBS="-lopencow $LIBS -lstdc++ -lopencow" #need to put at the first, also better at the last too. - LDFLAGS="$LDFLAGS -Wl,--allow-multiple-definition " - if test -n "$SDL_LIBS"; then - LIBS="${LIBS//-luser32/-lopencow -luser32}" - #SDL_LIBS="${SDL_LIBS//-luser32/\-lopencow -luser32}" - fi - fi - ;; -esac - -dnl BUILD: whether to enable universal binary support -if test x"$macosx" = x"1" && test x"$host_cpu" = x"arm"; then - AC_ARG_ENABLE(universal,AC_HELP_STRING([--enable-universal],[Enable macOS universal binary support]), - [enable_universal=$enableval], - [enable_universal=no]) -else - enable_universal=no -fi - -AM_CONDITIONAL(MACOS_UNIVERSAL, [ test x$enable_universal = xyes ]) - -AC_CONFIG_FILES([ -Makefile -src/Makefile -src/cpu/Makefile -src/cpu/core_full/Makefile -src/cpu/core_normal/Makefile -src/debug/Makefile -src/dos/Makefile -src/fpu/Makefile -src/gamelink/Makefile -src/gui/Makefile -src/hardware/Makefile -src/hardware/mame/Makefile -src/hardware/serialport/Makefile -src/hardware/reSID/Makefile -src/hardware/parport/Makefile -src/aviwriter/Makefile -src/ints/Makefile -src/libs/Makefile -src/libs/zmbv/Makefile -src/libs/gui_tk/Makefile -src/libs/passthroughio/Makefile -src/libs/mt32/Makefile -src/libs/xBRZ/Makefile -src/libs/fluidsynth/Makefile -src/libs/decoders/internal/Makefile -src/output/Makefile -src/output/direct3d/Makefile -src/builtin/Makefile -src/misc/Makefile -src/shell/Makefile -src/platform/Makefile -include/Makefile -contrib/macos/dosbox-x.plist -contrib/linux/dosbox-x.spec -contrib/linux/com.dosbox_x.DOSBox-X.metainfo.xml -make-rpm.sh -]) -AC_OUTPUT - -# HACK: it's a script... -chmod +x make-rpm.sh +dnl Init. +AC_INIT(dosbox-x,2023.10.06,[https://github.com/joncampbell123/dosbox-x/issues],[],[https://dosbox-x.com]) +AC_PREREQ(2.60) +AC_CONFIG_SRCDIR(README.md) + +dnl Utility function ============================ + +# AC_CHECK_CPPFLAGS(ADDITIONAL-CPPFLAGS, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) +# +# checks whether the $(C) compiler accepts the ADDITIONAL-CPPFLAGS +# if so, they are added to the CPPFLAGS +AC_DEFUN([AC_CHECK_CPPFLAGS], +[ + AC_MSG_CHECKING([whether $CPP accepts "$1"]) + temp_check_cppflags="${CPPFLAGS}" + CPPFLAGS="$1 ${CPPFLAGS}" + AC_PREPROC_IFELSE( + [AC_LANG_SOURCE([[int main(void){return 0;}]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]); CPPFLAGS="${temp_check_cppflags}"]) +])# AC_CHECK_CPPFLAGS + +dnl LIBRARY TEST: OpenGL support +AC_CHECK_LIB(GL, main, have_gl_lib=yes, have_gl_lib=no , ) +AC_CHECK_LIB(opengl32, main, have_opengl32_lib=yes,have_opengl32_lib=no , ) +AC_CHECK_HEADER(GL/gl.h, have_gl_h=yes , have_gl_h=no , ) + +dnl LIBRARY TEST: Direct3D 9 header support +AC_CHECK_HEADER(d3d9.h, have_d3d9_h=yes , have_d3d9_h=no , ) +AC_CHECK_HEADER(d3dx9math.h, have_d3dx9math_h=yes , have_d3dx9math_h=no , ) + +dnl Utility function ============================ + +# AC_CHECK_CXXFLAGS(ADDITIONAL-CXXFLAGS, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) +# +# checks whether the $(CXX) (c++) compiler accepts the ADDITIONAL-CXXFLAGS +# if so, they are added to the CXXFLAGS +AC_DEFUN([AC_CHECK_CXXFLAGS], +[ + AC_MSG_CHECKING([whether $CXX accepts "$1"]) +cat > conftest.c++ << EOF +int main(){ + return 0; +} +EOF +if $CXX $CPPFLAGS $CXXFLAGS -Werror -c -o conftest.o conftest.c++ [$1] > /dev/null 2>&1 +then + AC_MSG_RESULT([yes]) + CXXFLAGS="${CXXFLAGS} [$1]" + AC_CHECK_CPPFLAGS([$1]) + [$2] +else + AC_MSG_RESULT([no]) + [$3] +fi +])# AC_CHECK_CXXFLAGS + +dnl End Utility function ============================ + +dnl Detect the canonical host and target build environment +AC_CANONICAL_HOST +AC_CANONICAL_BUILD + +dnl Setup for automake +AM_INIT_AUTOMAKE([foreign subdir-objects]) +AC_CONFIG_HEADER(config.h) +AH_BOTTOM([/* + Define HAS_CDIRECTLPT as 1 if C_DIRECTLPT is defined (as 1) *and* parallel + pass-through is available on the current platform. It is only available on + x86{_64} with Windows or BSD, and on Linux. + We cannot override the value of C_DIRECTLPT, because configure will replace + "#undef C_DIRECTLPT" or "#define C_DIRECTLPT 0" with "#define C_DIRECTLPT 1". +*/ +#ifdef C_DIRECTLPT +#if ((defined __i386__ || defined __x86_64__ || defined _M_IX86 || defined _M_X64) && \ + (defined WIN32 || defined BSD || defined __CYGWIN__)) || \ + /* WIN32 is not defined by default on Cygwin */ \ + defined LINUX /* Linux, including non-x86 (e.g. Raspberry Pi) */ +#define HAS_CDIRECTLPT 1 +#endif +#endif // C_DIRECTLPT +#ifndef HAS_CDIRECTLPT +#define HAS_CDIRECTLPT 0 +#endif]) + +dnl Checks for programs. +AC_PROG_MAKE_SET +AC_PROG_CC +AC_PROG_CPP +AC_PROG_CXX +AC_PROG_OBJCXX +AC_PROG_INSTALL +AC_CHECK_TOOL(AR, ar) +AC_PROG_RANLIB +AC_PREFIX_DEFAULT([/usr/local]) + +dnl this code needs large file support on 32-bit systems +AC_SYS_LARGEFILE + +#Check for big endian machine, should #define WORDS_BIGENDIAN if so +AC_C_BIGENDIAN + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_C_INLINE +AC_TYPE_SIZE_T +AC_STRUCT_TM + +dnl some semi complex check for sys/socket so it works on darwin as well +AC_CHECK_HEADERS([stdlib.h sys/types.h]) +AC_CHECK_HEADERS([sys/socket.h netinet/in.h pwd.h], [], [], +[#include +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +]) + +dnl C++11 is mandatory in this codebase. +dnl C++14 is optional at this time, will eventually become mandatory. + +dnl AC_CHECK_CXXFLAGS will prepend gnu++11 to CXXFLAGS if supported, for us. +OLDCFLAGS="$CFLAGS" +OLDCPPFLAGS="$CPPFLAGS" +OLDCXXFLAGS="$CXXFLAGS" + +AC_MSG_CHECKING([checking for C++14 support]) +AC_CHECK_CXXFLAGS([ -std=gnu++14 ], [ ], [ + warn_cpp11=1 +]) + +CXXFLAGS="$OLDCXXFLAGS" +CPPFLAGS="$OLDCPPFLAGS" +CFLAGS="$OLDCFLAGS" + +AC_MSG_CHECKING([checking for C++11 support]) +AC_CHECK_CXXFLAGS([ -std=gnu++11 ], [ ], [ + warn_cpp0x=1 +]) + +CXXFLAGS="$OLDCXXFLAGS" +CPPFLAGS="$OLDCPPFLAGS" +CFLAGS="$OLDCFLAGS" + +if test x$warn_cpp0x = x1; then + AC_MSG_ERROR([ Your compiler must support C++11 or better ]) +fi + +dnl Allow devs to force compile as C++11 as long as this code supports C++11 as a baseline +AC_ARG_ENABLE(force-cxx11,AC_HELP_STRING([--enable-force-cxx11],[Force compile as C++11]),force_cxx11=yes) + +if test x$warn_cpp11 = x1; then + AC_MSG_WARN([ Your compiler does not support C++14. Currently it is optional. At some point in the future, it will be required ]) + CFLAGS="$CFLAGS -std=gnu11"; + CXXFLAGS="$CXXFLAGS -std=gnu++11"; +elif test x$force_cxx11 = xyes; then + CFLAGS="$CFLAGS -std=gnu11"; + CXXFLAGS="$CXXFLAGS -std=gnu++11"; +else + AC_MSG_WARN([ DOSBox-X is still intended to support compilation as C++11. If you add new code please make sure it works as C++11 by running ./configure with --enable-force-cxx11 ]) + CFLAGS="$CFLAGS -std=gnu11"; # no such "gnu14" + CXXFLAGS="$CXXFLAGS -std=gnu++14"; +fi + +dnl Allow the SDL drawn menu to be enabled on Windows or macOS instead of their native menu system. +AH_TEMPLATE(C_FORCE_MENU_SDLDRAW,[Define to 1 to force SDL-drawn menus]) +AC_ARG_ENABLE(force-menu-sdldraw,AC_HELP_STRING([--enable-force-menu-sdldraw],[Force SDL drawn menus]),enable_force_menu_sdldraw=yes) + +dnl This is how the build script can specify a HX DOS extender target +AH_TEMPLATE(C_HX_DOS,[Define to 1 to target HX DOS]) +AC_ARG_ENABLE(hx-dos,AC_HELP_STRING([--enable-hx-dos],[Enable HX target]),enable_hx=yes) + +dnl This is how the build script can use libopencow for win9x unicode +# AH_TEMPLATE(C_OPENCOW,[Define to 1 to enable opencow]) +AC_ARG_ENABLE(opencow,AC_HELP_STRING([--enable-opencow],[Enable OpenCOW]),enable_opencow=yes) + +dnl Disable SDLnet for win9x builds +AC_ARG_ENABLE(sdlnet,AC_HELP_STRING([--disable-sdlnet],[Disable SDLNet]),disable_sdl_net=yes) + +dnl Let me know if you're targeting Emscripten +AH_TEMPLATE(C_EMSCRIPTEN,[Define to 1 to target Emscripten]) +AC_ARG_ENABLE(emscripten,AC_HELP_STRING([--enable-emscripten],[Enable Emscripten target]),enable_emscripten=$enableval,enable_emscripten=no) + +dnl Allow disabling X11 integration if your platform doesn't support it +AC_ARG_ENABLE(x11,AC_HELP_STRING([--disable-x11],[Don't enable X11 integration])) + +dnl Optimize for speed by default +AC_ARG_ENABLE(optimize,AC_HELP_STRING([--disable-optimize],[Don't enable compiler optimizations])) + +dnl FIXME: Remove default "-O2" set by some autotools versions. TODO: check availability of sed. +CFLAGS=["`echo $CFLAGS' ' | sed -e 's/-O[^ ]* //g'`"] +CXXFLAGS=["`echo $CXXFLAGS' ' | sed -e 's/-O[^ ]* //g'`"] + +if test x$enable_optimize != xno; then + if test x$enable_emscripten = xyes; then + CFLAGS="$CFLAGS -Os" + CXXFLAGS="$CXXFLAGS -Os" + else + CFLAGS="$CFLAGS -O2" + CXXFLAGS="$CXXFLAGS -O2" + fi +fi + +if test x$enable_emscripten = xyes; then + AC_DEFINE(C_EMSCRIPTEN,1,[Targeting Emscripten]) + AC_DEFINE(C_DIRECTSERIAL, 0, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) +fi + +dnl Some stuff for the icon. +case "$host" in + *-*-cygwin* | *-*-mingw32*) + if test x$enable_hx = xyes; then + CXXFLAGS="$CXXFLAGS -DHX_DOS" + AC_DEFINE(C_HX_DOS,1,[Targeting HX DOS extender]) + fi + ;; +esac + +if test x$enable_force_menu_sdldraw = xyes; then + CXXFLAGS="$CXXFLAGS -DFORCE_SDLDRAW" + AC_DEFINE(C_FORCE_MENU_SDLDRAW,1,[Force SDL drawn menus]) +fi + +dnl TEST: Environ can be included +AC_MSG_CHECKING(if environ can be included) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +#include ]],[[*environ;]])], +[AC_MSG_RESULT(yes);AC_DEFINE(ENVIRON_INCLUDED,1,[environ can be included])],AC_MSG_RESULT(no)) + +dnl TEST: Environ can be linked +AC_MSG_CHECKING(if environ can be linked) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern char ** environ;]],[[*environ;]])], +[AC_MSG_RESULT(yes);AC_DEFINE(ENVIRON_LINKED,1,[environ can be linked])],AC_MSG_RESULT(no)) + +dnl TEST: dirent includes d_type +AC_MSG_CHECKING([if dirent includes d_type]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ +#include +#include +void blah(){ +struct dirent d_test; +d_test.d_type = 0; +}])],[AC_MSG_RESULT(yes);AC_DEFINE(DIRENT_HAS_D_TYPE,1,[struct dirent has d_type])],AC_MSG_RESULT(no)) + +dnl TEST: Check for powf +AC_MSG_CHECKING(for powf in libm); +LIBS_BACKUP=$LIBS; +LIBS="$LIBS -lm"; +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ + powf(1.0f, 1.0f); +]])], [AC_MSG_RESULT(yes)], [AC_DEFINE([DB_HAVE_NO_POWF],[1],[libm does not include powf])]) +LIBS=$LIBS_BACKUP + +dnl Look for clock_gettime, a DB_HAVE_CLOCK_GETTIME is set when present +AH_TEMPLATE([DB_HAVE_CLOCK_GETTIME],[Determines if the function clock_gettime is available.]) +AC_SEARCH_LIBS([clock_gettime], [rt] , [found_clock_gettime=yes], [found_clock_gettime=no]) +if test x$found_clock_gettime = xyes; then + AC_DEFINE(DB_HAVE_CLOCK_GETTIME) +fi + +dnl TEST: Check if the compiler support attributes +AH_TEMPLATE([C_HAS_ATTRIBUTE],[Determines if the compilers supports attributes for structures.]) +AC_MSG_CHECKING(if compiler allows __attribute__) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +typedef struct { } __attribute__((packed)) junk;]], +[[ ]])],[ AC_MSG_RESULT(yes);AC_DEFINE(C_HAS_ATTRIBUTE)],AC_MSG_RESULT(no)) + +dnl TEST: Check if the compiler supports certain attributes +OLDCFLAGS="$CFLAGS" +CFLAGS="-Werror" + +AH_TEMPLATE([C_ATTRIBUTE_ALWAYS_INLINE],[Determines if the compilers supports always_inline attribute.]) +AC_MSG_CHECKING(if compiler allows __attribute__((always_inline)) ) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ inline void __attribute__((always_inline)) test(){} +])],[ AC_MSG_RESULT(yes);AC_DEFINE(C_ATTRIBUTE_ALWAYS_INLINE)],AC_MSG_RESULT(no)) + +AH_TEMPLATE([C_ATTRIBUTE_FASTCALL],[Determines if the compilers supports fastcall attribute.]) +AC_MSG_CHECKING(if compiler allows __attribute__((fastcall)) ) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ void __attribute__((fastcall)) test(){} +])],[ AC_MSG_RESULT(yes);AC_DEFINE(C_ATTRIBUTE_FASTCALL)],AC_MSG_RESULT(no)) + +CFLAGS="$OLDCFLAGS" + +dnl TEST: Check if the compiler supports __builtin_expect +#Switch language to c++ +AC_LANG_PUSH(C++) +AH_TEMPLATE([C_HAS_BUILTIN_EXPECT],[Determines if the compilers supports __builtin_expect for branch prediction.]) +AC_MSG_CHECKING(if compiler allows __builtin_expect) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[ +int x=10;if( __builtin_expect ((x==1),0) ) ; +]])], [ AC_MSG_RESULT(yes);AC_DEFINE(C_HAS_BUILTIN_EXPECT)],AC_MSG_RESULT(no)) +#switch language back +AC_LANG_POP(C++) + +dnl Check for mach_vm_remap (Darwin) +AH_TEMPLATE(C_HAVE_MACH_VM_REMAP,[Define to 1 if you have the mach_vm_remap function]) +AC_CHECK_HEADER([mach/mach.h], [ +AC_CHECK_FUNC([mach_vm_remap],[AC_DEFINE(C_HAVE_MACH_VM_REMAP,1)]) +]) + +dnl Check for mprotect. Needed for 64 bits linux +AH_TEMPLATE(C_HAVE_MPROTECT,[Define to 1 if you have the mprotect function]) +AC_CHECK_HEADER([sys/mman.h], [ +AC_CHECK_FUNC([mprotect],[AC_DEFINE(C_HAVE_MPROTECT,1)]) +]) + +dnl Check for memfd_create, for dynamic core. You need the glibc version, not just the syscall. +AH_TEMPLATE(C_HAVE_MEMFD_CREATE,[Define to 1 if you have the memfd_create function]) +AC_CHECK_HEADER([sys/mman.h], [ +AC_CHECK_FUNC([memfd_create],[AC_DEFINE(C_HAVE_MEMFD_CREATE,1)]) +]) + +dnl Check for posix_memalign +AH_TEMPLATE(C_HAVE_POSIX_MEMALIGN,[Define to 1 if you have the posix_memalign function]) +AC_CHECK_HEADER([stdlib.h], [ +AC_CHECK_FUNC([posix_memalign],[AC_DEFINE(C_HAVE_POSIX_MEMALIGN,1)]) +]) + +dnl Check for mmap +AH_TEMPLATE(C_HAVE_MMAP,[Define to 1 if you have the mmap function]) +AC_CHECK_HEADER([sys/mman.h], [ +AC_CHECK_FUNC([mmap],[AC_DEFINE(C_HAVE_MMAP,1)]) +]) + +dnl Check for realpath. Used on Linux +AC_CHECK_FUNCS([realpath]) + +dnl Setpriority +AH_TEMPLATE(C_SET_PRIORITY,[Define to 1 if you have setpriority support]) +AC_MSG_CHECKING(for setpriority support) +AC_LINK_IFELSE([AC_LANG_SOURCE([ +#include +int main(int argc,char **argv) { + return setpriority (PRIO_PROCESS, 0,PRIO_MIN+PRIO_MAX); +}; +])],AC_MSG_RESULT(yes);AC_DEFINE(C_SET_PRIORITY,1),AC_MSG_RESULT(no)) + +dnl Some target detection and actions for them +case "$host" in + *-*-darwin* | *-*-openbsd*) + dnl El Capitan's refusal to allow sudo make install to /usr/include, and the failure of most open source to + dnl include from /usr/local/include is irritating and tiresome... + CFLAGS="$CFLAGS -I/usr/local/include" + CPPFLAGS="$CPPFLAGS -I/usr/local/include" + ;; +esac + +if test x$enable_emscripten = xyes; then + CXXFLAGS="$CXXFLAGS" +else + dnl Some default CPU flags + case "$host_cpu" in + x86_64 | amd64) + # SSE is part of the x86_64 ABI + CXXFLAGS="$CXXFLAGS -msse" + ;; + esac +fi + +dnl Some needed libaries for OS2 +dnl perharps join this with the other target depended checks. move them upwards +if test x$host = xi386-pc-os2-emx ; then + CXXFLAGS="$CXXFLAGS -Zmt" + LDFLAGS="$LDFLAGS -Zomf -Zmt" +fi + +dnl I would like to know of any concerns given by the C++ compiler. +dnl Clang/LLVM already does this to some degree, let's get GCC to do it too. +AC_CHECK_CXXFLAGS([ -Wall ]) +AC_CHECK_CXXFLAGS([ -Wextra ]) +AC_CHECK_CXXFLAGS([ -Wunused ]) +AC_CHECK_CXXFLAGS([ -pedantic ]) +AC_CHECK_CXXFLAGS([ -Wno-error=format-security ]) # imfc.cpp and later versions of GCC, see https://github.com/joncampbell123/dosbox-x/issues/4436 +#AC_CHECK_CXXFLAGS([ -Wconversion ]) DO NOT ENABLE. THIS WARNING IS WAY TOO PEDANTIC TO BE USEFUL, EXCEPT FOR SPECIFIC CASES +#AC_CHECK_CXXFLAGS([ -Wsign-conversion ]) +AC_CHECK_CXXFLAGS([ -Wlogical-op ]) +AC_CHECK_CXXFLAGS([ -Wsign-promo ]) +AC_CHECK_CXXFLAGS([ -Wconversion-null ]) +#AC_CHECK_CXXFLAGS([ -Woverloaded-virtual ]) NOT TOO USEFUL +AC_CHECK_CXXFLAGS([ -Wno-deprecated-declarations ]) + +dnl Let GCC 7.3.x know that the "fall through" switch cases in this codebase +dnl are often intentional. +AC_CHECK_CXXFLAGS([ -Wno-implicit-fallthrough ]) + +dnl Stop reporting "type punning" warnings, I'm sick of hearing about it. +AC_CHECK_CXXFLAGS([ -Wno-strict-aliasing ]) + +dnl other +AC_CHECK_CXXFLAGS([ -Wno-missing-field-initializers ]) +AC_CHECK_CXXFLAGS([ -Wno-format-zero-length ]) + +dnl Clang/LLVM warning: don't care the address of a member may be unaligned, unless targeting ARM! +AC_CHECK_CXXFLAGS([ -Wno-address-of-packed-member ]) +dnl Clang/LLVM warning: don't care about int to void*, since void* is either same size or larger +AC_CHECK_CXXFLAGS([ -Wno-int-to-void-pointer-cast ]) + +dnl Some stuff for the icon and other makefile platform stuff. +dnl Slightly double with the above, but that deals more with compiled features. +case "$host" in + *-*-cygwin* | *-*-mingw32*) + dnl Some stuff for the ico + AC_CHECK_TOOL(WINDRES, windres, :) + LDFLAGS="-static -static-libgcc -static-libstdc++ $LDFLAGS" + DBPLATFORM="win" + ;; + *-*-darwin*) + WINDRES=":" + DBPLATFORM="mac" + ;; + *) + WINDRES=":" + DBPLATFORM="other" + ;; +esac + AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:") + AM_CONDITIONAL(MACOSX, test "x$DBPLATFORM" = "xmac") + AC_SUBST(WINDRES) + +dnl LIBRARY TEST: SDL 2.x +SDL2_VERSION=2.0.5 +AM_PATH_SDL2($SDL2_VERSION) + +dnl LIBRARY TEST: SDL 1.x +SDL_VERSION=1.2.0 +AM_PATH_SDL($SDL_VERSION) + +dnl LIBRARY USE: SDL selection +if test -n "$SDL2_LIBS"; then + LIBS="$LIBS $SDL2_LIBS" + CPPFLAGS="$CPPFLAGS $SDL2_CFLAGS" +else + if test -n "$SDL_LIBS"; then + LIBS="$LIBS $SDL_LIBS" + CPPFLAGS="$CPPFLAGS $SDL_CFLAGS" + else + AC_MSG_ERROR([SDL 1.x or SDL 2.x is required to compile this program]) + fi +fi + +AH_TEMPLATE(C_GAMELINK,[Define to 1 to enable game link headless mode]) +AC_CHECK_LIB(rt, main, have_rt_lib=yes, have_rt_lib=no , ) +AC_ARG_ENABLE(gamelink,AC_HELP_STRING([--disable-gamelink],[Disable headless game link output mode (only for SDL2)]),,enable_gamelink=yes) +AC_MSG_CHECKING(whether gamelink is enabled) +if test x$enable_gamelink = xyes; then + if test "x$SDL2_LIBS" = "x"; then + AC_MSG_RESULT(no (SDL2 missing)) + else + AC_MSG_RESULT(yes) + C_GAMELINK=1 + AC_DEFINE(C_GAMELINK,1) + fi +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL([C_GAMELINK], [test "x$C_GAMELINK" = x1]) + + +dnl FEATURE: Whether to use OpenGL +AH_TEMPLATE(C_OPENGL,[Define to 1 to use opengl display output support]) +AC_ARG_ENABLE(opengl,AC_HELP_STRING([--disable-opengl],[Disable opengl support]),enable_opengl=$enableval,enable_opengl=yes) +AC_MSG_CHECKING(whether opengl display output will be enabled) + +# We need to do this before any other AC_CHECK_LIB runs just to make sure +# linking doesn't fail if SDL is using OpenGL +if test x$enable_opengl = xyes; then +case "$host" in + *-*-darwin*) + AC_MSG_RESULT(yes) + LIBS="$LIBS -framework OpenGL" + AC_DEFINE(C_OPENGL,1) + ;; + *) + pkg-config --exists gl; RES=$? + if test x$RES = x0; then + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS "`pkg-config gl --cflags` + CPPFLAGS="$CPPFLAGS "`pkg-config gl --cflags` + LIBS="$LIBS "`pkg-config gl --libs` + AC_DEFINE(C_OPENGL,1) + elif test x$have_gl_h = xyes -a x$have_gl_lib = xyes ; then + AC_MSG_RESULT(yes) + LIBS="$LIBS -lGL" + AC_DEFINE(C_OPENGL,1) + elif test x$have_gl_h = xyes -a x$have_opengl32_lib = xyes ; then + AC_MSG_RESULT(yes) + LIBS="$LIBS -lopengl32" + AC_DEFINE(C_OPENGL,1) + else + AC_MSG_RESULT(no) + fi + ;; +esac +fi + +# FIXME: Arrggh we need the WHOLE PATH +pwd=`realpath $srcdir` +if [[ -z "$pwd" ]]; then pwd=`pwd`; fi + +CFLAGS="$CFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" +LDFLAGS="$LDFLAGS -L$pwd/vs/sdlnet/linux-host/lib" +CPPFLAGS="$CPPFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" +CXXFLAGS="$CXXFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" + +if test x$enable_emscripten != xyes; then +dnl Some target detection and actions for them +case "$host" in + *-*-cygwin* | *-*-mingw32*) + LIBS="$LIBS -lwinmm -ldsound -limm32 -lole32 -loleaut32 -lversion -lsetupapi" + CXXFLAGS="$CXXFLAGS -mno-ms-bitfields" + dnl FEATURE: Whether to support direct parallel port pass-through + AC_DEFINE(C_DIRECTLPT, 1, [ Define to 1 if you want parallel pass-through support (Win32, Linux and BSD).]) + dnl FEATURE: Whether to support direct serial port pass-through + AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) + ;; + *-*-darwin*) + dnl We have a problem here: both Mac OS X and Darwin report + dnl the same signature "powerpc-apple-darwin*" - so we have + dnl to do more to distinguish them. + dnl For now I am lazy and do not add proper detection code. + macosx=1 + if test x$warn_cpp11 = x1; then + OBJCXXFLAGS="$OBJCXXFLAGS -std=gnu++14"; + else + OBJCXXFLAGS="$OBJCXXFLAGS -std=gnu++11"; + fi + AC_DEFINE(MACOSX, 1, [Compiling on Mac OS X]) + LIBS="$LIBS -framework Carbon -framework CoreFoundation -framework CoreMIDI -framework AudioUnit -framework AudioToolbox -framework ApplicationServices -framework AppKit -framework IOKit" + dnl FEATURE: Whether to support direct serial port pass-through + AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) + ;; + *-*-linux*) + AC_DEFINE(LINUX, 1, [Compiling on GNU/Linux]) + CXXFLAGS="$CXXFLAGS -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L" + LIBS="$LIBS -lrt" # uses shm_* functions which requires librt on Linux + dnl FEATURE: Whether to support direct parallel port pass-through + AC_DEFINE(C_DIRECTLPT, 1, [ Define to 1 if you want parallel pass-through support (Win32, Linux and BSD).]) + dnl FEATURE: Whether to support direct serial port pass-through + AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) + ;; + *-*-haiku*) + AC_DEFINE(HAIKU, 1, [Compiling on Haiku]) + dnl FEATURE: Whether to support direct serial port pass-through + AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) + LIBS="$LIBS -lnetwork -lbsd -lbe" + ;; + *-*-freebsd* | *-*-dragonfly* | *-*-netbsd* | *-*-openbsd*) + dnl FEATURE: Whether to support direct parallel port pass-through + AC_DEFINE(C_DIRECTLPT, 1, [ Define to 1 if you want parallel pass-through support (Win32, Linux and BSD).]) + dnl Disabled directserial for now. It doesn't do anything without + dnl specifying an extra ifdef in directserial_posix.* + dnl directserial detection should be rewritten to test for the needed + dnl functions and headers. I currently do not know + dnl which ones are needed for BSD + AC_DEFINE(BSD, 1, [Compiling on BSD]) + dnl FEATURE: Whether to support direct serial port pass-through + AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) + ;; + *-*-os2-emx*) + AC_DEFINE(OS2, 1, [Compiling on OS/2 EMX]) + dnl FEATURE: Whether to support direct serial port pass-through + AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) + ;; + *-*-riscos*) + AC_DEFINE(RISCOS, 1, [Compiling on RISC OS]) + dnl The following line is required in order to use std::to_string() + CXXFLAGS="$CXXFLAGS -D_GLIBCXX_USE_C99=1" + ;; +esac + +dnl Fix for FreeBSD not automatically linking to pthread for std::thread +case "$host" in + *-*-freebsd*) + LIBS="$LIBS -lpthread" + ;; +esac + +dnl OpenBSD/i386 and NetBSD/i386 require linking to libi386.a for i386_iopl() (for initPassthroughIO()). +dnl OpenBSD/x86_64 requires linking to libamd64.a for amd64_iopl(). NetBSD/x86_64 requires linking to libx86_64.a for x86_64_iopl(). +case "$host" in + i*86-*-openbsd* | i*86-*-netbsd*) + LIBS="$LIBS -li386" + ;; + x86_64-*-openbsd*) + LIBS="$LIBS -lamd64" + ;; + x86_64-*-netbsd*) + LIBS="$LIBS -lx86_64" + ;; +esac +fi + +AM_CONDITIONAL(MACOSX, test x"$macosx" = x"1") +AM_CONDITIONAL(EMSCRIPTEN, test x"$enable_emscripten" = x"yes") + +dnl The target cpu checks for dynamic cores +AH_TEMPLATE(C_TARGETCPU,[The type of cpu this target has]) +AC_MSG_CHECKING(for target cpu type) +case "$host_cpu" in + x86_64 | amd64) + AC_DEFINE(C_TARGETCPU,X86_64) + AC_MSG_RESULT(x86-64 bit compatible) + c_targetcpu="x86_64" + c_unalignedmemory=yes + ;; + i?86) + AC_DEFINE(C_TARGETCPU,X86) + AC_MSG_RESULT(x86 compatible) + c_targetcpu="x86" + c_unalignedmemory=yes + ;; + powerpc*) + AC_DEFINE(C_TARGETCPU,POWERPC) + AC_MSG_RESULT(Power PC) + c_targetcpu="powerpc" + c_unalignedmemory=yes + ;; + m68k*) + AC_DEFINE(C_TARGETCPU,M68K) + AC_MSG_RESULT(Motorola 68000) + c_targetcpu="m68k" + c_unalignedmemory=yes + ;; + armv7*) + AC_DEFINE(C_TARGETCPU,ARMV7LE) + AC_MSG_RESULT(ARMv7 Little Endian) + c_targetcpu="arm" + c_unalignedmemory=yes + ;; + armv6*) + AC_DEFINE(C_TARGETCPU,ARMV4LE) + AC_MSG_RESULT(ARMv6 Little Endian) + c_targetcpu="arm" + dnl c_unalignedmemory=yes + ;; + aarch64) + AC_DEFINE(C_TARGETCPU,ARMV8LE) + AC_MSG_RESULT(ARMv8 Little Endian 64-bit) + c_targetcpu="arm" + c_unalignedmemory=yes + ;; + arm) # Mac OS X uname -m says "arm64", for some reason it becomes "arm" ? + AC_DEFINE(C_TARGETCPU,ARMV8LE) + AC_MSG_RESULT(ARMv8 Little Endian 64-bit) + c_targetcpu="arm" + c_unalignedmemory=yes + ;; + *) + AC_DEFINE(C_TARGETCPU,UNKNOWN) + AC_MSG_RESULT(unknown) + c_unalignedmemory=no + ;; +esac + +dnl TODO: Need GCC to know this code is using C++ lamda functions + +dnl LIBRARY TEST: ALSA +AM_PATH_ALSA(0.9.0, AC_DEFINE(HAVE_ALSA,1,[Define to 1 to use ALSA for MIDI]) , : ) + +dnl Some stuff for the icon. +case "$host" in + *-*-cygwin* | *-*-mingw32*) + dnl MinGW puts ncurses headers in a subdir + ncursescfg=`ncursesw6-config --cflags` + CXXFLAGS="$CXXFLAGS $ncursescfg" + CPPFLAGS="$CPPFLAGS $ncursescfg" + CFLAGS="$CFLAGS $ncursescfg" + ;; + *) + WINDRES=":" + ;; +esac + + +dnl LIBRARY TEST: curses +AC_CHECK_HEADER(curses.h,have_curses_h=yes,) +AC_CHECK_LIB(curses, initscr, curses_lib=curses, , ) +AC_CHECK_LIB(ncurses, initscr, curses_lib=ncurses, , ) +AC_CHECK_LIB(pdcurses, initscr, curses_lib=pdcurses, , ) +# Check if this system's ncurses uses a separate tinfo library +AC_CHECK_LIB(tinfo, nodelay, + if test x$curses_lib = xncurses ; then + LIBS="$LIBS -ltinfo"; + fi) + +dnl LIBRARY TEST: libzlib +AC_CHECK_HEADER(zlib.h,have_zlib_h=yes,) +AC_CHECK_LIB(z, inflateEnd, have_zlib_lib=yes, ,) + +dnl LIBRARY TEST: libpng +AC_CHECK_HEADER(png.h,have_png_h=yes,) +AC_CHECK_LIB(png, png_get_io_ptr, have_png_lib=yes, ,-lz) + +dnl LIBRARY TEST: libpcap +AC_CHECK_HEADER(pcap.h,have_pcap_h=yes,) +AC_CHECK_LIB(pcap, pcap_open_live, have_pcap_lib=yes, ,-lz) + +dnl LIBRARY TEST: libslirp +AC_CHECK_HEADER(slirp/libslirp.h,have_slirp_h=yes,) +AC_CHECK_LIB(slirp, slirp_input, have_slirp_lib=yes, ,-lz) + +dnl LIBRARY TEST: libiconv +AC_CHECK_HEADER(iconv.h,have_iconv_h=yes,) +dnl TEST: check if iconv uses const char +AC_MSG_CHECKING([whether iconv uses const char**]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ +#include +size_t iconv(iconv_t, const char **restrict, size_t *restrict, char **restrict, size_t *restrict); +])], AC_DEFINE(ICONV_CONST_CHAR, 1) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) +AH_TEMPLATE(ICONV_CONST_CHAR,[Whether iconv uses const char**]) + +dnl LIBRARY TEST: SDLnet +AC_CHECK_HEADER(SDL_net.h,have_sdl_net_h=yes,) +AC_CHECK_LIB(SDL2_net, SDLNet_Init, have_sdl2_net_lib=yes, , ) +AC_CHECK_LIB(SDL_net, SDLNet_Init, have_sdl_net_lib=yes, , ) + +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ +#include +#ifndef SDL_VIDEO_DRIVER_X11 +#error SDL_VIDEO_DRIVER_X11 +#endif +void test(){} +])], , enable_x11=no) +if test x$enable_x11 != xno; then + dnl LIBRARY TEST: X11 Xlib support + AC_CHECK_LIB(X11, main, have_x11_lib=yes, have_x11_lib=no, ) + AC_CHECK_LIB(Xrandr, XRRGetCrtcInfo, have_xrandr_lib=yes, have_xrandr_lib=no, ) + AC_CHECK_HEADER(X11/XKBlib.h, have_x11_h=yes, have_x11_h=no, ) + + dnl Compile test will fail for XKBrules.h if we do not also include XKBlib.h + dnl Hope your compiler supports the GCC style -include option! + if test x$have_x11_h = xyes; then + save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -include X11/XKBlib.h" + + AC_CHECK_HEADER(X11/extensions/XKBrules.h, have_x11_ext_xkbrules_h=yes, have_x11_ext_xkbrules_h=no, ) + AC_CHECK_HEADER(X11/extensions/XKBfile.h, have_xkbfile_h=yes, have_xkbfile_h=no, ) + + CPPFLAGS=$save_CPPFLAGS + fi +fi + +dnl LIBRARY TEST: Fluidsynth support +AC_CHECK_HEADER(fluidsynth.h,have_fluidsynth_h=yes,) +AC_CHECK_LIB(fluidsynth, fluid_synth_sysex, have_fluidsynth_lib=yes,,) + +dnl LIBRARY TEST: FreeType2 +AH_TEMPLATE(C_FREETYPE,[Define to 1 to enable freetype support]) +AC_ARG_ENABLE(freetype,AC_HELP_STRING([--disable-freetype],[Disable freetype support]),enable_freetype=$enableval,enable_freetype=yes) +AM_CONDITIONAL(C_FREETYPE, test "x$enable_freetype" = "xyes") +if test x$enable_freetype = xyes; then + AC_MSG_CHECKING(for freetype) + if test x$INTERNAL_FREETYPE = x1; then + # CFLAGS and LDFLAGS were already updated by build-macos + AC_DEFINE(C_FREETYPE,1) + AC_MSG_RESULT(yes) + else + pkg-config --exists freetype2; RES=$? + if test x$RES = x0; then + CFLAGS="$CFLAGS "`pkg-config freetype2 --cflags` + CPPFLAGS="$CPPFLAGS "`pkg-config freetype2 --cflags` + LIBS="$LIBS "`pkg-config freetype2 --libs` + AC_DEFINE(C_FREETYPE,1) + AC_MSG_RESULT(yes) + else + enable_freetype=no + AC_MSG_RESULT(no) + fi + fi +fi + +dnl LIBRARY TEST: FFMPEG support +pkg-config --exists libavcodec; RES=$? +if test x$RES = x0; then + have_avcodec_h=yes + have_ffmpeg=yes +else + have_avcodec_h=no + have_ffmpeg=no +fi + +dnl LIBRARY TEST: OpenGL support +AC_CHECK_LIB(GL, main, have_gl_lib=yes, have_gl_lib=no , ) +AC_CHECK_LIB(opengl32, main, have_opengl32_lib=yes,have_opengl32_lib=no , ) +AC_CHECK_HEADER(GL/gl.h, have_gl_h=yes , have_gl_h=no , ) + +dnl LIBRARY TEST: Direct3D 9 header support +AC_CHECK_HEADER(d3d9.h, have_d3d9_h=yes , have_d3d9_h=no , ) +AC_CHECK_HEADER(d3dx9math.h, have_d3dx9math_h=yes , have_d3dx9math_h=no , ) + +dnl ================== SDL net special test for OS/2 +if test x$host = xi386-pc-os2-emx ; then + LIBS_BACKUP=$LIBS; + LIBS="$LIBS -lSDL_Net"; + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ + SDLNet_Init (); + ]])], [AC_MSG_RESULT(yes); have_sdl_net_lib=yes], AC_MSG_RESULT(no)) + LIBS=$LIBS_BACKUP +fi + +dnl FEATURE: PRINTER (requires FreeType2) +AH_TEMPLATE(C_PRINTER,[Define to 1 to enable printer emulation]) +AC_ARG_ENABLE(printer,AC_HELP_STRING([--disable-printer],[disable printer emulation]),enable_printer=$enableval,enable_printer=yes) +AM_CONDITIONAL(C_PRINTER, test "x$enable_printer" = "xyes") +if test x$enable_freetype = xyes; then + if test x$enable_printer = xyes; then + AC_DEFINE(C_PRINTER,1) + fi +fi + +dnl FEATURE: xBRZ +AH_TEMPLATE(C_XBRZ,[Define to 1 to enable XBRZ scaler]) +AC_ARG_ENABLE(xbrz,AC_HELP_STRING([--enable-xbrz],[compile with xBRZ scaler (default yes)]),enable_xbrz=$enableval,enable_xbrz=yes) +AM_CONDITIONAL(C_XBRZ, test "x$enable_xbrz" = "xyes") +if test x$enable_emscripten != xyes; then + if test x$enable_xbrz = xyes; then + AC_DEFINE(C_XBRZ,1) + fi +fi + +dnl FEATURE: xBRZ +AH_TEMPLATE(C_SCALER_FULL_LINE,[Define to 1 to alter the simpler render scalers to operate only on the full scanline instead of detecting differences. This is a performance adjustment for slow or embedded systems]) +AC_ARG_ENABLE(scaler-full-line,AC_HELP_STRING([--enable-scaler-full-line],[scaler render full line instead of detecting changes, for slower systems]),enable_scaler_full_line=$enableval,enable_scaler_full_line=no) +AM_CONDITIONAL(C_SCALER_FULL_LINE, test "x$enable_scaler_full_line" = "xyes") +if test x$enable_scaler_full_line = xyes; then + AC_DEFINE(C_SCALER_FULL_LINE,1) +fi + +dnl FEATURE: MIDI through ALSA +AC_ARG_ENABLE(alsa-midi, +AC_HELP_STRING([--enable-alsa-midi],[compile with alsa midi support (default yes)]), +[ case "${enableval}" in + yes) alsa_midi=true;; + no) alsa_midi=false;; +esac], +[alsa_midi=true]) +if test x$alsa_midi = xtrue ; then + CXXFLAGS="$CXXFLAGS $ALSA_CFLAGS" +fi + +dnl FEATURE: MT32 (MUNT) emulation +AH_TEMPLATE(C_MT32,[Define to 1 to enable MT32 emulation]) +AC_ARG_ENABLE(mt32,AC_HELP_STRING([--disable-mt32],[Disable MT32 emulation]),,enable_mt32=yes) +AC_MSG_CHECKING(whether MT32 emulation will be enabled) + +# test +if test x$enable_mt32 = xyes ; then + case "$host_cpu" in + x86_64 | amd64) + AC_MSG_RESULT(yes) + AC_DEFINE(C_MT32,1) + ;; + i?86) + AC_MSG_RESULT(yes) + AC_DEFINE(C_MT32,1) + ;; + arm) + AC_MSG_RESULT(yes) + AC_DEFINE(C_MT32,1) + ;; + aarch64) + AC_MSG_RESULT(yes) + AC_DEFINE(C_MT32,1) + ;; + *) + enable_mt32=no + AC_MSG_RESULT(no) + ;; + esac +else + enable_mt32=no + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(C_MT32, test "x$enable_mt32" = "xyes") + +dnl On some Linux platforms, std::atomic needs a helper library +case "$host" in + *-*-linux*) + case "$host_cpu" in + x86_64 | amd64) + ;; + i?86) + ;; + *) + AC_MSG_CHECKING(whether -latomic is needed) + AC_LINK_IFELSE([AC_LANG_SOURCE([ + #include + #include + std::atomic v; + int main() { + return v; + } + ])],STD_ATOMIC_NEED_LIBATOMIC=no,STD_ATOMIC_NEED_LIBATOMIC=yes) + AC_MSG_RESULT($STD_ATOMIC_NEED_LIBATOMIC) + if test "x$STD_ATOMIC_NEED_LIBATOMIC" = xyes; then + LIBS="$LIBS -latomic" + fi + ;; + esac + ;; +esac + +dnl NASM (Netwide Assembler) +AC_PATH_PROG([NASM], [nasm]) +if test -z "$ac_cv_path_NASM"; then + AC_MSG_WARN([NASM (netwide assembler) not found, you will not be able to compile the external x86 .asm files if they are modified]) +fi + +dnl FEATURE: DEBUG and HEAVY DEBUG options (debugger) +AH_TEMPLATE(C_DEBUG,[Define to 1 to enable internal debugger, requires libcurses]) +AH_TEMPLATE(C_HEAVY_DEBUG,[Define to 1 to enable heavy debugging, also have to enable C_DEBUG]) +AC_ARG_ENABLE(debug,AC_HELP_STRING([--enable-debug],[Enable debug mode]),[ + if test x$enable_debug = xno; then + AC_MSG_RESULT([Debugger not enabled]) + elif test x$curses_lib != x -a x$have_curses_h = xyes; then + LIBS="$LIBS -l$curses_lib" + AC_DEFINE(C_DEBUG,1) + if test x$enable_debug = xheavy ; then + AC_DEFINE(C_HEAVY_DEBUG,1) + fi + else + AC_MSG_ERROR([Can't find curses, which is required for debug mode]) + fi +],) + +dnl automake 1.14 and upwards rewrite the host to have always 64 bit unless i386 as host is passed +dnl this can make building a 32 bit executable a bit tricky, as dosbox relies on the host to select the +dnl dynamic/dynrec core +AC_MSG_CHECKING([whether Apple user wants to override the build process to produce a 32 bit binary]) +case "$host" in + *-*-darwin*) + if test x$c_targetcpu = xx86_64 -a x$c_sizep = x4 ; then + AC_MSG_RESULT(yes) + AC_DEFINE(C_TARGETCPU,X86) + c_targetcpu="x86" + else + AC_MSG_RESULT(no) + fi + ;; + *) + AC_MSG_RESULT([no, not on Apple]) + ;; +esac + +dnl FEATURE: Whether to enable dynamic core +AC_ARG_ENABLE(dynamic-core,AC_HELP_STRING([--disable-dynamic-core],[Disable all dynamic cores]),,enable_dynamic_core=yes) + +dnl FEATURE: Whether to enable x86 dynamic core +AH_TEMPLATE(C_DYNAMIC_X86,[Define to 1 to use x86/x64 dynamic cpu core]) +AC_ARG_ENABLE(dynamic-x86,AC_HELP_STRING([--disable-dynamic-x86],[Disable x86/x64 dynamic cpu core]),,enable_dynamic_x86=yes) +AC_MSG_CHECKING(whether x86 dynamic cpu core will be enabled) +if test x$enable_dynamic_x86 = xno -o x$enable_dynamic_core = xno; then + AC_MSG_RESULT(no) +elif test x$c_targetcpu = xx86 -o x$c_targetcpu = xx86_64; then + AC_DEFINE(C_DYNAMIC_X86,1) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + +dnl FEATURE: Whether to enable recompiling dynamic core +AH_TEMPLATE(C_DYNREC,[Define to 1 to use recompiling cpu core]) +AC_ARG_ENABLE(dynrec,AC_HELP_STRING([--disable-dynrec],[Disable recompiling cpu core]),,enable_dynrec=yes) +AC_MSG_CHECKING(whether recompiling cpu core will be enabled) +if test x$enable_dynrec = xno -o x$enable_dynamic_core = xno; then + AC_MSG_RESULT(no) +# test for MIPS32 is missing from this Dynamic Recompiler whitelist +elif test x$c_targetcpu = xx86 -o x$c_targetcpu = xx86_64 -o x$c_targetcpu = xarm; then + AC_DEFINE(C_DYNREC,1) + AC_MSG_RESULT(yes) + + case "$host" in + *-*-openbsd*) + AC_MSG_WARN([DOSBox-X will be linked with "wxneeded" to support dynrec core on OpenBSD]) + LDFLAGS="-Wl,-z,wxneeded $LDFLAGS" + ;; + esac +else + AC_MSG_RESULT(no) +fi + +dnl FEATURE: Whether to emulate the floating point unit +AH_TEMPLATE(C_FPU,[Define to 1 to enable floating point emulation]) +AC_ARG_ENABLE(fpu,AC_HELP_STRING([--disable-fpu],[Disable fpu support]),,enable_fpu=yes) +AC_MSG_CHECKING(whether fpu emulation will be enabled) +if test x$enable_fpu = xyes ; then + AC_MSG_RESULT(yes) + AC_DEFINE(C_FPU,1) +else + AC_MSG_RESULT(no) +fi + +AH_TEMPLATE(C_FPU_X86,[Define to 1 to use a x86/x64 assembly fpu core]) +AC_ARG_ENABLE(fpu-x86,AC_HELP_STRING([--disable-fpu-x86],[Disable x86 assembly fpu core]),,enable_fpu_x86=yes) +AC_ARG_ENABLE(fpu-x64,AC_HELP_STRING([--disable-fpu-x64],[Disable x64 assembly fpu core]),,enable_fpu_x64=yes) +AC_MSG_CHECKING(whether the x86/x64 assembly fpu core will be enabled) +if test x$enable_fpu_x86 = xno -o x$enable_fpu_x64 = xno; then + AC_MSG_RESULT(no) +else + if test x$enable_fpu = xyes; then + if test x$c_targetcpu = xx86 -o x$c_targetcpu = xx86_64; then + AC_DEFINE(C_FPU_X86,1) + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + else + AC_MSG_RESULT(no) + fi +fi + +dnl FEATURE: Whether to enable unaligned memory access +AH_TEMPLATE(C_UNALIGNED_MEMORY,[Define to 1 to use a unaligned memory access]) +AC_ARG_ENABLE(unaligned_memory,AC_HELP_STRING([--disable-unaligned-memory],[Disable unaligned memory access]),,enable_unaligned_memory=yes) +AC_MSG_CHECKING(whether to enable unaligned memory access) +if test x$enable_unaligned_memory = xyes -a x$c_unalignedmemory = xyes; then + AC_DEFINE(C_UNALIGNED_MEMORY,1) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + +dnl FEATURE: Whether to support SDL net, and emulate modem and IPX connections +AH_TEMPLATE(C_SDL_NET,[Indicate whether SDL_net is present]) +AH_TEMPLATE(C_MODEM,[Define to 1 to enable internal modem support, requires SDL_net]) +AH_TEMPLATE(C_IPX,[Define to 1 to enable IPX over Internet networking, requires SDL_net]) + +case "$host" in + *-*-cygwin* | *-*-mingw32*) + if test x$have_sdl_net_h = xyes; then + have_sdl_net_lib=yes + fi + ;; +esac +dnl enable SDL2 net if SDL2 +if test -n "$SDL2_LIBS"; then + if test x$disable_sdl_net = xyes ; then + AC_MSG_WARN([SDL_net is disabled in parameters]) + elif test x$have_sdl2_net_lib = xyes -a x$have_sdl_net_h = xyes ; then + LIBS="$LIBS -lSDL2_net" + AC_DEFINE(C_SDL_NET,1) + AC_DEFINE(C_MODEM,1) + AC_DEFINE(C_IPX,1) + have_sdl_net=yes + elif test x$have_sdl_net_lib = xyes -a x$have_sdl_net_h = xyes ; then + LIBS="$LIBS -lSDL_net" + AC_DEFINE(C_SDL_NET,1) + AC_DEFINE(C_MODEM,1) + AC_DEFINE(C_IPX,1) + have_sdl_net=yes + else + AC_MSG_WARN([Can't find SDL_net, internal modem and ipx disabled]) + fi +else + if test x$disable_sdl_net = xyes ; then + AC_MSG_WARN([SDL_net is disabled in parameters]) + elif test x$have_sdl_net_lib = xyes -a x$have_sdl_net_h = xyes ; then + LIBS="$LIBS -lSDL_net" + AC_DEFINE(C_SDL_NET,1) + AC_DEFINE(C_MODEM,1) + AC_DEFINE(C_IPX,1) + have_sdl_net=yes + else + AC_MSG_WARN([Can't find SDL_net, internal modem and ipx disabled]) + fi +fi + +dnl FEATURE: Whether to support libz, and enable snapshots +AH_TEMPLATE(C_LIBZ,[Define to 1 if you have libz]) +if test x$have_zlib_lib = xyes -a x$have_zlib_h = xyes ; then + LIBS="$LIBS -lz" + AC_DEFINE(C_LIBZ,1) +fi + +dnl FEATURE: Whether to support libpng, and enable snapshots +AH_TEMPLATE(C_LIBPNG,[Define to 1 if you have libpng]) +AH_TEMPLATE(C_SSHOT,[Define to 1 to enable screenshots, requires libpng]) +AC_ARG_ENABLE(screenshots,AC_HELP_STRING([--disable-screenshots],[Disable screenshots and movie recording]),,enable_screenshots=yes) +AC_MSG_CHECKING([whether screenshots will be enabled]) +if test x$enable_screenshots = xyes; then + if test x$have_png_lib = xyes -a x$have_png_h = xyes ; then + LIBS="$LIBS -lpng -lz" + AC_DEFINE(C_LIBPNG,1) + AC_DEFINE(C_SSHOT,1) + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no, can't find libpng.]) + fi +else + AC_MSG_RESULT([no]) +fi + +dnl FEATURE: Whether to use libpcap, and enable ethernet pass-through +AH_TEMPLATE(C_PCAP,[Define to 1 to enable ethernet pass-through, requires libpcap]) +case "$host" in + *-*-cygwin* | *-*-mingw32*) + CFLAGS="$CFLAGS -I$pwd/vs/pcap" + CXXFLAGS="$CXXFLAGS -I$pwd/vs/pcap" + AC_DEFINE(C_PCAP,1) + ;; + *) + if test x$have_pcap_lib = xyes -a x$have_pcap_h = xyes ; then + LIBS="$LIBS -lpcap"; + AC_DEFINE(C_PCAP,1) + else + AC_MSG_WARN([Can't find libpcap, ethernet pass-through disabled]) + fi + ;; +esac + +dnl FEATURE: Whether to use libslirp, and enable userspace TCP/IP emulation +AH_TEMPLATE(C_SLIRP, [Define to 1 to enable userspace TCP/IP emulation, requires libslirp]) +AC_ARG_ENABLE(libslirp,AC_HELP_STRING([--disable-libslirp],[Disable libslirp support]),enable_libslirp=$enableval,enable_libslirp=yes) +if test x$enable_libslirp = xyes ; then + case "$host" in + *-*-cygwin* | *-*-mingw32*) + if test x$have_slirp_h = xyes; then + have_slirp_lib=yes + fi + ;; + esac + if test x$have_slirp_lib = xyes -a x$have_slirp_h = xyes ; then + have_slirp=yes + AC_DEFINE(C_SLIRP,1) + LIBS="$LIBS "`pkg-config slirp --libs` + CFLAGS="$CFLAGS "`pkg-config slirp --cflags` + CPPFLAGS="$CPPFLAGS "`pkg-config slirp --cflags` + case "$host" in + *-*-cygwin* | *-*-mingw32*) + LIBS="$LIBS -lintl" + ;; + esac + else + have_slirp=no + AC_MSG_WARN([Can't find libslirp, userspace TCP/IP emulation disabled]) + fi +fi + +if test x$enable_x11 != xno; then + dnl FEATURE: Whether to use X11 XKBlib + AH_TEMPLATE(C_X11_XKB,[define to 1 if you have XKBlib.h and X11 lib]) + AC_MSG_CHECKING(for XKBlib support) + if test x$have_x11_lib = xyes -a x$have_x11_h = xyes ; then + LIBS="$LIBS -lX11" + AC_DEFINE(C_X11_XKB,1) + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + + dnl FEATURE: Whether to use X11 XRandR + AH_TEMPLATE(C_X11_XRANDR,[define to 1 if you have XRandr.h and X11 lib]) + AC_MSG_CHECKING(for XRandR support) + if test x$have_xrandr_lib = xyes -a x$have_x11_h = xyes ; then + LIBS="$LIBS -lXrandr" + AC_DEFINE(C_X11_XRANDR,1) + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + + dnl Having XKBlib doesn't mean XKBrules.h is around + if test x$have_x11_ext_xkbrules_h = xyes ; then + AH_TEMPLATE(C_X11_EXT_XKBRULES,[define to 1 if XKBrules.h is present]) + AC_DEFINE(C_X11_EXT_XKBRULES,1) + fi + if test x$have_xkbfile_h = xyes ; then + AH_TEMPLATE(C_X11_XKBFILE,[define to 1 if XKBfile.h is present]) + AC_DEFINE(C_X11_XKBFILE,1) + LIBS="$LIBS -lxkbfile" + fi + + if test x$have_x11_h = xyes ; then + AH_TEMPLATE(C_X11,[define to 1 to enable X11 support]) + AC_DEFINE(C_X11,1) + fi +fi + +dnl FEATURE: Whether to use Fluidsynth +AH_TEMPLATE(C_FLUIDSYNTH,[Define to 1 to enable libfluidsynth MIDI synthesis]) +AC_ARG_ENABLE(libfluidsynth,AC_HELP_STRING([--disable-libfluidsynth],[Disable libfluidsynth support]),enable_libfluidsynth=$enableval,enable_libfluidsynth=yes) +if test x$enable_libfluidsynth = xyes; then + case "$host" in + *-*-linux*) + if test x$have_fluidsynth_h = xyes; then + have_fluidsynth_lib=yes + fi + ;; + esac + if test x$have_fluidsynth_lib = xyes -a x$have_fluidsynth_h = xyes ; then + LIBS="$LIBS -lfluidsynth" + AC_DEFINE(C_FLUIDSYNTH,1) + else + AC_MSG_WARN([libfluidsynth MIDI synthesis not available]) + fi +fi + +dnl FEATURE: FFMPEG output support +AH_TEMPLATE(C_AVCODEC,[Define to 1 to use FFMPEG libavcodec for video capture]) +AC_ARG_ENABLE(avcodec,AC_HELP_STRING([--enable-avcodec],[Enable FFMPEG avcodec support]),enable_ffmpeg=$enableval,enable_ffmpeg=yes) +if test x$enable_ffmpeg = xyes; then + if test x$have_ffmpeg = xyes; then + if test x$have_avcodec_h = xyes; then + PKGS="libavcodec libavformat libavutil libswscale libswresample" + CFLAGS="$CFLAGS "`pkg-config $PKGS --cflags` + CPPFLAGS="$CPPFLAGS "`pkg-config $PKGS --cflags` + LIBS=`pkg-config $PKGS --libs`" $LIBS" + AC_MSG_RESULT(yes) + AC_DEFINE(C_AVCODEC,1) + fi + fi +fi + +dnl FEATURE: Whether to use Direct3D 9 output +AH_TEMPLATE(HAVE_D3D9_H,[Define to 1 to use Direct3D 9 display output support]) +AC_ARG_ENABLE(d3d9,AC_HELP_STRING([--enable-d3d9],[Enable Direct3D 9 support]),enable_d3d9=$enableval,enable_d3d9=no) +AC_MSG_CHECKING(whether Direct3D 9 display output will be enabled) + +dnl FEATURE: Direct3D9 shaders +AH_TEMPLATE(C_D3DSHADERS,[Define to 1 to use Direct3D shaders]) +AC_ARG_ENABLE(d3d-shaders,AC_HELP_STRING([--enable-d3d-shaders],[Enable Direct3D shaders]),enable_d3d_shaders=$enableval,enable_d3d_shaders=no) + +if test x$enable_d3d9 = xyes; then + case "$host" in + *-*-cygwin* | *-*-mingw32*) + if test x$have_d3d9_h = xyes -a x$have_d3dx9math_h = xyes ; then + do_d3d=1 + AC_MSG_RESULT(yes) + AH_TEMPLATE(C_DIRECT3D,[Define to 1 to enable Direct3D 9 display output support]) + AC_DEFINE(HAVE_D3D9_H,1) + AC_DEFINE(C_DIRECT3D,1) + if test x$enable_d3d_shaders = xyes; then + AC_DEFINE(C_D3DSHADERS,1) + fi + else + AC_MSG_RESULT(no) + fi + ;; + *) + AC_MSG_RESULT(no) + ;; + esac +else + AC_MSG_RESULT(no) +fi + +AM_CONDITIONAL(C_DIRECT3D, test x"$do_d3d" = x"1") + +AH_TEMPLATE(C_ICONV,[Define to 1 to use iconv]) +if test x$have_iconv_h = xyes; then + AC_DEFINE(C_ICONV,1) + AC_MSG_CHECKING([whether we must link against -liconv]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + #include + iconv_t wrap_open(const char *tocode, const char *fromcode) { + return iconv_open(tocode, fromcode); + }]])], + AC_MSG_RESULT(no), [AC_MSG_RESULT(yes);LIBS="$LIBS -liconv"]) +fi + +dnl placeholder +AH_TEMPLATE(C_ICONV_WIN32,[Define to 1 to use Win32 functions in iconv backend]) + +dnl If networking is used, add networking libraries last on Windows +dnl so SDL_net, fluidsynth and libslirp successfully link to them +if test x$enable_emscripten != xyes; then +case "$host" in + *-*-cygwin* | *-*-mingw32*) + if test x$have_slirp = xyes; then + LIBS="$LIBS -luuid -lole32" + fi + LIBS="$LIBS -lwsock32 -lws2_32 -liphlpapi -lshlwapi" + if test x$enable_freetype = xyes; then + LIBS="$LIBS -lfreetype -lwinspool" + fi + ;; +esac +fi + +dnl LIBRARY USE: opencow +case "$host" in + *-*-cygwin* | *-*-mingw32*) + if test x$enable_opencow = xyes; then + LIBS="-lopencow $LIBS -lstdc++ -lopencow" #need to put at the first, also better at the last too. + LDFLAGS="$LDFLAGS -Wl,--allow-multiple-definition " + if test -n "$SDL_LIBS"; then + LIBS="${LIBS//-luser32/-lopencow -luser32}" + #SDL_LIBS="${SDL_LIBS//-luser32/\-lopencow -luser32}" + fi + fi + ;; +esac + +dnl BUILD: whether to enable universal binary support +if test x"$macosx" = x"1" && test x"$host_cpu" = x"arm"; then + AC_ARG_ENABLE(universal,AC_HELP_STRING([--enable-universal],[Enable macOS universal binary support]), + [enable_universal=$enableval], + [enable_universal=no]) +else + enable_universal=no +fi + +AM_CONDITIONAL(MACOS_UNIVERSAL, [ test x$enable_universal = xyes ]) + +AC_CONFIG_FILES([ +Makefile +src/Makefile +src/cpu/Makefile +src/cpu/core_full/Makefile +src/cpu/core_normal/Makefile +src/debug/Makefile +src/dos/Makefile +src/fpu/Makefile +src/gamelink/Makefile +src/gui/Makefile +src/hardware/Makefile +src/hardware/mame/Makefile +src/hardware/serialport/Makefile +src/hardware/reSID/Makefile +src/hardware/parport/Makefile +src/aviwriter/Makefile +src/ints/Makefile +src/libs/Makefile +src/libs/zmbv/Makefile +src/libs/gui_tk/Makefile +src/libs/passthroughio/Makefile +src/libs/mt32/Makefile +src/libs/xBRZ/Makefile +src/libs/fluidsynth/Makefile +src/libs/decoders/internal/Makefile +src/output/Makefile +src/output/direct3d/Makefile +src/builtin/Makefile +src/misc/Makefile +src/shell/Makefile +src/platform/Makefile +include/Makefile +contrib/macos/dosbox-x.plist +contrib/linux/dosbox-x.spec +contrib/linux/com.dosbox_x.DOSBox-X.metainfo.xml +make-rpm.sh +]) +AC_OUTPUT + +# HACK: it's a script... +chmod +x make-rpm.sh