1
dnl This program is free software; you can redistribute it and/or modify
2
dnl it under the terms of the GNU General Public License as published by
3
dnl the Free Software Foundation; either version 2 of the License, or
4
dnl (at your option) any later version.
6
dnl This program is distributed in the hope that it will be useful,
7
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
8
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9
dnl GNU General Public License for more details.
11
dnl You should have received a copy of the GNU General Public License
12
dnl along with this program; if not, write to the Free Software
13
dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
14
dnl MA 02110-1301, USA.
17
AC_INIT([libclamavc++],[devel],[http://bugs.clamav.net])
18
AC_CONFIG_AUX_DIR([config])
19
AC_CONFIG_SRCDIR([llvm/configure])
20
AC_CONFIG_MACRO_DIR([m4])
21
AC_CONFIG_HEADER([clamavcxx-config.h])
23
AM_INIT_AUTOMAKE([1.9 -Wall -Wportability foreign no-define color-tests tar-pax])
24
AM_SILENT_RULES([yes])
26
cxxset=${CXXFLAGS+set}
30
if test "$cxxset" != set; then
31
# don't use the default -O2 -g because -g bloats the C++ binaries too much
36
CXXFLAGS="$CXXFLAGS -include llvm/include/llvm/System/Solaris.h"
37
AC_MSG_NOTICE([Building on Solaris])
42
LT_INIT([disable-static])
43
if test "$GXX" != "yes"; then
44
AC_MSG_ERROR([GNU C++ compiler not found, not building LLVM])
48
GMAKE="$llvm_cv_gnu_make_command"
52
AC_ARG_WITH([system-llvm], AC_HELP_STRING([--with-system-llvm],
53
[Use system llvm instead of built-in, uses full path to llvm-config (default=
54
search /usr/local or /usr if not found in /usr/local)]),
57
llvmconfig="/usr/local/bin/llvm-config"
58
if test ! -x "$llvmconfig"; then
59
llvmconfig="/usr/bin/llvm-config"
60
if test ! -x "$llvmconfig"; then
61
AC_MSG_ERROR([llvm-config cannot be found within defaults])
68
if test ! -x "$llvmconfig"; then
69
AC_MSG_ERROR([llvm-config does not exist at $llvmconfig])
74
if test "x$llvmconfig" != "x"; then
75
llvmver=`$llvmconfig --version`
77
AC_MSG_NOTICE([Using external LLVM])
81
AC_MSG_CHECKING([for supported LLVM version])
82
if test "x$llvmconfig" = "x"; then
83
dnl macro not available in older autotools
84
AC_CONFIG_SUBDIRS([llvm])
85
dnl llvmver=`$srcdir/llvm/configure --version | sed -n 1p | sed 's/llvm configure //'`
90
llvmver_val=`echo "$llvmver" | sed -e 's/svn//g'`
91
llvmver_major=`echo "$llvmver_val" | sed -e 's/\([[0-9]]\).*/\1/'`
92
llvmver_minor=`echo "$llvmver_val" | sed -e 's/[[0-9]]//' | sed -e 's/^\.//' | sed -e 's/\([[0-9]]\).*/\1/'`
93
llvmver_patch=`echo "$llvmver_val" | sed -e 's/[[0-9]]\.[[0-9]]//' | sed -e 's/^\.//' | sed -e 's/\([[0-9]]\).*/\1/'`
94
dnl suffix unused as of LLVM 3.4.1
96
if test "x$llvmver_patch" = "x"; then
100
llvmver_test=${llvmver_major}${llvmver_minor}${llvmver_patch}
101
if test "x$packaged_llvm" = "xyes"; then
102
AC_MSG_RESULT([ok ($llvmver)])
103
elif test $llvmver_test -lt 290; then
104
AC_MSG_RESULT([no ($llvmver)])
105
AC_MSG_ERROR([LLVM >= 2.9 required, but "$llvmver"($llvmver_test) found])
106
elif test $llvmver_test -ge 360; then
107
AC_MSG_RESULT([no ($llvmver)])
108
AC_MSG_ERROR([LLVM < 3.6 required, but "$llvmver"($llvmver_test) found])
110
AC_MSG_RESULT([ok ($llvmver)])
113
dnl aquire the required flags to properly link in external LLVM
114
if test "x$llvmconfig" != "x"; then
115
AC_SUBST(LLVMCONFIG_CXXFLAGS, [`$llvmconfig --cxxflags`])
116
if test $llvmver_test -ge 350; then
117
dnl LLVM 3.5.0 and after splits linker flags into two sets
118
ldflags=`$llvmconfig --ldflags`
119
syslibs=`$llvmconfig --system-libs`
120
AC_SUBST(LLVMCONFIG_LDFLAGS, ["$ldflags $syslibs"])
122
AC_SUBST(LLVMCONFIG_LDFLAGS, [`$llvmconfig --ldflags`])
124
AC_SUBST(LLVMCONFIG_LIBS, [-lLLVM-$llvmver])
125
AC_SUBST(LLVMCONFIG_LIBFILES, [])
126
AC_MSG_NOTICE([CXXFLAGS from llvm-config: $LLVMCONFIG_CXXFLAGS])
127
AC_MSG_NOTICE([LDFLAGS from llvm-config: $LLVMCONFIG_LDFLAGS])
128
AC_MSG_NOTICE([LIBS from llvm-config: $LLVMCONFIG_LIBS])
130
dnl patch does not affect clamav source (yet)
131
llvmver_int=${llvmver_major}${llvmver_minor}
133
AC_SUBST([LLVM_VERSION], [$llvmver_int])
135
AC_ARG_ENABLE([llvm],AC_HELP_STRING([-enable-llvm],
136
[Enable 'llvm' JIT/verifier support @<:@default=auto@:>@]),
137
[enable_llvm=$enableval], [enable_llvm="auto"])
139
AC_ARG_ENABLE(optimized, AC_HELP_STRING([-enable-optimized],
140
[Compile with optimizations enabled (default is YES)]),
141
enable_optimized=$enableval, enable_optimized=default)
142
AM_CONDITIONAL(DEBUG_BUILD,[test "x$enable_optimized" = "xno"])
144
dnl Set configure args for subdir
145
if test "$enable_optimized" = "default"; then
146
ac_configure_args="$ac_configure_args --enable-optimized"
149
dnl Pretend that GNU make is available for LLVM, we don't use LLVM's buildsystem
150
dnl anyway (except for make check)
151
ac_configure_args="$ac_configure_args llvm_cv_gnu_make_command=make"
152
AC_ARG_ENABLE(all-jit-targets, AC_HELP_STRING([-enable-all-jit-targets],
153
[Build all the targets that support JIT for testing (default NO)]),
154
enable_alltargets=$enableval, enable_alltargets=no)
155
if test "$enable_alltargets" = "yes"; then
156
new_args="$ac_configure_args --enable-targets=x86,powerpc --enable-bindings=none --enable-libffi=no --without-llvmgcc --without-llvmgxx"
158
new_args="$ac_configure_args --enable-targets=host-only --enable-bindings=none --enable-libffi=no --without-llvmgcc --without-llvmgxx"
160
ac_configure_args=`echo $new_args | sed -e 's/-Werror //g'`
162
if test "$enable_llvm" = "auto"; then
163
dnl Do some sanity checks, and don't automatically build on platforms
164
dnl that are not supported or have broken compilers.
165
dnl The user can override this by specifying --enable-llvm=yes.
166
AC_MSG_CHECKING([for supported C++ compiler version])
167
gxx_version=`${CXX} -dumpversion` ||
168
AC_MSG_ERROR([Unable to get GNU C++ compiler version])
169
case "${gxx_version}" in
171
AC_MSG_ERROR([C++ compiler too old (${gxx_version})])
174
AC_MSG_ERROR([C++ compiler is buggy])
177
AC_MSG_RESULT([ok (${gxx_version})])
180
AC_MSG_CHECKING([for supported OS])
181
case "$target_cpu" in
182
i?86|amd64|x86_64|powerpc*)
184
darwin*|freebsd*|kfreebsd*|openbsd*|netbsd*|dragonfly*|linux*|solaris*|win32*|mingw*)
185
AC_MSG_RESULT([ok ($target_cpu-$target_os)])
188
AC_MSG_ERROR([OS $target_os is not supported, not building LLVM])
193
AC_MSG_ERROR([CPU support is untested, not building LLVM])
196
AC_MSG_ERROR([Unsupported CPU for JIT: $target_cpu, not building LLVM])
201
dnl bb #1971 - doesn't work with older libstdc++ version at link/runtime
202
AC_MSG_CHECKING([for working libstdc++])
209
// this causes an @GLIBCXX_3.4.9 symbol to be linked in -O2 mode
213
])],[AC_MSG_RESULT([yes])],
214
[AC_MSG_FAILURE([failed])],
220
// this causes an @GLIBCXX_3.4.9 symbol to be linked in -O2 mode
224
])], [AC_MSG_RESULT([yes])],
225
[AC_MSG_FAILURE([failed])]
231
case "$target_cpu" in
240
# FreeBSD is only one which needs something else than -pthread,
241
# according to the logic in ClamAV's main configure.in.
244
THREAD_LIBS="-pthread -lc_r"
255
THREAD_LIBS="-pthread"
257
AC_SUBST([THREAD_LIBS])
259
if test "$enable_alltargets" = "yes"; then
263
if test "$ac_cv_c_bigendian" = "universal"; then
264
AC_MSG_NOTICE([Universal build detected])
268
AC_MSG_NOTICE([Building X86 backend: $build_x86])
269
AC_MSG_NOTICE([Building PPC backend: $build_ppc])
270
AM_CONDITIONAL(BUILD_X86, [test "$build_x86" = "yes"])
271
AM_CONDITIONAL(BUILD_PPC, [test "$build_ppc" = "yes"])
273
AC_MSG_CHECKING([optional compiler flags])
274
CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros])
275
CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers])
276
AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS])
278
AM_CONDITIONAL(BUILD_EXTERNAL_LLVM, [test -n "$llvmconfig"])