# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_INIT(eAthena) AC_CONFIG_HEADER([src/common/config.h]) AC_REVISION($Revision$) AC_PREREQ([2.59]) AC_CONFIG_SRCDIR([src/common/cbasetypes.h]) AC_CONFIG_FILES([Makefile src/common/Makefile]) AC_CONFIG_FILES([3rdparty/mt19937ar/Makefile]) AC_CONFIG_FILES([src/char/Makefile src/login/Makefile]) AC_CONFIG_FILES([src/char_sql/Makefile src/txt-converter/Makefile]) AC_CONFIG_FILES([src/map/Makefile src/plugins/Makefile src/tool/Makefile]) # # Memory managers # AC_ARG_ENABLE( [manager], AC_HELP_STRING( [--enable-manager=ARG], [memory managers: no, builtin, memwatch, dmalloc, gcollect, bcheck (defaults to builtin)] ), [ enable_manager="$enableval" case $enableval in "no");; "builtin");; "memwatch");; "dmalloc");; "gcollect");; "bcheck");; *) AC_MSG_ERROR([[unknown memory manager '$enableval'... stopping]]);; esac ], [enable_manager="builtin"] ) # # packetver # AC_ARG_ENABLE( [packetver], AC_HELP_STRING( [--enable-packetver=ARG], [Sets the PACKETVER define of the map-server. (see src/map/clif.h)] ), [enable_packetver="$enableval"], [enable_packetver=""] ) # # debug # AC_ARG_ENABLE( [debug], AC_HELP_STRING( [--enable-debug@<:@=ARG@:>@], [ Compiles extra debug code. (disabled by default) (available options: yes, no, gdb) ] ), [ enable_debug="$enableval" case $enableval in "no");; "yes");; "gdb");; *) AC_MSG_ERROR([[invalid argument --enable-debug=$enableval... stopping]]);; esac ], [enable_debug="no"] ) # # RDTSC as Tick Source # AC_ARG_ENABLE( [rdtsc], AC_HELP_STRING( [--enable-rdtsc], [ Uses rdtsc as timing source (disabled by default) Enable it when you've timing issues. (For example: in conjunction with XEN or Other Virtualization mechanisms) Note: Please ensure that you've disabled dynamic CPU-Frequencys, such as power saving options. (On the most modern Dedicated Servers cpufreq is preconfigured, see your distribution's manual how to disable it) ] ), [ enable_rdtsc=1 ], [enable_rdtsc=0] ) # # Profiler # AC_ARG_ENABLE( [profiler], AC_HELP_STRING( [--enable-profiler=ARG], [Profilers: no, gprof (disabled by default)] ), [ enable_profiler="$enableval" case $enableval in "no");; "gprof");; *) AC_MSG_ERROR([[invalid argument --enable-profiler=$enableval... stopping]]);; esac ], [enable_profiler="no"] ) # # 64bit # AC_ARG_ENABLE( [64bit], AC_HELP_STRING( [--enable-64bit], [ Don't force 32 bit. (disabled by default) 64bit support is still being tested, not recommended for production servers. ] ), [ enable_64bit="$enableval" case $enableval in "no");; "yes");; *) AC_MSG_ERROR([[invalid argument --enable-64bit=$enableval... stopping]]);; esac ], [enable_64bit="no"] ) # # Enable/disable MySql and optionally specify the path to mysql_config (optional library) # AC_ARG_WITH( [mysql], AC_HELP_STRING( [--with-mysql@<:@=ARG@:>@], [use MySQL client library, optionally specify the path to the mysql_config executable (by default mysql is used if found)] ), [ if test "$withval" = "no" ; then want_mysql="no" else want_mysql="yes" require_mysql="yes" if test "$withval" != "yes" ; then if test ! -x "$withval" ; then AC_MSG_ERROR([$withval is not an executable file]) fi MYSQL_CONFIG_HOME="$withval" fi fi ], [want_mysql="yes" require_mysql="no"] ) # # Manual MYSQL_CFLAGS (optional) # AC_ARG_WITH( [MYSQL_CFLAGS], AC_HELP_STRING( [--with-MYSQL_CFLAGS=ARG], [specify MYSQL_CFLAGS manually (instead of using "mysql_config --include")] ), [ manual_MYSQL_CFLAGS="yes" MYSQL_CFLAGS="$withval" ], [manual_MYSQL_CFLAGS="no"] ) # # Manual MYSQL_LIBS (optional) # AC_ARG_WITH( [MYSQL_LIBS], AC_HELP_STRING( [--with-MYSQL_LIBS=ARG], [specify MYSQL_LIBS manually (instead of using "mysql_config --libs")] ), [ manual_MYSQL_LIBS="yes" MYSQL_LIBS="$withval" ], [manual_MYSQL_LIBS="no"] ) # # Enable/disable PCRE and optionally specify the path (optional library) # AC_ARG_WITH( [pcre], AC_HELP_STRING( [--with-pcre@<:@=ARG@:>@], [use PCRE library, optionally specify the full path of pcre installation directory (by default pcre is used if found)] ), [ if test "$withval" = "no" ; then want_pcre="no" else want_pcre="yes" require_pcre="yes" if test "$withval" != "yes" ; then if test ! -d "$withval" ; then AC_MSG_ERROR([$withval is not a directoy]) fi PCRE_HOME="$withval" fi fi ], [want_pcre="yes" require_pcre="no"] ) # # Specify the path of the zlib library (required library) # AC_ARG_WITH( [zlib], AC_HELP_STRING( [--with-zlib=DIR], [root directory path of zlib installation (defaults to /usr/local or /usr if not found in /usr/local). Assumes that the header files are in DIR/include and the library files are in DIR/lib] ), [ test -n "$withval" && ZLIB_HOME="$withval" ], [ ZLIB_HOME=/usr/local test ! -f "${ZLIB_HOME}/include/zlib.h" && ZLIB_HOME=/usr ] ) ############################################################################### # Check for programs and types. # AC_PROG_MAKE_SET AC_PROG_CC AC_PROG_CPP AC_LANG([C]) CFLAGS="$CFLAGS -pipe -ffast-math -Wall -Wno-sign-compare" CPPFLAGS="$CPPFLAGS -I../common" # flags used for compiling shared objects SOFLAGS="" AC_SUBST([SOFLAGS]) AC_C_BIGENDIAN( [AC_MSG_ERROR([[bigendian is not supported... stopping]])], , [AC_MSG_WARN([[unable to determine endianess, only little endian is supported]])] ) if test "$enable_64bit" = "no" ; then AC_MSG_CHECKING([whether pointers can be stored in ints (old code)]) pointers_fit_in_ints="no" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[static int test_array[((long int)sizeof(int)) == ((long int)sizeof(void*)) ? 1 : -1];]])], [pointers_fit_in_ints="yes"], [] ) if test "$pointers_fit_in_ints" = "no" ; then CFLAGS="$CFLAGS -m32" LDFLAGS="$LDFLAGS -m32" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[static int test_array[((long int)sizeof(int)) == ((long int)sizeof(void *)) ? 1 : -1];]])], [pointers_fit_in_ints="yes (with -m32)"], [] ) fi AC_MSG_RESULT($pointers_fit_in_ints) if test "$pointers_fit_in_ints" = "no" ; then AC_MSG_ERROR([pointers cannot be stored in ints, required for old code... stopping]) fi fi AC_MSG_CHECKING([whether $CC supports -Wno-unused-parameter]) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wno-unused-parameter" AC_COMPILE_IFELSE( [int foo;], [AC_MSG_RESULT([yes])], [ AC_MSG_RESULT([no]) CFLAGS="$OLD_CFLAGS" ] ) AC_MSG_CHECKING([whether $CC supports -Wno-pointer-sign]) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wno-pointer-sign" AC_COMPILE_IFELSE( [int foo;], [ AC_MSG_RESULT([yes]) AC_MSG_CHECKING([whether $CC can actually use -Wno-pointer-sign]) # This option causes warnings in C++ mode # Note: -Werror must be before -Wno-pointer-sign, otherwise it does not do anything CFLAGS="$OLD_CFLAGS -Werror -Wno-pointer-sign" AC_COMPILE_IFELSE( [int foo;], [ AC_MSG_RESULT([yes]) CFLAGS="$OLD_CFLAGS -Wno-pointer-sign" ], [ AC_MSG_RESULT([no]) CFLAGS="$OLD_CFLAGS" ] ) ], [ AC_MSG_RESULT([no]) CFLAGS="$OLD_CFLAGS" ] ) AC_MSG_CHECKING([whether $CC supports -Wno-switch]) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wno-switch" AC_COMPILE_IFELSE( [int foo;], [AC_MSG_RESULT([yes])], [ AC_MSG_RESULT([no]) CFLAGS="$OLD_CFLAGS" ] ) AC_MSG_CHECKING([whether $CC supports -fPIC]) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fPIC" AC_COMPILE_IFELSE( [int foo;], [ AC_MSG_RESULT([yes]) compiler_supports_pic="yes" ], [ AC_MSG_RESULT([no]) compiler_supports_pic="no" ] ) CFLAGS="$OLD_CFLAGS" # # option for shared objects # AC_MSG_CHECKING([how to make shared objects]) OLD_CFLAGS="$CFLAGS" compiler_shared_objects="" if test "$compiler_supports_pic" = "yes" ; then my_shared_test_flags="$CFLAGS -fPIC" fi # default CFLAGS="$my_shared_test_flags -shared" AC_LINK_IFELSE( [[ int bar = 0; int foo(void) { return bar; } ]], [ compiler_shared_objects="-shared" ] ) # BeOS specific CFLAGS="$my_shared_test_flags -nostart" AC_LINK_IFELSE( [[ int bar = 0; int foo(void) { return bar; } ]], [ compiler_shared_objects="-nostart" ] ) my_shared_test_flags="" CFLAGS="$OLD_CFLAGS" if test "$compiler_supports_shared_objects" = "no" ; then AC_MSG_RESULT([not supported]) AC_MSG_NOTICE([compiler is unable to generate shared objects, disabled plugins (optional)]) WITH_PLUGINS="no" else AC_MSG_RESULT([$compiler_shared_objects]) SOFLAGS="$SOFLAGS $compiler_shared_objects" # # shared objects need position independent code; some platforms emit # it always, others need -fPIC # AC_MSG_CHECKING([whether $CC needs -fPIC for shared objects]) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $SOFLAGS" WITH_PLUGINS="yes" AC_LINK_IFELSE( [[ int bar = 0; int foo(void) { return bar; } ]], [ AC_MSG_RESULT([no]) CFLAGS="$OLD_CFLAGS" ], [ if test "$compiler_supports_pic" = "yes" ; then # Verify if -shared really fails due to lack of -fPIC or something else CFLAGS="$CFLAGS -fPIC" AC_LINK_IFELSE( [[ int bar = 0; int foo(void) { return bar; } ]], [ AC_MSG_RESULT([yes]) CFLAGS="$OLD_CFLAGS -fPIC" ], [ AC_MSG_RESULT([no, but fails for another reason]) AC_MSG_ERROR([compiler is unable to compile shared objects for an unhandled reason, please report this with attached config.log... stopping]) ] ) else # Disable compilation of plugins (optional), so 'make all' does not fail AC_MSG_RESULT([yes, but unsupported]) AC_MSG_NOTICE([compiler is unable to generate position independent code, disabled plugins (optional)]) WITH_PLUGINS="no" fi ] ) fi AC_SUBST([WITH_PLUGINS]) # # -O2 implies -fstrict-aliasing, but the code is not safe for that # AC_MSG_CHECKING([whether $CC supports -fno-strict-aliasing]) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-strict-aliasing" AC_COMPILE_IFELSE( [int foo;], [AC_MSG_RESULT([yes])], [ AC_MSG_RESULT([no]) CFLAGS="$OLD_CFLAGS" ] ) # # check how to inline functions # AC_C_INLINE() AC_MSG_CHECKING([for all available inline directives]) for ac_kw in inline __inline __inline__ __forceinline; do AC_COMPILE_IFELSE( [ typedef int foo_t; static $ac_kw foo_t static_foo(void){ return 0; } $ac_kw foo_t foo(void){ return 0; } ], [AC_DEFINE_UNQUOTED([`echo "HAVE_$ac_kw" | $as_tr_cpp`],[1])] ) done for ac_kw in noinline always_inline gnu_inline; do AC_COMPILE_IFELSE( [ typedef int foo_t; static __attribute__(($ac_kw)) foo_t static_foo(void){ return 0; } __attribute__(($ac_kw)) foo_t foo(void){ return 0; } ], [AC_DEFINE_UNQUOTED([`echo "HAVE_ATTRIBUTE_$ac_kw" | $as_tr_cpp`],[1])] ) done AC_MSG_RESULT([done]) ############################################################################### # Check for libraries and header files. # # # common system headers # AC_CHECK_HEADERS([sys/select.h execinfo.h net/socket.h]) # # setrlimit - used to set the socket limit # AC_CHECK_FUNCS([setrlimit]) # # strnlen - string length with upper scan bound # AC_CHECK_FUNCS([strnlen]) # # more functions to check # AC_CHECK_FUNCS([getpid gettid]) # # Memory manager # case $enable_manager in "no") CFLAGS="$CFLAGS -DNO_MEMMGR" ;; "builtin") # enabled by default ;; "memwatch") CFLAGS="$CFLAGS -DMEMWATCH" AC_CHECK_HEADER([memwatch.h], , [AC_MSG_ERROR([memwatch header not found... stopping])]) ;; "dmalloc") CFLAGS="$CFLAGS -DDMALLOC -DDMALLOC_FUNC_CHECK" LIBS="$LIBS -ldmalloc" AC_CHECK_HEADER([dmalloc.h], , [AC_MSG_ERROR([dmalloc header not found... stopping])]) ;; "gcollect") CFLAGS="$CFLAGS -DGCOLLECT" LIBS="$LIBS -lgc" AC_CHECK_HEADER([gc.h], , [AC_MSG_ERROR([gcollect header not found... stopping])]) ;; "bcheck") CFLAGS="$CFLAGS -DBCHECK" ;; esac # # Packetver # if test -n "$enable_packetver" ; then AC_DEFINE_UNQUOTED([PACKETVER],[$enable_packetver],[Packet version.]) fi # # Debug # case $enable_debug in "no") # default value CFLAGS="$CFLAGS -Wno-unused -Wno-parentheses" ;; "yes") CFLAGS="$CFLAGS -g -DDEBUG" ;; "gdb") CFLAGS="$CFLAGS -ggdb -DDEBUG" ;; esac # # RDTSC # case $enable_rdtsc in 0) #default value ;; 1) CFLAGS="$CFLAGS -DENABLE_RDTSC" ;; esac # # Profiler # case $enable_profiler in "no") # default value ;; "gprof") CFLAGS="$CFLAGS -pg" LDFLAGS="$LDFLAGS -pg" ;; esac # # zlib library (required) # if test -n "${ZLIB_HOME}" ; then LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" fi AC_CHECK_LIB([z], [inflateEnd], [],[AC_MSG_ERROR([zlib library not found or incompatible, please specify the correct path with --with-zlib=DIR... stopping])]) AC_CHECK_HEADER([zlib.h], [], [AC_MSG_ERROR([zlib header not found, please specify the correct path with --with-zlib=DIR... stopping])]) # # math library (required) # AC_SEARCH_LIBS([sqrt], [m], [], [AC_MSG_ERROR([math library not found... stopping])]) # # clock_gettime (optional, rt on Debian) # AC_SEARCH_LIBS([clock_gettime], [rt]) # # CLOCK_MONOTONIC clock for clock_gettime # Normally defines _POSIX_TIMERS > 0 and _POSIX_MONOTONIC_CLOCK (for posix # compliant systems) and __FreeBSD_cc_version >= 500005 (for FreeBSD # >= 5.1.0, which does not have the posix defines (ref. r11983)) would be # checked but some systems define them even when they do not support it # (ref. bugreport:1003). # if test "$ac_cv_search_clock_gettime" != "no" ; then AC_MSG_CHECKING([whether CLOCK_MONOTONIC is supported and works]) AC_RUN_IFELSE( [ #include #include #include int main(int argc, char** argv) { struct timespec tval; return clock_gettime(CLOCK_MONOTONIC, &tval); } ], [ AC_MSG_RESULT([yes]) CFLAGS="$CFLAGS -DHAVE_MONOTONIC_CLOCK" ], [ # either it failed to compile (CLOCK_MONOTONIC undefined) # or clock_gettime has returned a non-zero value AC_MSG_RESULT([no]) ], [ AC_MSG_RESULT([guessing no]) ] ) fi # # MySQL library (optional) # if test "$want_mysql" = "no" ; then MYSQL_VERSION="" MYSQL_CFLAGS="" MYSQL_LIBS="" AC_MSG_NOTICE([ignoring MySQL (optional)]) else if test -z "$MYSQL_CONFIG_HOME"; then AC_PATH_PROG([MYSQL_CONFIG_HOME], [mysql_config], [no]) fi if test "$MYSQL_CONFIG_HOME" != "no" ; then MYSQL_VERSION="`$MYSQL_CONFIG_HOME --version`" if test "$manual_MYSQL_CFLAGS" = "no" ; then MYSQL_CFLAGS="`$MYSQL_CONFIG_HOME --include`" fi if test "$manual_MYSQL_LIBS" = "no" ; then MYSQL_LIBS="`$MYSQL_CONFIG_HOME --libs`" fi else MYSQL_VERSION="unknown" fi MYSQL_OLD_LDFLAGS="$LDFLAGS" ; LDFLAGS="$LDFLAGS $MYSQL_LIBS" MYSQL_OLD_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="$CPPFLAGS $MYSQL_CFLAGS" AC_CHECK_LIB([mysqlclient], [mysql_init], [HAVE_MYSQL="yes"], []) AC_CHECK_HEADER([mysql.h], [], [HAVE_MYSQL=""]) CPPFLAGS="$MYSQL_OLD_CPPFLAGS" LDFLAGS="$MYSQL_OLD_LDFLAGS" AC_MSG_CHECKING([MySQL library (optional)]) if test "$HAVE_MYSQL" = "yes" ; then AC_MSG_RESULT([yes ($MYSQL_VERSION)]) else AC_MSG_RESULT([no]) if test "$require_mysql" = "yes" ; then AC_MSG_ERROR([MySQL not found or incompatible (requested)]) else AC_MSG_NOTICE([disabling MySQL (optional)]) MYSQL_VERSION="" MYSQL_CFLAGS="" MYSQL_LIBS="" fi fi fi AC_SUBST([HAVE_MYSQL]) AC_SUBST([MYSQL_VERSION]) AC_SUBST([MYSQL_CFLAGS]) AC_SUBST([MYSQL_LIBS]) # # PCRE library (optional) # ##TODO PCRE version PCRE_LIBS="" PCRE_CFLAGS="" if test "$want_pcre" = "no" ; then AC_MSG_NOTICE([ignoring PCRE (optional)]) else if test -z "$PCRE_HOME" ; then AC_CHECK_LIB([pcre], [pcre_study], [HAVE_PCRE="yes"], []) if test "$HAVE_PCRE" = "yes" ; then PCRE_LIBS="-lpcre" fi else PCRE_OLD_LDFLAGS="$LDFLAGS" ; LDFLAGS="$LDFLAGS -L$PCRE_HOME/lib" PCRE_OLD_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="$CPPFLAGS -I$PCRE_HOME/include" AC_CHECK_LIB(pcre, pcre_compile, [HAVE_PCRE="yes"], []) CPPFLAGS="$PCRE_OLD_CPPFLAGS" LDFLAGS="$PCRE_OLD_LDFLAGS" if test "$HAVE_PCRE" = "yes" ; then PCRE_LIBS="-L$PCRE_HOME/lib -lpcre" test -d "$PCRE_HOME/include" && PCRE_CFLAGS="-I$PCRE_HOME/include" fi fi AC_MSG_CHECKING([PCRE library (optional)]) if test "$HAVE_PCRE" = "yes" ; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) if test "$require_pcre" = "yes" ; then AC_MSG_ERROR([PCRE not found or incompatible (requested)]) else AC_MSG_NOTICE([disabling PCRE (optional)]) fi fi fi AC_SUBST([HAVE_PCRE]) AC_SUBST([PCRE_LIBS]) AC_SUBST([PCRE_CFLAGS]) # # Host specific stuff # AC_MSG_CHECKING([host OS]) host_os="`uname`" AC_MSG_RESULT([$host_os]) fd_setsize="" DLLEXT=".so" case $host_os in Solaris* ) LIBS="$LIBS -lsocket -lnsl -ldl" ;; Linux* ) LIBS="$LIBS -ldl" ;; FreeBSD*) CPPFLAGS="$CPPFLAGS -D__FREEBSD__" ;; NetBSD*) CPPFLAGS="$CPPFLAGS -D__NETBSD__" ;; CYGWIN*) CPPFLAGS="$CPPFLAGS -DFD_SETSIZE=4096 -DCYGWIN" fd_setsize="done" DLLEXT=".dll" ;; esac AC_SUBST([DLLEXT]) AC_MSG_CHECKING([for MinGW]) if test -n "`$CC --version | grep -i mingw`" ; then AC_MSG_RESULT([yes]) CPPFLAGS="$CPPFLAGS -DMINGW" if test -z "$fd_setsize" ; then CPPFLAGS="$CPPFLAGS -DFD_SETSIZE=4096" fi LIBS="$LIBS -lws2_32" else AC_MSG_RESULT([no]) fi ############################################################################### AC_OUTPUT