diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-04-29 00:22:53 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-04-29 01:48:09 +0300 |
commit | ba9e21984ee191865d11df1bb87f4142bb4cc5ab (patch) | |
tree | 09f2e0a63cffc44d33c208c179aeaee497d45419 /configure.ac | |
parent | 57c53f8a424d8d87e4ce069981f901e9ffcccb83 (diff) | |
download | hercules-ba9e21984ee191865d11df1bb87f4142bb4cc5ab.tar.gz hercules-ba9e21984ee191865d11df1bb87f4142bb4cc5ab.tar.bz2 hercules-ba9e21984ee191865d11df1bb87f4142bb4cc5ab.tar.xz hercules-ba9e21984ee191865d11df1bb87f4142bb4cc5ab.zip |
Rename configure.in into configure.ac
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 1456 |
1 files changed, 1456 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 000000000..d6f783505 --- /dev/null +++ b/configure.ac @@ -0,0 +1,1456 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +# This file is part of Hercules. +# http://herc.ws - http://github.com/HerculesWS/Hercules +# +# Copyright (C) 2012-2015 Hercules Dev Team +# Copyright (C) Athena Dev Teams +# +# Hercules is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +AC_INIT(Hercules) +AC_REVISION([m4_esyscmd_s([type git >/dev/null 2>&1 && git describe --always 2>/dev/null || echo '(unknown version)'])]) +AC_PREREQ([2.59]) +AC_CONFIG_SRCDIR([src/common/cbasetypes.h]) +AC_CONFIG_FILES([Makefile src/common/Makefile]) +AC_CONFIG_FILES([3rdparty/mt19937ar/Makefile 3rdparty/libconfig/Makefile]) +AC_CONFIG_FILES([src/char/Makefile src/login/Makefile]) +AC_CONFIG_FILES([src/map/Makefile src/plugins/Makefile src/tool/Makefile]) +AC_CONFIG_FILES([src/test/Makefile]) +AC_CONFIG_FILES([tools/HPMHookGen/Makefile]) + +dnl AC_USE_SYSTEM_EXTENSIONS requires autoconf 2.60 or newer. Fall back to AC_GNU_SOURCE otherwise. +m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], + [AC_USE_SYSTEM_EXTENSIONS], + [AC_GNU_SOURCE] +) + +# +# 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. (see src/common/mmo.h)] + ), + [enable_packetver="$enableval"], + [enable_packetver=""] +) + + +# +# packetver-RE +# +AC_ARG_ENABLE( + [packetver-re], + AC_HELP_STRING( + [--enable-packetver-re], + [Sets or unsets the PACKETVER_RE define - see src/common/mmo.h (currently disabled by default)] + ), + [ + enable_packetver_re="$enableval" + case $enableval in + "no");; + "yes");; + *) AC_MSG_ERROR([[invalid argument --enable-packetver-re=$enableval... stopping]]);; + esac + ], + [enable_packetver_re="no"] +) + + +# +# Obfuscation keys +# +AC_ARG_WITH( + [key1], + AC_HELP_STRING( + [--with-key1@<:@=ARG@:>@], + [Set the first obfuscation key (ignored unless the other two are also specified)] + ), + [ + obfuscationkey1="$( expr "0x$withval" : '0*x*\(0x@<:@A-Fa-f0-9@:>@\{8\}\)' )" + if ! expr "x$obfuscationkey1" : 'x0x@<:@A-Fa-f0-9@:>@\{8\}' >/dev/null 2>&1; then + obfuscationkey1="" + fi + ], + [ + obfuscationkey1="" + ] +) +AC_ARG_WITH( + [key2], + AC_HELP_STRING( + [--with-key2@<:@=ARG@:>@], + [Set the second obfuscation key (ignored unless the other two are also specified)] + ), + [ + obfuscationkey2="$( expr "0x$withval" : '0*x*\(0x@<:@A-Fa-f0-9@:>@\{8\}\)' )" + if ! expr "x$obfuscationkey2" : 'x0x@<:@A-Fa-f0-9@:>@\{8\}' >/dev/null 2>&1; then + obfuscationkey2="" + fi + ], + [ + obfuscationkey2="" + ] +) +AC_ARG_WITH( + [key3], + AC_HELP_STRING( + [--with-key3@<:@=ARG@:>@], + [Set the third obfuscation key (ignored unless the other two are also specified)] + ), + [ + obfuscationkey3="$( expr "0x$withval" : '0*x*\(0x@<:@A-Fa-f0-9@:>@\{8\}\)' )" + if ! expr "x$obfuscationkey3" : 'x0x@<:@A-Fa-f0-9@:>@\{8\}' >/dev/null 2>&1; then + obfuscationkey3="" + fi + ], + [ + obfuscationkey3="" + ] +) + + +# +# debug +# +AC_ARG_ENABLE( + [debug], + AC_HELP_STRING( + [--enable-debug@<:@=ARG@:>@], + [ + Compiles extra debug code. (yes 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="yes"] +) + +# +# Buildbot +# +AC_ARG_ENABLE( + [buildbot], + AC_HELP_STRING( + [--enable-buildbot@<:@=ARG@:>@], + [(available options: yes, no)] + ), + [ + enable_buildbot="$enableval" + case $enableval in + "no");; + "yes");; + *) AC_MSG_ERROR([[invalid argument --enable-buildbot=$enableval... stopping]]);; + esac + ], + [enable_buildbot="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 most modern Dedicated Servers cpufreq is preconfigured, see your distribution's + manual how to disable it). + Furthermore, If your CPU has built-in CPU-Frequency scaling features (such as Intel's + SpeedStep(R)), do not enable this option. Recent CPUs (Intel Core or newer) guarantee + a fixed increment rate for their TSC, so it should be safe to use, but please doublecheck + the documentation of both your CPU and OS before enabling this option. + ] + ), + [ + 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( + [--disable-64bit], + [ + Enforce 32bit output on x86_64 systems. + ] + ), + [ + enable_64bit="$enableval" + case $enableval in + "no");; + "yes");; + *) AC_MSG_ERROR([[invalid argument --enable-64bit=$enableval... stopping]]);; + esac + ], + [enable_64bit="yes"] +) + + +# +# LTO +# +AC_ARG_ENABLE( + [lto], + AC_HELP_STRING( + [--enable-lto], + [ + Enables or Disables Linktime Code Optimization (LTO is disabled by default) + ] + ), + [ + enable_lto="$enableval" + case $enableval in + "no");; + "yes");; + *) AC_MSG_ERROR([[invalid argument --enable-lto=$enableval... stopping]]);; + esac + ], + [enable_lto="no"] +) + + +# +# static linking +# +AC_ARG_ENABLE( + [static], + AC_HELP_STRING( + [--enable-static], + [ + Enables or Disables Statick Linking (STATIC is disabled by default) + ] + ), + [ + enable_static="$enableval" + case $enableval in + "no");; + "yes");; + *) AC_MSG_ERROR([[invalid argument --enable-static=$enableval... stopping]]);; + esac + ], + [enable_static="no"] +) + + +# +# adress sanitize +# +AC_ARG_ENABLE( + [sanitize], + AC_HELP_STRING( + [--enable-sanitize@<:@=ARG@:>@], + [ + Enables sanitizer. (disabled by default) + (available options: yes, no, full) + ] + ), + [ + enable_sanitize="$enableval" + case $enableval in + "no");; + "yes");; + "full");; + *) AC_MSG_ERROR([[invalid argument --enable-sanitize=$enableval... stopping]]);; + esac + ], + [enable_sanitize="no"] +) + + +# +# -Werror compiler flag +# It's not always possible (if at all) to pass -Werror in the CFLAGS, since +# autoconf often generates test-code that produces warnings. +# Reference: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=734104 +# +AC_ARG_ENABLE( + [Werror], + AC_HELP_STRING( + [--enable-Werror], + [ + Enables -Werror in the compiler flags. (disabled by default) + ] + ), + [ + enable_Werror="$enableval" + case $enableval in + "no");; + "yes");; + *) AC_MSG_ERROR([[invalid argument --enable-Werror=$enableval... stopping]]);; + esac + ], + [enable_Werror="no"] +) + + +# +# Renewal +# +AC_ARG_ENABLE( + [renewal], + AC_HELP_STRING( + [--disable-renewal], + [ + Disable Ragnarok Renewal support (override settings in src/config/renewal.h) + ] + ), + [ + enable_renewal="$enableval" + case $enableval in + "no");; + "yes");; + *) AC_MSG_ERROR([[invalid argument --enable-renewal=$enableval... stopping]]);; + esac + ], + [enable_renewal="yes"] +) + + +# +# Optionally set the max number of network conenctions +# the core will be support +# +AC_ARG_WITH( + [maxconn], + AC_HELP_STRING( + [--with-maxconn@<:@=ARG@:>@], + [optionally set the maximum connections the core can handle (default: 16384) NOT USED YET - EXPERIMENTAL] + ), + [ + if test "$withval" == "no"; then + CPPFLAGS="$CPPFLAGS -DMAXCONN=16384" + else + + if ! test "$withval" -ge 0 -o "$withval" -lt 0 2>&- ; then + AC_MSG_ERROR([Invalid argument --with-maxconn=$withval ... stopping]) + else + CPPFLAGS="$CPPFLAGS -DMAXCONN=$withval" + fi + fi + ], + [ + CPPFLAGS="$CPPFLAGS -DMAXCONN=16384" + ] +) + + +# +# Optionally specify the path to mysql_config +# +AC_ARG_WITH( + [mysql], + AC_HELP_STRING( + [--with-mysql@<:@=ARG@:>@], + [optionally specify the path to the mysql_config executable] + ), + [ + if test "$withval" != "no" ; then + if test ! -x "$withval" ; then + AC_MSG_ERROR([$withval is not an executable file]) + fi + MYSQL_CONFIG_HOME="$withval" + fi + ] +) + + +# +# 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"] +) + + +############################################################################### +# Check for programs and types. +# + + + +AC_PROG_MAKE_SET +AC_PROG_CC +AC_PROG_CPP +AC_PATH_PROG(AR, ar) +AC_LANG([C]) + + +# -Wcast-qual use for check wrong casts. It cant be added by default, because some casts must be wrong. +# -Wconversion warning: conversion to 'long unsigned int' from 'int' may change the sign of the result +# -Wfloat-equal comparing floating point with == or != is unsafe +# -Wunsuffixed-float-constants float issues +# -Wpedantic different pedantic checks. Not all can be fixed in nice way. +# -Wtraditional-conversion some conversion issues +# -Wunsafe-loop-optimizations possible optimisation issues +# -Wunused-parameter -Wunused-but-set-parameter unused parameters +# -Wunused-macros unused macro warnings, but it also enable unused parameters +# -Wstrict-prototypes show warning in grammar.y +# -wdiscarded-qualifiers show different const removal +# attributes suggestion +# -Wsuggest-attribute=const -Wsuggest-attribute=format -Wsuggest-attribute=pure + +# flags what can be used but now return no warnings: +# -Wchkp -Wdisabled-optimization +# -Werror-implicit-function-declaration -Wtrampolines +# -Wjump-misses-init + +CFLAGS="$CFLAGS -pipe -ffast-math -Wall -Wextra -Wno-sign-compare -std=c99" +CPPFLAGS="$CPPFLAGS -I../common" +LDFLAGS="$LDFLAGS" + +# Add /usr/local to the library and header search path, where appropriate +case `uname` in + Darwin*|*BSD*) + if test -d /usr/local/include ; then + CPPFLAGS="$CPPFLAGS -I/usr/local/include" + fi + if test -d /usr/local/lib ; then + LDFLAGS="$LDFLAGS -L/usr/local/lib" + fi + ;; +esac + +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 + + +# +# check if we're producing 32bit code - so well produce binarys for at least i686 (speedup: cmovs, and cmpchg8 support) +# +AC_MSG_CHECKING([whether $CC produces 32bit code]) +AC_RUN_IFELSE( + [AC_LANG_SOURCE([ + int main(int argc, char **argv){ + if(sizeof(void*) == 4) return 0; + else return 1; + } + ])], + [ + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([whether $CC supports -march=i686 (and we can run it)]) + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + CFLAGS="$CFLAGS -march=i686" + LDFLAGS="$LDFLAGS -march=i686" + AC_RUN_IFELSE( + [AC_LANG_SOURCE([ + int main(int argc, char **argv) { return 0; } + ])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + LDFLAGS="$OLD_LDFLAGS" + ], + [ + AC_MSG_RESULT([guessing no]) + CFLAGS="$OLD_CFLAGS" + LDFLAGS="$OLD_LDFLAGS" + ] + ) + ], + [ + AC_MSG_RESULT([no]) + ], + [ + AC_MSG_RESULT([guessing no]) + ] +) + + +# +# Check if CC supports __thread attribute (Thread Local Storage) +# (Usually our OSX friends 're lacking support of it in older llvm versions ..) +# +AC_MSG_CHECKING([whether $CC supports __thread specifier (TLS)]) +AC_RUN_IFELSE( + [AC_LANG_SOURCE([ + __thread int g_Test = -1; + + int main(int argc, char **argv){ + g_Test = 0; + return g_Test; + } + ])], + [ + AC_MSG_RESULT([yes]) + CPPFLAGS="$CPPFLAGS -DHAS_TLS" + ], + [ + AC_MSG_RESULT([no]) + ] +) + +# +# Check if the linker supports/accepts -rdynamic +# Generally only needed by the ELF linker, in order to produce backtraces. +# On non-ELF platforms, some compilers (i.e. gcc < 5 and clang on OSX) are able to ignore it, others will error out. +# +OLD_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -rdynamic" +AC_MSG_CHECKING([whether $CC accepts -rdynamic]) +AC_LINK_IFELSE( + [AC_LANG_SOURCE([ + int main(int argc, char **argv) + { + return 0; + } + ])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + LDFLAGS="$OLD_LDFLAGS" + ], + [ + AC_MSG_RESULT([guessing no]) + ] +) + +# +# LTO Support test +# +if test "$enable_lto" != "no" ; then + + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -flto" + + OLD_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -flto" + + AC_MSG_CHECKING([whether $CC supports -flto]) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([ + int main(int argc, char **argv){ + return 0; + } + ])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + LDFLAGS="$OLD_LDFLAGS" + ], + [ + AC_MSG_RESULT([guessing no]) + ] + ) +fi + +AC_DEFUN([AC_CHECK_SANITIZER_FLAG], + [ + AC_MSG_CHECKING([whether $CC supports -fsanitize=$1]) + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fsanitize=$1" + OLD_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -fsanitize=$1" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([int foo;])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + + AC_MSG_CHECKING([whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=$1]) + CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([int foo;])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + LDFLAGS="$OLD_LDFLAGS" + ] + ) + ], + [ + AC_MSG_RESULT([guessing no]) + CFLAGS="$OLD_CFLAGS" + LDFLAGS="$OLD_LDFLAGS" + ] + ) + ] +) + +# +# sanitize Support test +# +if test "$enable_sanitize" != "no" ; then + AC_CHECK_SANITIZER_FLAG(address) + if test "$enable_sanitize" == "full" ; then + # skipped because server have multiple issues: -fsanitize=alignment + AC_CHECK_SANITIZER_FLAG(shift) + AC_CHECK_SANITIZER_FLAG(integer-divide-by-zero) + AC_CHECK_SANITIZER_FLAG(unreachable) + AC_CHECK_SANITIZER_FLAG(vla-bound) + AC_CHECK_SANITIZER_FLAG(null) + AC_CHECK_SANITIZER_FLAG(return) + AC_CHECK_SANITIZER_FLAG(signed-integer-overflow) + AC_CHECK_SANITIZER_FLAG(bounds) + AC_CHECK_SANITIZER_FLAG(bounds-strict) + AC_CHECK_SANITIZER_FLAG(object-size) + AC_CHECK_SANITIZER_FLAG(float-divide-by-zero) + AC_CHECK_SANITIZER_FLAG(float-cast-overflow) + AC_CHECK_SANITIZER_FLAG(nonnull-attribute) + AC_CHECK_SANITIZER_FLAG(returns-nonnull-attribute) + AC_CHECK_SANITIZER_FLAG(bool) + AC_CHECK_SANITIZER_FLAG(enum) + AC_CHECK_SANITIZER_FLAG(vptr) + fi +fi + + +AC_DEFUN([AC_CHECK_COMPILER_WFLAG], + [ + AC_MSG_CHECKING([whether $CC supports -W$1]) + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror -W$1" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([int foo;])], + [ + AC_MSG_RESULT([yes]) + CFLAGS="$OLD_CFLAGS -W$1" + # Optionally, run a test + if test "x$2" != "x"; then + AC_MSG_CHECKING([whether $CC can actually use -W$1]) + CFLAGS="$OLD_CFLAGS -Werror -W$1" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([$2])], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + ] + [ + AC_MSG_RESULT([yes]) + CFLAGS="$OLD_CFLAGS -W$1" + ], + ) + fi + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + ] + ) + ] +) + +AC_DEFUN([AC_CHECK_COMPILER_WNOFLAG], + [ + AC_MSG_CHECKING([whether $CC supports -Wno-$1]) + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror -Wno-$1" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([int foo;])], + [ + # Recent versions of gcc don't fail if -Wno-foo is not recognized + # (unless there are also other warnings), so we also check for -Wfoo + # which always fails if not supported + CFLAGS="$OLD_CFLAGS -Werror -W$1" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([int foo;])], + [ + AC_MSG_RESULT([yes]) + CFLAGS="$OLD_CFLAGS -Wno-$1" + # Optionally, run a test + if test "x$2" != "x"; then + AC_MSG_CHECKING([whether $CC can actually use -Wno-$1]) + CFLAGS="$OLD_CFLAGS -Werror -W$1" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([$2])], + [ + AC_MSG_RESULT([not needed but enabled]) + CFLAGS="$OLD_CFLAGS" + ], + [ + CFLAGS="$OLD_CFLAGS -Werror -Wno-$1" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([$2])], + [ + AC_MSG_RESULT([yes]) + CFLAGS="$OLD_CFLAGS -Wno-$1" + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + ] + ) + ] + ) + fi + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + ] + ) + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + ] + ) + ] +) + +AC_CHECK_COMPILER_WNOFLAG(unused-parameter, [int foo(int bar) { return 0; }]) +AC_CHECK_COMPILER_WNOFLAG(clobbered) +AC_CHECK_COMPILER_WFLAG(empty-body) +AC_CHECK_COMPILER_WFLAG(newline-eof) +AC_CHECK_COMPILER_WFLAG(int-conversion) +AC_CHECK_COMPILER_WFLAG(init-self) +AC_CHECK_COMPILER_WFLAG(pointer-arith) +AC_CHECK_COMPILER_WFLAG(switch-bool) +AC_CHECK_COMPILER_WFLAG(enum-conversion) +AC_CHECK_COMPILER_WFLAG(shorten-64-to-32) +AC_CHECK_COMPILER_WFLAG(constant-conversion) +AC_CHECK_COMPILER_WFLAG(bool-conversion) +AC_CHECK_COMPILER_WFLAG(format-security) +AC_CHECK_COMPILER_WFLAG(format) +AC_CHECK_COMPILER_WFLAG(format-signedness) +AC_CHECK_COMPILER_WFLAG(format-y2k) +AC_CHECK_COMPILER_WFLAG(missing-include-dirs) +AC_CHECK_COMPILER_WFLAG(suggest-attribute=noreturn) +AC_CHECK_COMPILER_WFLAG(undef) +#AC_CHECK_COMPILER_WFLAG(cast-align) +#AC_CHECK_COMPILER_WFLAG(logical-op) # some useless warnings +AC_CHECK_COMPILER_WFLAG(nested-externs) +AC_CHECK_COMPILER_WFLAG(old-style-definition) +AC_CHECK_COMPILER_WFLAG(overlength-strings) +AC_CHECK_COMPILER_WFLAG(redundant-decls) +AC_CHECK_COMPILER_WFLAG(cast-qual) +AC_CHECK_COMPILER_WFLAG(misleading-indentation) +AC_CHECK_COMPILER_WFLAG(null-dereference) +AC_CHECK_COMPILER_WNOFLAG(format-nonliteral) +AC_CHECK_COMPILER_WNOFLAG(switch) +AC_CHECK_COMPILER_WNOFLAG(missing-field-initializers) +AC_CHECK_COMPILER_WNOFLAG(suggest-attribute=format) + +# Certain versions of gcc make -Wshadow completely useless by making it flood +# you with unnecessary warnings <https://lkml.org/lkml/2006/11/28/239> +# Let's check if we can really use it +SAVED_OLD_CFLAGS="$CFLAGS" +AC_CHECK_COMPILER_WFLAG(shadow) +if test "x$CFLAGS" != "x$SAVED_OLD_CFLAGS"; then + AC_MSG_CHECKING([whether $CC can efficiently use -Wshadow]) + NEW_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror -Wshadow" + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([ + int foo(void) { + return 0; + } + int bar(void) { + int foo = 0; + return foo + 1; + } + ])], + [ + AC_MSG_RESULT([yes]) + CFLAGS="$NEW_CFLAGS" + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$SAVED_OLD_CFLAGS" + ] + ) +fi + +AC_MSG_CHECKING([whether $CC supports -fPIC]) +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fPIC" +AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([int foo;])], + [ + AC_MSG_RESULT([yes]) + SOFLAGS="$SOFLAGS -fPIC" + ], + [ + AC_MSG_RESULT([no]) + ] +) +CFLAGS="$OLD_CFLAGS" + +# +# option for shared objects +# +AC_MSG_CHECKING([how to make shared objects]) +OLD_CFLAGS="$CFLAGS" +compiler_shared_objects="" +compiler_supports_shared_objects="no" +my_shared_test_flags="$CFLAGS $SOFLAGS" +# default +CFLAGS="$my_shared_test_flags -shared" +AC_LINK_IFELSE( + [AC_LANG_SOURCE([ + int bar = 0; + + int foo(void) + { + return bar; + } + ])], + [ + compiler_shared_objects="-shared" + compiler_supports_shared_objects="yes" + ] +) +# BeOS specific +CFLAGS="$my_shared_test_flags -nostart" +AC_LINK_IFELSE( + [AC_LANG_SOURCE([ + int bar = 0; + + int foo(void) + { + return bar; + } + ])], + [ + compiler_shared_objects="-nostart" + compiler_supports_shared_objects="yes" + ] +) +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 $compiler_supports_shared_objects]) + SOFLAGS="$SOFLAGS $compiler_shared_objects" + WITH_PLUGINS="yes" + + # + # On certain platforms, undefined references on shared libraries won't be checked + # unless explicitly required with the --no-undefined linker option + # + AC_MSG_CHECKING([whether $CC needs -Wl,--no-undefined to check for undefined references in shared objects]) + OLD_CFLAGS="$CFLAGS" + CFLAGS="$SOFLAGS" + AC_LINK_IFELSE( + [AC_LANG_SOURCE([ + void foo(void) { + foobar(); + } + ])], + [ + CFLAGS="$SOFLAGS -Wl,--no-undefined" + AC_LINK_IFELSE( + [AC_LANG_SOURCE([ + int bar = 0; + + int foo(void) { + return bar; + } + ])], + [ + AC_MSG_RESULT([yes]) + SOFLAGS="$SOFLAGS -Wl,--no-undefined" + ], + [ + AC_MSG_RESULT([unsupported (undefined references check will be ignored)]) + ] + ) + ], + [ + AC_MSG_RESULT([no]) + ] + ) + CFLAGS="$OLD_CFLAGS" +fi +my_shared_test_flags="" +AC_SUBST([WITH_PLUGINS]) +AC_SUBST([SOFLAGS]) + + +# +# -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( + [AC_LANG_SOURCE([int foo;])], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + ] +) + + +############################################################################### +# Check for libraries and header files. +# + + +# +# setrlimit - used to set the socket limit +# +AC_CHECK_FUNC([setrlimit],[CPPFLAGS="$CPPFLAGS -DHAVE_SETRLIMIT"]) + + +# +# strnlen - string length with upper scan bound +# +AC_CHECK_FUNC([strnlen],[CPPFLAGS="$CPPFLAGS -DHAVE_STRNLEN"]) + +# libconfig +AC_CHECK_FUNCS([uselocale]) +AC_CHECK_FUNCS([newlocale]) +AC_CHECK_FUNCS([freelocale]) +AC_CHECK_HEADERS([xlocale.h]) + +# +# Memory manager +# +case $enable_manager in + "no") + CPPFLAGS="$CPPFLAGS -DNO_MEMMGR" + ;; + "builtin") + # enabled by default + ;; + "memwatch") + CPPFLAGS="$CPPFLAGS -DMEMWATCH" + AC_CHECK_HEADER([memwatch.h], , [AC_MSG_ERROR([memwatch header not found... stopping])]) + ;; + "dmalloc") + CPPFLAGS="$CPPFLAGS -DDMALLOC -DDMALLOC_FUNC_CHECK" + LIBS="$LIBS -ldmalloc" + AC_CHECK_HEADER([dmalloc.h], , [AC_MSG_ERROR([dmalloc header not found... stopping])]) + ;; + "gcollect") + CPPFLAGS="$CPPFLAGS -DGCOLLECT" + LIBS="$LIBS -lgc" + AC_CHECK_HEADER([gc.h], , [AC_MSG_ERROR([gcollect header not found... stopping])]) + ;; + "bcheck") + CPPFLAGS="$CPPFLAGS -DBCHECK" + ;; +esac + + +# +# Packetver +# +if test -n "$enable_packetver" ; then + CPPFLAGS="$CPPFLAGS -DPACKETVER=$enable_packetver" +fi + +# +# Packetver-RE +# +case $enable_packetver_re in + "yes") + CPPFLAGS="$CPPFLAGS -DENABLE_PACKETVER_RE" + ;; + "no") + # default value + ;; +esac + +# +# Obfuscation keys +# +if test -n "$obfuscationkey1" -a -n "$obfuscationkey2" -a -n "$obfuscationkey3"; then + CPPFLAGS="$CPPFLAGS -DOBFUSCATIONKEY1=$obfuscationkey1 -DOBFUSCATIONKEY2=$obfuscationkey2 -DOBFUSCATIONKEY3=$obfuscationkey3" +fi + +# +# Debug +# +case $enable_debug in + "no") + # default value +# CFLAGS="$CFLAGS -Wno-unused -Wno-parentheses" + ;; + "yes") + CFLAGS="$CFLAGS -g" + CPPFLAGS="$CPPFLAGS -DDEBUG" + ;; + "gdb") + CFLAGS="$CFLAGS -ggdb" + CPPFLAGS="$CPPFLAGS -DDEBUG" + ;; +esac + +# +# Buildbot +# +case $enable_buildbot in + "no") + # default value + ;; + "yes") + CPPFLAGS="$CPPFLAGS -DBUILDBOT" + ;; +esac + +# +# RDTSC +# +case $enable_rdtsc in + 0) + #default value + ;; + 1) + CPPFLAGS="$CPPFLAGS -DENABLE_RDTSC" + ;; +esac + + +# +# Profiler +# +case $enable_profiler in + "no") + # default value + ;; + "gprof") + CFLAGS="$CFLAGS -pg" + LDFLAGS="$LDFLAGS -pg" + ;; +esac + +# +# Renewal +# +case $enable_renewal in + "no") + CPPFLAGS="$CPPFLAGS -DDISABLE_RENEWAL" + ;; + "yes") + # default value + ;; +esac + +# +# 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" + ;; +Darwin*) + DLLEXT=".dylib" + ;; +esac +AC_SUBST([DLLEXT]) + +AC_MSG_CHECKING([for MinGW]) +if test -n "`$CC --version 2>/dev/null | 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 + + + +# +# zlib library (required) +# +AC_SEARCH_LIBS([inflateEnd], [z], [],[AC_MSG_ERROR([zlib library not found or incompatible... stopping])]) +AC_CHECK_HEADER([zlib.h], [], [AC_MSG_ERROR([zlib header not found, please specify the correct path with... 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( + [AC_LANG_SOURCE([ + #include <sys/time.h> + #include <time.h> + #include <unistd.h> + + int main(int argc, char** argv) + { + struct timespec tval; + return clock_gettime(CLOCK_MONOTONIC, &tval); + } + ])], + [ + AC_MSG_RESULT([yes]) + CPPFLAGS="$CPPFLAGS -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 + + +# +# pthread +# +AC_SEARCH_LIBS([pthread_create], [pthread], [], [AC_MSG_ERROR([pthread library not found or incompatible])]) +AC_SEARCH_LIBS([pthread_sigmask], [pthread], [], [AC_MSG_ERROR([pthread library not found or incompatible])]) +AC_SEARCH_LIBS([pthread_attr_init], [pthread], [], [AC_MSG_ERROR([pthread library not found or incompatible])]) +AC_SEARCH_LIBS([pthread_attr_setstacksize], [pthread], [], [AC_MSG_ERROR([pthread library not found or incompatible])]) +AC_SEARCH_LIBS([pthread_attr_destroy], [pthread], [], [AC_MSG_ERROR([pthread library not found or incompatible])]) +AC_SEARCH_LIBS([pthread_cancel], [pthread], [], [AC_MSG_ERROR([pthread library not found or incompatible])]) +AC_SEARCH_LIBS([pthread_join], [pthread], [], [AC_MSG_ERROR([pthread library not found or incompatible])]) + +# execinfo (backtrace) +AC_CHECK_HEADERS([execinfo.h], + [ + AC_SEARCH_LIBS([backtrace], + [execinfo], + [ + CFLAGS="$CFLAGS -DHAVE_EXECINFO" + ], + [ + ] + ) + ], + [ + ] +) + +# +# MySQL library +# + +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_LIBS="$LIBS" ; LIBS="$LIBS $MYSQL_LIBS" +MYSQL_OLD_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="$CPPFLAGS $MYSQL_CFLAGS" +AC_CHECK_FUNC([mysql_init], [HAVE_MYSQL="yes"]) +AC_CHECK_HEADER([mysql.h], [], [HAVE_MYSQL=""]) +CPPFLAGS="$MYSQL_OLD_CPPFLAGS" +LIBS="$MYSQL_OLD_LIBS" + +AC_MSG_CHECKING([MySQL library (required)]) +if test "$HAVE_MYSQL" = "yes" ; then + AC_MSG_RESULT([yes ($MYSQL_VERSION)]) +else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([MySQL not found or incompatible]) +fi + +AC_SUBST([HAVE_MYSQL]) +AC_SUBST([MYSQL_VERSION]) +AC_SUBST([MYSQL_CFLAGS]) +AC_SUBST([MYSQL_LIBS]) + + +# +# PCRE library (optional) +# + +AC_MSG_CHECKING([PCRE library]) +AC_CHECK_HEADER([pcre.h], [], [AC_MSG_ERROR([PCRE header not found])]) +AC_SEARCH_LIBS([pcre_study], [pcre], [], AC_MSG_ERROR([PCRE not found or incompatible])) + +# +# static Support test +# +if test "$enable_static" != "no" ; then + + STATIC="-static" + PLUGINSTATIC="-static-libgcc" + + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + OLD_LIBS="$LIBS" + + CFLAGS="$OLD_CFLAGS $MYSQL_CFLAGS -static" + LDFLAGS="$OLD_LDFLAGS -static" + LIBS="$OLD_LIBS $MYSQL_LIBS" + + AC_MSG_CHECKING([whether $CC supports -static]) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([ + int main(int argc, char **argv){ + return 0; + } + ])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + STATIC="" + ], + [ + AC_MSG_RESULT([guessing no]) + STATIC="" + ] + ) + CFLAGS="$OLD_CFLAGS -static-libgcc" + LDFLAGS="$OLD_LDFLAGS -static-libgcc" + + AC_MSG_CHECKING([whether $CC supports -static-libgcc]) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([ + int main(int argc, char **argv){ + return 0; + } + ])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + PLUGINSTATIC="" + ], + [ + AC_MSG_RESULT([guessing no]) + PLUGINSTATIC="" + ] + ) + + CFLAGS="$OLD_CFLAGS" + LDFLAGS="$OLD_LDFLAGS" + LIBS="$OLD_LIBS" +fi + +# +# -Werror compiler flag +# +if test "$enable_Werror" != "no" ; then + + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + + AC_MSG_CHECKING([whether $CC supports -Werror]) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([ + int main(int argc, char **argv){ + return 0; + } + ])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" + LDFLAGS="$OLD_LDFLAGS" + ], + [ + AC_MSG_RESULT([guessing no]) + ] + ) +fi + +AC_SUBST(STATIC, ${STATIC}) +AC_SUBST(PLUGINSTATIC, ${PLUGINSTATIC}) + + + +# +# Doxygen, perl (for HPMHookGen) +# + +AC_CHECK_PROG([HAVE_DOXYGEN],[doxygen],[yes],[no]) + +AC_CHECK_PROG([HAVE_PERL],[perl],[yes],[no]) + +############################################################################### +AC_OUTPUT |