mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-13 13:26:01 +03:00
Fix some build issues
Optional dependencies were temporarily marked as mandatory, in order to sort any build problem, later it will be marked as optional again.
This commit is contained in:
parent
fd8578351d
commit
e94226f1d8
171
build/ax_cxx_compile_stdcxx_11.m4
Normal file
171
build/ax_cxx_compile_stdcxx_11.m4
Normal file
@ -0,0 +1,171 @@
|
||||
# ============================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
|
||||
# ============================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Check for baseline language coverage in the compiler for the C++11
|
||||
# standard; if necessary, add switches to CXXFLAGS to enable support.
|
||||
#
|
||||
# The first argument, if specified, indicates whether you insist on an
|
||||
# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
|
||||
# -std=c++11). If neither is specified, you get whatever works, with
|
||||
# preference for an extended mode.
|
||||
#
|
||||
# The second argument, if specified 'mandatory' or if left unspecified,
|
||||
# indicates that baseline C++11 support is required and that the macro
|
||||
# should error out if no mode with that support is found. If specified
|
||||
# 'optional', then configuration proceeds regardless, after defining
|
||||
# HAVE_CXX11 if and only if a supporting mode is found.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
|
||||
# Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
|
||||
# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
|
||||
# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
|
||||
# Copyright (c) 2015 Paul Norman <penorman@mac.com>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 12
|
||||
|
||||
m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[
|
||||
template <typename T>
|
||||
struct check
|
||||
{
|
||||
static_assert(sizeof(int) <= sizeof(T), "not big enough");
|
||||
};
|
||||
|
||||
struct Base {
|
||||
virtual void f() {}
|
||||
};
|
||||
struct Child : public Base {
|
||||
virtual void f() override {}
|
||||
};
|
||||
|
||||
typedef check<check<bool>> right_angle_brackets;
|
||||
|
||||
int a;
|
||||
decltype(a) b;
|
||||
|
||||
typedef check<int> check_type;
|
||||
check_type c;
|
||||
check_type&& cr = static_cast<check_type&&>(c);
|
||||
|
||||
auto d = a;
|
||||
auto l = [](){};
|
||||
// Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable]
|
||||
struct use_l { use_l() { l(); } };
|
||||
|
||||
// http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
|
||||
// Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this
|
||||
namespace test_template_alias_sfinae {
|
||||
struct foo {};
|
||||
|
||||
template<typename T>
|
||||
using member = typename T::member_type;
|
||||
|
||||
template<typename T>
|
||||
void func(...) {}
|
||||
|
||||
template<typename T>
|
||||
void func(member<T>*) {}
|
||||
|
||||
void test();
|
||||
|
||||
void test() {
|
||||
func<foo>(0);
|
||||
}
|
||||
}
|
||||
|
||||
// Check for C++11 attribute support
|
||||
void noret [[noreturn]] () { throw 0; }
|
||||
]])
|
||||
|
||||
AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl
|
||||
m4_if([$1], [], [],
|
||||
[$1], [ext], [],
|
||||
[$1], [noext], [],
|
||||
[m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
|
||||
m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
|
||||
[$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
|
||||
[$2], [optional], [ax_cxx_compile_cxx11_required=false],
|
||||
[m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])
|
||||
AC_LANG_PUSH([C++])dnl
|
||||
ac_success=no
|
||||
AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
|
||||
ax_cv_cxx_compile_cxx11,
|
||||
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
|
||||
[ax_cv_cxx_compile_cxx11=yes],
|
||||
[ax_cv_cxx_compile_cxx11=no])])
|
||||
if test x$ax_cv_cxx_compile_cxx11 = xyes; then
|
||||
ac_success=yes
|
||||
fi
|
||||
|
||||
m4_if([$1], [noext], [], [dnl
|
||||
if test x$ac_success = xno; then
|
||||
for switch in -std=gnu++11 -std=gnu++0x; do
|
||||
cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
|
||||
AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
|
||||
$cachevar,
|
||||
[ac_save_CXXFLAGS="$CXXFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $switch"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
|
||||
[eval $cachevar=yes],
|
||||
[eval $cachevar=no])
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"])
|
||||
if eval test x\$$cachevar = xyes; then
|
||||
CXXFLAGS="$CXXFLAGS $switch"
|
||||
ac_success=yes
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi])
|
||||
|
||||
m4_if([$1], [ext], [], [dnl
|
||||
if test x$ac_success = xno; then
|
||||
dnl HP's aCC needs +std=c++11 according to:
|
||||
dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
|
||||
for switch in -std=c++11 -std=c++0x +std=c++11; do
|
||||
cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
|
||||
AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
|
||||
$cachevar,
|
||||
[ac_save_CXXFLAGS="$CXXFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $switch"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
|
||||
[eval $cachevar=yes],
|
||||
[eval $cachevar=no])
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"])
|
||||
if eval test x\$$cachevar = xyes; then
|
||||
CXXFLAGS="$CXXFLAGS $switch"
|
||||
ac_success=yes
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi])
|
||||
AC_LANG_POP([C++])
|
||||
if test x$ax_cxx_compile_cxx11_required = xtrue; then
|
||||
if test x$ac_success = xno; then
|
||||
AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
|
||||
fi
|
||||
else
|
||||
if test x$ac_success = xno; then
|
||||
HAVE_CXX11=0
|
||||
AC_MSG_NOTICE([No compiler with C++11 support was found])
|
||||
else
|
||||
HAVE_CXX11=1
|
||||
AC_DEFINE(HAVE_CXX11,1,
|
||||
[define if the compiler supports basic C++11 syntax])
|
||||
fi
|
||||
|
||||
AC_SUBST(HAVE_CXX11)
|
||||
fi
|
||||
])
|
@ -102,6 +102,7 @@ AC_SUBST(CURL_USES_GNUTLS)
|
||||
|
||||
if test -z "${CURL_VERSION}"; then
|
||||
AC_MSG_NOTICE([*** curl library not found.])
|
||||
ifelse([$2], , AC_MSG_ERROR([curl library is required]), $2)
|
||||
else
|
||||
AC_MSG_NOTICE([using curl v${CURL_VERSION}])
|
||||
ifelse([$1], , , $1)
|
||||
|
@ -19,7 +19,7 @@ GEOIP_CPPFLAGS=""
|
||||
GEOIP_LDADD=""
|
||||
GEOIP_LDFLAGS=""
|
||||
GEOIP_CONFIG=${PKG_CONFIG}
|
||||
GEOIP_PKGNAMES="geoip2 geoip"
|
||||
GEOIP_PKGNAMES="geoip2 geoip GeoIP"
|
||||
GEOIP_SONAMES="so la sl dll dylib"
|
||||
|
||||
AC_ARG_WITH(
|
||||
@ -29,7 +29,7 @@ AC_ARG_WITH(
|
||||
|
||||
AS_CASE(["${with_geoip}"],
|
||||
[no], [test_paths=],
|
||||
[yes], [test_paths="/usr/local/libgeoip /usr/local/geoip /usr/local /opt/libgeoip /opt/geoip /opt /usr /opt/local/include /opt/local"],
|
||||
[yes], [test_paths="/usr/local/libgeoip /usr/local/geoip /usr/local /opt/libgeoip /opt/geoip /opt /usr /opt/local/include /opt/local /usr/lib /usr/local/lib /usr/lib64"],
|
||||
[test_paths="${with_geoip}"])
|
||||
|
||||
AS_IF([test "x${test_paths}" != "x"], [
|
||||
@ -43,7 +43,7 @@ for x in ${test_paths}; do
|
||||
|
||||
dnl # Try known config script names/locations
|
||||
for y in $GEOIP_CONFIG; do
|
||||
if test -e "${x}/bin/${y}"; then
|
||||
if test -e "${x}/bin/${y}"; then
|
||||
GEOIP_CONFIG="${x}/bin/${y}"
|
||||
geoip_config="${GEOIP_CONFIG}"
|
||||
break
|
||||
@ -86,14 +86,21 @@ else
|
||||
AC_MSG_CHECKING([for geoip install])
|
||||
for x in ${test_paths}; do
|
||||
for y in ${GEOIP_SONAMES}; do
|
||||
if test -e "${x}/libgeoip.${y}"; then
|
||||
geoip_lib_path="${x}/"
|
||||
geoip_lib_name="geoip"
|
||||
break
|
||||
else
|
||||
geoip_lib_path=""
|
||||
geoip_lib_name=""
|
||||
fi
|
||||
for z in ${GEOIP_PKGNAMES}; do
|
||||
if test -e "${x}/${z}.${y}"; then
|
||||
geoip_lib_path="${x}/"
|
||||
geoip_lib_name="${z}"
|
||||
break
|
||||
fi
|
||||
if test -e "${x}/lib${z}.${y}"; then
|
||||
geoip_lib_path="${x}/"
|
||||
geoip_lib_name="${z}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test -n "$geoip_lib_path"; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test -n "$geoip_lib_path"; then
|
||||
break
|
||||
@ -146,7 +153,7 @@ AC_SUBST(GEOIP_LDADD)
|
||||
AC_SUBST(GEOIP_LIBS)
|
||||
AC_SUBST(GEOIP_LDFLAGS)
|
||||
if test -z "${GEOIP_VERSION}"; then
|
||||
ifelse([$2], , AC_MSG_NOTICE([optional geoip library not found]), $2)
|
||||
ifelse([$2], , AC_MSG_ERROR([*** geoip library not found]), $2)
|
||||
else
|
||||
AC_MSG_NOTICE([using geoip v${GEOIP_VERSION}])
|
||||
GEOIP_CFLAGS="-DWITH_GEOIP ${GEOIP_CFLAGS}"
|
||||
|
@ -29,7 +29,7 @@ AC_ARG_WITH(
|
||||
|
||||
AS_CASE(["${with_yajl}"],
|
||||
[no], [test_paths=],
|
||||
[yes], [test_paths="/usr/local/libyajl /usr/local/yajl /usr/local /opt/libyajl /opt/yajl /opt /usr"],
|
||||
[yes], [test_paths="/usr/lib /usr/local/lib /usr/local/libyajl /usr/local/yajl /usr/local /opt/libyajl /opt/yajl /opt /usr"],
|
||||
[test_paths="${with_yajl}"])
|
||||
|
||||
AS_IF([test "x${test_paths}" != "x"], [
|
||||
@ -146,7 +146,7 @@ AC_SUBST(YAJL_LDADD)
|
||||
AC_SUBST(YAJL_LIBS)
|
||||
AC_SUBST(YAJL_LDFLAGS)
|
||||
if test -z "${YAJL_VERSION}"; then
|
||||
ifelse([$2], , AC_MSG_NOTICE([optional yajl library not found]), $2)
|
||||
ifelse([$2], , AC_MSG_ERROR([*** yajl library not found]), $2)
|
||||
else
|
||||
AC_MSG_NOTICE([using yajl v${YAJL_VERSION}])
|
||||
YAJL_CFLAGS="-DWITH_YAJL ${YAJL_CFLAGS}"
|
||||
|
28
configure.ac
28
configure.ac
@ -34,6 +34,29 @@ AC_PROG_YACC
|
||||
AC_PROG_LEX
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
|
||||
AC_PATH_PROG([FLEX], [flex])
|
||||
test "x$FLEX" = "x" && AC_MSG_ERROR([flex is needed to build ModSecurity])
|
||||
|
||||
AC_PATH_PROG([BISON], [bison])
|
||||
test "x$BISON" = "x" && AC_MSG_ERROR([bison is needed to build ModSecurity])
|
||||
|
||||
AC_PATH_PROG([YACC_INST], $YACC)
|
||||
if test ! -f "$srcdir/gram.c"; then
|
||||
if test -z "$YACC_INST"; then
|
||||
AC_MSG_ERROR([yacc not found - unable to compile ModSecurity])
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Check if the compiler is c++11 compatible.
|
||||
AX_CXX_COMPILE_STDCXX_11(,mandatory)
|
||||
|
||||
# Check for libinjection
|
||||
AC_CHECK_FILE("others/libinjection/src/libinjection_html5.c", HAS_LIBINJECTION=1)
|
||||
|
||||
test "x$HAS_LIBINJECTION" = "x" && AC_MSG_ERROR([libinjection is needed to build ModSecurity, make sure you have downloaded all the git submodules])
|
||||
|
||||
# Check for yajl
|
||||
PROG_YAJL
|
||||
|
||||
@ -49,9 +72,7 @@ AM_CONDITIONAL([GEOIP_VERSION], [test "$GEOIP_VERSION" != ""])
|
||||
#
|
||||
CHECK_CURL
|
||||
|
||||
if test -z "${CURL_VERSION}"; then
|
||||
AC_MSG_NOTICE([NOTE: curl was not found. SecRemoteRules support was disabled.])
|
||||
else
|
||||
if ! test -z "${CURL_VERSION}"; then
|
||||
AC_DEFINE([MSC_WITH_CURL], [1], [Define if libcurl is available])
|
||||
fi
|
||||
|
||||
@ -162,4 +183,3 @@ DX_INIT_DOXYGEN([ModSecurity],[doc/doxygen.cfg])
|
||||
# Generate the files.
|
||||
AC_OUTPUT
|
||||
|
||||
|
||||
|
@ -201,6 +201,7 @@ libmodsecurity_la_CPPFLAGS = \
|
||||
$(PCRE_CPPFLAGS)
|
||||
|
||||
libmodsecurity_la_LIBADD = \
|
||||
-lrt \
|
||||
$(CURL_LDADD) \
|
||||
$(GEOIP_LDADD) \
|
||||
@LEXLIB@ \
|
||||
|
@ -24,6 +24,7 @@ unit_tests_SOURCES = \
|
||||
unit/unit_test.cc
|
||||
|
||||
unit_tests_LDADD = \
|
||||
-lrt \
|
||||
$(top_builddir)/src/.libs/libmodsecurity.a \
|
||||
$(CURL_LDADD) \
|
||||
$(GEOIP_LDADD) \
|
||||
@ -51,6 +52,7 @@ regression_tests_SOURCES = \
|
||||
regression/custom_debug_log.cc
|
||||
|
||||
regression_tests_LDADD = \
|
||||
-lrt \
|
||||
$(top_builddir)/src/.libs/libmodsecurity.a \
|
||||
$(CURL_LDADD) \
|
||||
$(GEOIP_LDADD) \
|
||||
|
@ -6,6 +6,7 @@ benchmark_SOURCES = \
|
||||
benchmark.cc
|
||||
|
||||
benchmark_LDADD = \
|
||||
-lrt \
|
||||
$(top_builddir)/src/.libs/libmodsecurity.a \
|
||||
$(CURL_LDADD) \
|
||||
$(GEOIP_LDADD) \
|
||||
|
Loading…
x
Reference in New Issue
Block a user