summaryrefslogblamecommitdiff
path: root/configure.ac
blob: 8a89d546754e3bced54362da139c5898ccc83649 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                         


                         




                           
              




                 
              










                                                                                           













                                                         







                                                                                             
                   
                   
                                




                                                                               
                                        


                          
                                                                                                 

            
                              
 
                                                                      
 



















                                                                                          



















                                                                                           


















                                                                                       





















                                                

































                                                                        
 














                                                 













                                                     











                                        



























































                                                                                                            
















                                                   

                                   




                                             











                                                 


                                                      

                                                          

                                                             



                                                                                        



















                                                                                                                            
                                
AC_INIT(evolplugin, 1.0, akaras@inbox.ru)
AC_CONFIG_AUX_DIR(config)
AC_CONFIG_SRCDIR(src)
AC_CONFIG_MACRO_DIR([m4])

AM_INIT_AUTOMAKE([foreign])

#AC_PROG_CXX
AC_PROG_CC
AM_PROG_CC_C_O
LT_INIT
AC_PROG_LIBTOOL
AC_ENABLE_SHARED
AC_DISABLE_STATIC

AC_ARG_ENABLE(
    [sanitize],
    AC_HELP_STRING(
        [--enable-sanitize],
        [
            Enables or Disables Sanitize Address Checking (SANITIZE is disabled by default)
        ]
    ),
    [
        enable_sanitize="$enableval"
        case $enableval in
            "no");;
            "yes")
                if test -n "$CC"; then
                    case `($CC --version) 2>/dev/null` in
                      *gcc*4.4*| \
                      *gcc*4.5*| \
                      *gcc*4.6*| \
                      *gcc*4.7*| \
                      *gcc*4.8*)
                        enable_sanitize="no"
                          ;;
                      *);;
                    esac
                fi
            ;;
            *) AC_MSG_ERROR([[invalid argument --enable-sanitize=$disableval... stopping]]);;
        esac
    ],
    [enable_sanitize="no"]
)
AM_CONDITIONAL(ENABLE_SANITIZE, test x$enable_sanitize = xyes)

AC_ARG_ENABLE(
    [static-build],
    AC_HELP_STRING(
        [--enable-static-build],
        [
            Enables or Disables Statick Linking (STATIC is disabled by default)
        ]
    ),
    [
        enable_static_build="$enableval"
        case $enableval in
            "no");;
            "yes");;
            *) AC_MSG_ERROR([[invalid argument --enable-static-build=$disableval... stopping]]);;
        esac
    ],
    [enable_static_build="no"]
)
AM_CONDITIONAL(ENABLE_STATIC_BUILD, test x$enable_static_build = xyes)

AC_ARG_ENABLE(
    [gprof],
    AC_HELP_STRING(
        [--enable-gprof],
        [
            Enables or Disables Gprof (disabled by default)
        ]
    ),
    [
        enable_gprof="$enableval"
        case $enableval in
            "no");;
            "yes");;
            *) AC_MSG_ERROR([[invalid argument --enable-gprof=$disableval... stopping]]);;
        esac
    ],
    [enable_gprof="no"]
)
AM_CONDITIONAL(ENABLE_GPROF, test x$enable_gprof = xyes)

AC_ARG_ENABLE(
    [werror],
    AC_HELP_STRING(
        [--enable-werror],
        [
            Fail build if warning present]
        ]
    ),
    [
        enable_werror="$enableval"
        case $enableval in
            "no");;
            "yes");;
            *) AC_MSG_ERROR([[invalid argument --enable-werror=$disableval... stopping]]);;
        esac
    ],
    [enable_werror="no"]
)
AM_CONDITIONAL(ENABLE_WERROR, test x$enable_werror = xyes)

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"]
)

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])
    ]
)

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"
            ]
        )
    ]
)

if test "$enable_lto" != "no" ; then
    OLD_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -flto -ffat-lto-objects"

    OLD_LDFLAGS="$LDFLAGS"
    LDFLAGS="$LDFLAGS -flto -ffat-lto-objects"

    AC_MSG_CHECKING([whether $CC supports -flto])
    AC_RUN_IFELSE(
        [AC_LANG_SOURCE([
            int main(int argc, char **argv){
                return 0;
            }
        ])],
        [
            if test -n "$CC"; then
                case `($CC --version) 2>/dev/null` in
                  *gcc*4.9-*| \
                  *gcc*4.9.0*| \
                  *gcc*4.9.1*| \
                  *gcc*4.9.2*)
                    AC_MSG_RESULT([no])
                    CFLAGS="$OLD_CFLAGS"
                    LDFLAGS="$OLD_LDFLAGS"
                      ;;
                  *)
                    AC_MSG_RESULT([yes])
                esac
            fi
        ],
        [
            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"
            ]
        )
    ]
)

if test "$enable_sanitize" != "no" ; then
    AC_CHECK_SANITIZER_FLAG(address)
    # 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

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)
# disabled for now
#AC_CHECK_COMPILER_WFLAG(cast-qual)
AC_CHECK_COMPILER_WFLAG(logical-op)
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(unused)
AC_CHECK_COMPILER_WFLAG(unused-but-set-parameter)
AC_CHECK_COMPILER_WFLAG(unused-but-set-variable)
AC_CHECK_COMPILER_WFLAG(unreachable-code)
AC_CHECK_COMPILER_WFLAG(unused-const-variable=2)
AC_CHECK_COMPILER_WFLAG(unused-function)
AC_CHECK_COMPILER_WFLAG(unused-local-typedefs)
AC_CHECK_COMPILER_WFLAG(unused-macros)
AC_CHECK_COMPILER_WFLAG(unused-parameter)
AC_CHECK_COMPILER_WFLAG(unused-result)
AC_CHECK_COMPILER_WFLAG(unused-value)
AC_CHECK_COMPILER_WFLAG(unused-variable)
#AC_CHECK_COMPILER_WNOFLAG(format-nonliteral)
#AC_CHECK_COMPILER_WNOFLAG(switch)
#AC_CHECK_COMPILER_WNOFLAG(missing-field-initializers)

AC_CHECK_FUNC([strnlen],[CFLAGS="$CFLAGS -DHAVE_STRNLEN"])
AC_CHECK_FUNC([setrlimit],[CLAGS="$CFLAGS -DHAVE_SETRLIMIT"])

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]))

#
# OpenSSL library
#

AC_MSG_CHECKING([OpenSSL library])
dnl Order matters!
if test "$PORTNAME" != "win32"; then
 AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
 FOUND_SSL_LIB="no"
 AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
 AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
 AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
else
 AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
 FOUND_SSL_LIB="no"
 AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
 AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
 AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
fi

AC_OUTPUT(Makefile src/Makefile)