aria2/configure.ac
Tatsuhiro Tsujikawa 82ba003209 Add basic ssh/sftp code to SocketCore and introduce SSHSession
We use libssh2 to implement sftp feature.  SSHSession is closely
designed to TLSSession, but it differs in several aspects.  In this
code, we only implements read part of sftp, since aria2 won't offer
uploading feature.  Adding SSH/sftp to SocketCore is a bit bloat.  But
by doing this we can reuse DownloadCommand, without mostly no
modification.  We can just create SSHDownloadCommand by inheriting it,
just like existing ftp.
2015-05-10 00:00:23 +09:00

1096 lines
34 KiB
Plaintext

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
#
AC_PREREQ([2.67])
AC_INIT([aria2],[1.18.10],[https://github.com/tatsuhiro-t/aria2/issues],[aria2],[http://aria2.sourceforge.net/])
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_USE_SYSTEM_EXTENSIONS
LT_PREREQ([2.2.6])
LT_INIT([disable-static])
dnl See versioning rule:
dnl http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
AC_SUBST(LT_CURRENT, 0)
AC_SUBST(LT_REVISION, 0)
AC_SUBST(LT_AGE, 0)
AC_CONFIG_MACRO_DIR([m4])
AM_PATH_CPPUNIT(1.10.2)
AC_CONFIG_SRCDIR([src/a2io.h])
AC_CONFIG_HEADERS([config.h])
case "$host" in
*mingw*)
win_build=yes
LIBS="$LIBS -lws2_32 -lwsock32 -lgdi32 -lwinmm -liphlpapi -lpsapi"
# C++ headers defines __USE_MINGW_ANSI_STDIO to 1 unconditionally.
# We have to use it as well nonetheless.
CPPFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $CPPFLAGS"
# Build with ASLR (dynamicbase) and NX compatiblity (nxcompat)
# Enable pie once upstream/binutils gets fixed to produce correct binaries with it.
LDFLAGS="$LDFLAGS -Wl,--dynamicbase -Wl,--nxcompat"
;;
esac
AC_DEFINE_UNQUOTED([BUILD], ["$build"], [Define build-type])
AC_DEFINE_UNQUOTED([HOST], ["$host"], [Define build-type])
AC_DEFINE_UNQUOTED([TARGET], ["$target"], [Define target-type])
# Checks for arguments.
ARIA2_ARG_WITH([libuv])
ARIA2_ARG_WITHOUT([appletls])
ARIA2_ARG_WITHOUT([wintls])
ARIA2_ARG_WITHOUT([gnutls])
ARIA2_ARG_WITHOUT([libnettle])
ARIA2_ARG_WITHOUT([libgmp])
ARIA2_ARG_WITHOUT([libgcrypt])
ARIA2_ARG_WITHOUT([openssl])
ARIA2_ARG_WITHOUT([sqlite3])
ARIA2_ARG_WITHOUT([libxml2])
ARIA2_ARG_WITHOUT([libexpat])
ARIA2_ARG_WITHOUT([libcares])
ARIA2_ARG_WITHOUT([libz])
ARIA2_ARG_WITH([tcmalloc])
ARIA2_ARG_WITH([jemalloc])
ARIA2_ARG_WITHOUT([libssh2])
ARIA2_ARG_DISABLE([ssl])
ARIA2_ARG_DISABLE([bittorrent])
ARIA2_ARG_DISABLE([metalink])
ARIA2_ARG_DISABLE([websocket])
ARIA2_ARG_DISABLE([epoll])
ARIA2_ARG_ENABLE([libaria2])
AC_ARG_WITH([ca-bundle],
AS_HELP_STRING([--with-ca-bundle=FILE],[Use FILE as default CA bundle.]),
[AC_DEFINE_UNQUOTED([CA_BUNDLE], ["$withval"], [Define to choose default CA bundle.])
ca_bundle=$withval
], [])
AC_ARG_WITH([disk-cache],
AS_HELP_STRING([--with-disk-cache=SIZE],[Use SIZE as the default disk-cache size.]),
[AC_DEFINE_UNQUOTED([DEFAULT_DISK_CACHE], ["$withval"], [Define to choose default disk-cache size])],
[])
AC_ARG_WITH([bashcompletiondir],
AS_HELP_STRING([--with-bashcompletiondir=DIR],
[Directory to install bash_completion file]),
[bashcompletiondir=$withval], [bashcompletiondir=$docdir/bash_completion])
AC_ARG_VAR([ARIA2_STATIC], [Set 'yes' to build a statically linked aria2])
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_MKDIR_P
AC_PROG_YACC
AM_PROG_AS
# Speed GCC compilation up.
if test "$GCC" = yes; then
CFLAGS="$CFLAGS -pipe"
fi
if test "$GXX" = yes; then
CXXFLAGS="$CXXFLAGS -pipe"
fi
AC_CHECK_TOOL([AR], [ar], [:])
if test "x$AR" = "x:"; then
AC_MSG_FAILURE([ar is not found in the system.])
fi
AC_SUBST([AR])
AC_PATH_PROG([A2X], [a2x])
AC_SUBST([A2X])
AM_CONDITIONAL([HAVE_A2X], [ test "x$A2X" != "x" ])
AC_PATH_PROG([ASCIIDOC], [asciidoc])
AC_SUBST([ASCIIDOC])
AM_CONDITIONAL([HAVE_ASCIIDOC], [ test "x$ASCIIDOC" != "x" ])
AC_PATH_PROGS([SPHINXBUILD], [sphinx-build])
AC_SUBST([SPHINXBUILD])
AM_CONDITIONAL([HAVE_SPHINXBUILD], [ test "x$SPHINXBUILD" != "x" ])
AC_PATH_PROGS([RST2HTML], [rst2html.py rst2html])
AC_SUBST([RST2HTML])
AM_CONDITIONAL([HAVE_RST2HTML], [ test "x$RST2HTML" != "x" ])
# Setting language choice
AC_LANG([C++])
# Check pkg-config is available
PKG_PROG_PKG_CONFIG([0.20])
# Check C++ compiler supports C++0x/C++11 feature
AX_CXX_COMPILE_STDCXX_11([noext], [mandatory])
# i686-w64-mingw32-g++ 4.6 does not support override keyword. For
# those compilers, define CXX11_OVERRIDE to empty string. Otherwise
# define it as override. Use CXX11_OVERRIDE instead of override.
AC_MSG_CHECKING([whether the C++ compiler supports `override` keyword])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
struct Base {
virtual void f() = 0;
};
struct Derived : Base {
virtual void f() override {}
};
]],
[[
Derived x;
]])],
[cxx11_override=override
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])
AC_DEFINE_UNQUOTED([CXX11_OVERRIDE], [$cxx11_override],
[Define `override` keyword if the compiler supports it])
# Check static build is requested
if test "x$ARIA2_STATIC" = "xyes"; then
case "$host" in
i686*mingw*)
dnl Define _USE_32BIT_TIME_T because 32bit library of MinGW-w64
dnl does not implement many 64bit version functions.
CPPFLAGS="-D_USE_32BIT_TIME_T $CPPFLAGS"
;;
esac
# Make pkg-config produce static linking variables
PKG_CONFIG="$PKG_CONFIG --static"
else
dnl Make variable empty to avoid confusion
ARIA2_STATIC=
fi
# Checks for libraries.
# Check availability of libz
if test "x$with_libz" = "xyes"; then
PKG_CHECK_MODULES([ZLIB], [zlib >= 1.2.3], [have_zlib=yes], [have_zlib=no])
if test "x$have_zlib" = "xyes"; then
LIBS="$ZLIB_LIBS $LIBS"
CPPFLAGS="$ZLIB_CFLAGS $CPPFLAGS"
else
AC_MSG_WARN([$ZLIB_PKG_ERRORS])
AC_CHECK_LIB([z], [zlibVersion], [have_zlib=yes], [have_zlib=no])
if test "x$have_zlib" = "xyes"; then
LIBS="-lz $LIBS"
elif test "x$with_libz_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libz])
fi
fi
if test "x$have_zlib" = "xyes"; then
AC_DEFINE([HAVE_ZLIB], [1], [Define to 1 if you have zlib.])
# Android NDK arch-mips contains gzbuffer symbol but it is missing
# in zlib.h
AC_CHECK_DECL([gzbuffer], [have_decl_gzbuffer=yes], [],
[[#include <zlib.h>]])
if test "x$have_decl_gzbuffer" = "xyes"; then
AC_CHECK_FUNC([gzbuffer])
fi
AC_CHECK_FUNCS([gzsetparams])
fi
fi
if test "x$with_libuv" = "xyes"; then
case "$host" in
*mingw*|*msvc*)
old_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600"
AC_SEARCH_LIBS([uv_poll_init_socket], [uv], [
AC_CHECK_HEADER([uv.h], [have_libuv=yes], [have_libuv=no])
break;
], [have_libuv=no])
if test "x$have_libuv" != "xyes"; then
CPPFLAGS=$old_CPPFLAGS
fi
;;
*darwin*)
old_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -framework Foundation -framework CoreServices -framework ApplicationServices"
old_LIBS=$LIBS
LIBS="$LIBS -lm"
AC_SEARCH_LIBS([uv_poll_init_socket], [uv], [
AC_CHECK_HEADER([uv.h], [have_libuv=yes], [have_libuv=no])
break;
], [have_libuv=no])
if test "x$have_libuv" != "xyes"; then
LDFLAGS=$old_LDFLAGS
LIBS=$old_LIBS
fi
;;
*)
dnl Yeah, sucks that luv does not bring a pkg-config or config-tool
AC_MSG_CHECKING([for libuv])
for combo in "" "-lrt" "-ldl -lrt" "-ldl -lrt -lpthread" "-lkvm"; do
old_LIBS=$LIBS
LIBS="-luv $combo $LIBS -lm"
AC_LINK_IFELSE([AC_LANG_SOURCE([
extern "C" int uv_poll_init_socket(void);
int main() { return uv_poll_init_socket(); }
])], [
AC_MSG_RESULT(-luv $combo -lm)
AC_CHECK_HEADER([uv.h], [have_libuv=yes], [have_libuv=no])
break;
], [have_libuv=no])
if test "x$have_libuv" = "xyes"; then
break;
else
LIBS=$old_LIBS
fi
done
if test "x$have_libuv" != "xyes"; then
AC_MSG_RESULT("no")
fi
;;
esac
if test "x$have_libuv" = "xyes"; then
AC_DEFINE([HAVE_LIBUV], [1], [Define to 1 if you have libuv.])
AC_CHECK_FUNCS([uv_last_error])
elif test "x$with_libuv_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libuv])
fi
fi
AM_CONDITIONAL([HAVE_LIBUV], [test "x$have_libuv" = "xyes"])
if test "x$with_libxml2" = "xyes"; then
AM_PATH_XML2([2.6.24], [have_libxml2=yes])
if test "x$have_libxml2" = "xyes"; then
AC_DEFINE([HAVE_LIBXML2], [1], [Define to 1 if you have libxml2.])
LIBS="$XML_LIBS $LIBS"
CPPFLAGS="$XML_CPPFLAGS $CPPFLAGS"
elif test "x$with_libxml2_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libxml2])
fi
fi
if test "x$with_libexpat" = "xyes" && test "x$have_libxml2" != "xyes"; then
AM_PATH_LIBEXPAT
if test "x$have_libexpat" = "xyes"; then
LIBS="$EXPAT_LIBS $LIBS"
CPPFLAGS="$EXPAT_CFLAGS $CPPFLAGS"
elif test "x$with_libexpat_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libexpat])
fi
fi
if test "x$with_sqlite3" = "xyes"; then
PKG_CHECK_MODULES([SQLITE3],[sqlite3],[have_sqlite3=yes],[have_sqlite3=no])
if test "x$have_sqlite3" = "xyes"; then
AC_DEFINE([HAVE_SQLITE3], [1], [Define to 1 if you have sqlite3.])
LIBS="$SQLITE3_LIBS $LIBS"
CPPFLAGS="$SQLITE3_CFLAGS $CPPFLAGS"
AC_CHECK_FUNCS([sqlite3_open_v2])
else
AC_MSG_WARN([$SQLITE3_PKG_ERRORS])
if test "x$with_sqlite3_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([sqlite3])
fi
fi
fi
if test "x$with_libssh2" = "xyes"; then
PKG_CHECK_MODULES([LIBSSH2], [libssh2], [have_libssh2=yes], [have_libssh2=no])
if test "x$have_libssh2" = "xyes"; then
AC_DEFINE([HAVE_LIBSSH2], [1], [Define to 1 if you have libssh2.])
LIBS="$LIBSSH2_LIBS $LIBS"
CPPFLAGS="$LIBSSH2_CFLAGS $CPPFLAGS"
else
AC_MSG_WARN([$LIBSSH2_PKG_ERRORS])
if test "x$with_libssh2_requested" = "yes"; then
ARIA2_DEP_NOT_MET([libssh2])
fi
fi
fi
case "$host" in
*darwin*)
have_osx="yes"
;;
*mingw*)
AC_CHECK_HEADERS([windows.h \
winsock2.h \
ws2tcpip.h \
mmsystem.h \
io.h \
iphlpapi.h\
winioctl.h \
share.h], [], [],
[[
#ifdef HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
#endif
#ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
#endif
#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
]])
;;
esac
if test "x$enable_ssl" != "xyes"; then
with_appletls=no
with_wintls=no
with_libnettle=no
with_libgcrypt=no
with_gnutls=no
with_openssl=no
fi
if test "x$with_appletls" = "xyes"; then
AC_MSG_CHECKING([whether to enable Mac OS X native SSL/TLS])
if test "x$have_osx" = "xyes"; then
AC_DEFINE([HAVE_APPLETLS], [1], [Define to 1 if you have Apple TLS])
LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security"
have_appletls="yes"
have_ssl=yes
have_nativetls=yes
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
if test "x$with_appletls_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([appletls])
fi
fi
fi
if test "x$with_wintls" = "xyes"; then
AC_HAVE_LIBRARY([crypt32],[have_wintls_libs=yes],[have_wintls_libs=no])
AC_HAVE_LIBRARY([secur32],[have_wintls_libs=$have_wintls_libs],[have_wintls_libs=no])
AC_HAVE_LIBRARY([advapi32],[have_wintls_libs=$have_wintls_libs],[have_wintls_libs=no])
AC_CHECK_HEADER([wincrypt.h], [have_wintls_headers=yes], [have_wintls_headers=no], [[
#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
]])
AC_CHECK_HEADER([security.h], [have_wintls_headers=$have_wintls_headers], [have_wintls_headers=no], [[
#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
#ifndef SECURITY_WIN32
#define SECURITY_WIN32 1
#endif
]])
if test "x$have_wintls_libs" = "xyes" &&
test "x$have_wintls_headers" = "xyes"; then
AC_DEFINE([SECURITY_WIN32], [1], [Use security.h in WIN32 mode])
LIBS="$LIBS -lcrypt32 -lsecur32 -ladvapi32"
have_wintls=yes
have_ssl=yes
have_nativetls=yes
else
have_wintls=no
fi
if test "x$have_wintls" != "xyes"; then
if test "x$with_wintls_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([wintls])
fi
fi
fi
if test "x$with_gnutls" = "xyes" && test "x$have_ssl" != "xyes"; then
# gnutls >= 2.8 doesn't have libgnutls-config anymore. We require
# 2.2.0 because we use gnutls_priority_set_direct()
PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.2.0],
[have_libgnutls=yes], [have_libgnutls=no])
if test "x$have_libgnutls" = "xyes"; then
have_ssl=yes
AC_DEFINE([HAVE_LIBGNUTLS], [1], [Define to 1 if you have libgnutls.])
LIBS="$LIBGNUTLS_LIBS $LIBS"
CPPFLAGS="$LIBGNUTLS_CFLAGS $CPPFLAGS"
AC_CHECK_FUNCS([gnutls_certificate_set_x509_system_trust])
else
AC_MSG_WARN([$LIBGNUTLS_PKG_ERRORS])
if test "x$with_gnutls_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([gnutls])
fi
fi
fi
if test "x$with_openssl" = "xyes" && test "x$have_ssl" != "xyes"; then
PKG_CHECK_MODULES([OPENSSL], [openssl >= 0.9.8],
[have_openssl=yes], [have_openssl=no])
if test "x$have_openssl" = "xyes"; then
have_ssl=yes
AC_DEFINE([HAVE_OPENSSL], [1], [Define to 1 if you have openssl.])
LIBS="$OPENSSL_LIBS $LIBS"
CPPFLAGS="$OPENSSL_CFLAGS $CPPFLAGS"
AC_CHECK_FUNCS([EVP_DigestInit_ex], [have_digestinit_ex=yes])
if test "x$have_digestinit_ex" = "x"; then
AC_DEFINE([HAVE_OLD_OPENSSL], [1], [Define to 1 if you have old openssl.])
fi
AC_CHECK_FUNCS([EVP_sha224])
AC_CHECK_FUNCS([EVP_sha256])
AC_CHECK_FUNCS([EVP_sha384])
AC_CHECK_FUNCS([EVP_sha512])
else
AC_MSG_WARN([$OPENSSL_PKG_ERRORS])
if test "x$with_openssl_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([openssl])
fi
fi
fi
if test "x$have_openssl" != "xyes"; then
if test "x$with_libnettle" = "xyes" &&
test "x$have_nativetls" != "xyes"; then
AC_SEARCH_LIBS([nettle_sha1_init], [nettle],
[have_libnettle=yes], [have_libnettle=no])
if test "x$have_libnettle" = "xyes"; then
AC_DEFINE([HAVE_LIBNETTLE], [1], [Define to 1 if you have libnettle.])
fi
fi
if test "x$with_libgmp" = "xyes" &&
(test "x$have_libnettle" = "xyes" ||
test "x$have_nativetls" = "xyes") &&
test "x$enable_bittorrent" = "xyes"; then
AC_SEARCH_LIBS([__gmpz_init], [gmp], [have_libgmp=yes], [have_libgmp=no])
if test "x$have_libgmp" = "xyes"; then
AC_DEFINE([HAVE_LIBGMP], [1], [Define to 1 if you have libgmp.])
AC_CHECK_FUNCS([__gmpz_powm_sec], [have_mpz_powm_sec=yes])
if test "x$have_mpz_powm_sec" = "xyes"; then
AC_DEFINE([HAVE_GMP_SEC], [1], [Define to 1 if you have a GMP with sec functions.])
fi
else
AC_MSG_WARN([libgmp not found])
if test "x$with_libgmp_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libgmp])
fi
fi
fi
if test "x$with_libgcrypt" = "xyes" &&
test "x$have_nativetls" != "xyes" &&
test "x$have_libnettle" != "xyes"; then
AM_PATH_LIBGCRYPT([1.2.4], [have_libgcrypt=yes])
if test "x$have_libgcrypt" = "xyes"; then
AC_DEFINE([HAVE_LIBGCRYPT], [1], [Define to 1 if you have libgcrypt.])
LIBS="$LIBGCRYPT_LIBS $LIBS"
CPPFLAGS="$LIBGCRYPT_CFLAGS $CPPFLAGS"
fi
fi
fi
if test "x$with_libcares" = "xyes"; then
PKG_CHECK_MODULES([LIBCARES], [libcares >= 1.7.0], [have_libcares=yes],
[have_libcares=no])
if test "x$have_libcares" = "xyes"; then
AC_DEFINE([HAVE_LIBCARES], [1], [Define to 1 if you have libcares.])
LIBS="$LIBCARES_LIBS $LIBS"
CPPFLAGS="$LIBCARES_CFLAGS $CPPFLAGS"
AC_CHECK_TYPES([ares_addr_node], [], [], [[#include <ares.h>]])
AC_CHECK_FUNCS([ares_set_servers])
if test "x$ARIA2_STATIC" = "xyes"; then
CPPFLAGS="-DCARES_STATICLIB $CPPFLAGS"
fi
else
AC_MSG_WARN([$LIBCARES_PKG_ERRORS])
if test "x$with_libcares_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libcares])
fi
fi
fi
use_md=""
if test "x$have_appletls" = "xyes"; then
use_md="apple"
AC_DEFINE([USE_APPLE_MD], [1], [What message digest implementation to use])
else
if test "x$have_libnettle" = "xyes"; then
AC_DEFINE([USE_LIBNETTLE_MD], [1], [What message digest implementation to use])
use_md="libnettle"
else
if test "x$have_libgcrypt" = "xyes"; then
AC_DEFINE([USE_LIBGCRYPT_MD], [1], [What message digest implementation to use])
use_md="libgcrypt"
else
if test "x$have_openssl" = "xyes"; then
AC_DEFINE([USE_OPENSSL_MD], [1], [What message digest implementation to use])
use_md="openssl"
else
AC_DEFINE([USE_INTERNAL_MD], [1], [What message digest implementation to use])
use_md="internal"
fi
fi
fi
fi
# Define variables based on the result of the checks for libraries.
if test "x$have_ssl" = "xyes"; then
AC_DEFINE([ENABLE_SSL], [1], [Define to 1 if ssl support is enabled.])
AM_CONDITIONAL([ENABLE_SSL], true)
else
have_ssl="no"
AM_CONDITIONAL([ENABLE_SSL], false)
fi
AM_CONDITIONAL([HAVE_OSX], [ test "x$have_osx" = "xyes" ])
AM_CONDITIONAL([HAVE_APPLETLS], [ test "x$have_appletls" = "xyes" ])
AM_CONDITIONAL([HAVE_WINTLS], [ test "x$have_wintls" = "xyes" ])
AM_CONDITIONAL([USE_APPLE_MD], [ test "x$use_md" = "xapple" ])
AM_CONDITIONAL([USE_WINDOWS_MD], [ test "x$use_md" = "xwindows" ])
AM_CONDITIONAL([HAVE_LIBGNUTLS], [ test "x$have_libgnutls" = "xyes" ])
AM_CONDITIONAL([HAVE_LIBNETTLE], [ test "x$have_libnettle" = "xyes" ])
AM_CONDITIONAL([USE_LIBNETTLE_MD], [ test "x$use_md" = "xlibnettle"])
AM_CONDITIONAL([HAVE_LIBGMP], [ test "x$have_libgmp" = "xyes" ])
AM_CONDITIONAL([HAVE_LIBGCRYPT], [ test "x$have_libgcrypt" = "xyes" ])
AM_CONDITIONAL([USE_LIBGCRYPT_MD], [ test "x$use_md" = "xlibgcrypt"])
AM_CONDITIONAL([HAVE_OPENSSL], [ test "x$have_openssl" = "xyes" ])
AM_CONDITIONAL([USE_OPENSSL_MD], [ test "x$use_md" = "xopenssl"])
AM_CONDITIONAL([USE_INTERNAL_MD], [ test "x$use_md" = "xinternal"])
if test "x$have_libgmp" = "xyes" ||
test "x$have_libgcrypt" = "xyes" ||
test "x$have_openssl" = "xyes"; then
AM_CONDITIONAL([USE_INTERNAL_BIGNUM], false)
else
AC_DEFINE([USE_INTERNAL_BIGNUM], [1], [Define to 1 if internal BIGNUM support is enabled.])
AM_CONDITIONAL([USE_INTERNAL_BIGNUM], true)
fi
if test "x$have_libnettle" = "xyes" ||
test "x$have_libgcrypt" = "xyes" ||
test "x$have_openssl" = "xyes"; then
AM_CONDITIONAL([USE_INTERNAL_ARC4], false)
else
AC_DEFINE([USE_INTERNAL_ARC4], [1], [Define to 1 if internal ARC4 support is enabled.])
AM_CONDITIONAL([USE_INTERNAL_ARC4], true)
fi
if test "x$enable_bittorrent" = "xyes"; then
AC_DEFINE([ENABLE_BITTORRENT], [1],
[Define to 1 if BitTorrent support is enabled.])
AM_CONDITIONAL([ENABLE_BITTORRENT], true)
else
if test "x$enable_bittorrent_requested" = "xyes"; then
ARIA2_FET_NOT_SUPPORTED([bittorrent])
fi
enable_bittorrent=no
AM_CONDITIONAL([ENABLE_BITTORRENT], false)
fi
if (test "x$have_libxml2" = "xyes" || test "x$have_libexpat" = "xyes") &&
test "x$enable_metalink" = "xyes"; then
AC_DEFINE([ENABLE_METALINK], [1],
[Define to 1 if Metalink support is enabled.])
AM_CONDITIONAL([ENABLE_METALINK], true)
else
if test "x$enable_metalink_requested" = "xyes"; then
ARIA2_FET_NOT_SUPPORTED([metalink])
fi
enable_metalink=no
AM_CONDITIONAL([ENABLE_METALINK], false)
fi
AM_CONDITIONAL([HAVE_SOME_XMLLIB],
[test "x$have_libxml2" = "xyes" || test "x$have_libexpat" = "xyes"])
if test "x$have_libxml2" = "xyes" || test "x$have_libexpat" = "xyes"; then
enable_xml_rpc=yes
fi
if test "x$enable_xml_rpc" = "xyes"; then
AC_DEFINE([ENABLE_XML_RPC], [1],
[Define to 1 if XML-RPC support is enabled.])
fi
AM_CONDITIONAL([ENABLE_XML_RPC], [test "x$enable_xml_rpc" = "xyes"])
AM_CONDITIONAL([HAVE_LIBXML2], [test "x$have_libxml2" = "xyes"])
AM_CONDITIONAL([HAVE_LIBEXPAT], [test "x$have_libexpat" = "xyes"])
if test "x$have_libcares" = "xyes"; then
AC_DEFINE([ENABLE_ASYNC_DNS], [1],
[Define to 1 if asynchronous DNS support is enabled.])
AM_CONDITIONAL([ENABLE_ASYNC_DNS], true)
else
AM_CONDITIONAL([ENABLE_ASYNC_DNS], false)
fi
# Set conditional for libz
AM_CONDITIONAL([HAVE_ZLIB], [test "x$have_zlib" = "xyes"])
# Set conditional for sqlite3
AM_CONDITIONAL([HAVE_SQLITE3], [test "x$have_sqlite3" = "xyes"])
# Set conditional for libssh2
AM_CONDITIONAL([HAVE_LIBSSH2], [test "x$have_libssh2" = "xyes"])
AC_SEARCH_LIBS([clock_gettime], [rt])
case "$host" in
*solaris*)
AC_SEARCH_LIBS([getaddrinfo], [nsl socket])
;;
esac
# Checks for header files.
AC_FUNC_ALLOCA
AC_HEADER_STDC
AC_CHECK_HEADERS([argz.h \
arpa/inet.h \
fcntl.h \
float.h \
inttypes.h \
langinfo.h \
libintl.h \
limits.h \
locale.h \
malloc.h \
netdb.h \
netinet/in.h \
netinet/tcp.h \
poll.h \
port.h \
signal.h \
stddef.h \
stdint.h \
stdio_ext.h \
stdlib.h \
string.h \
strings.h \
sys/ioctl.h \
sys/param.h \
sys/resource.h \
sys/signal.h \
sys/socket.h \
sys/time.h \
sys/types.h \
sys/uio.h \
sys/utsname.h \
termios.h \
unistd.h \
utime.h \
wchar.h \
ifaddrs.h \
pwd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_INT16_T
AC_TYPE_INT32_T
AC_TYPE_INT64_T
AC_TYPE_INT8_T
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_HEADER_TIME
AC_STRUCT_TM
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T
AC_TYPE_PID_T
AC_C_VOLATILE
AC_CHECK_TYPES([ptrdiff_t])
AC_CHECK_TYPE([struct timespec], [have_timespec=yes], [have_timespec=no])
AC_C_BIGENDIAN
AC_SYS_LARGEFILE
if test "x$have_timespec" = "xyes"; then
AC_DEFINE([HAVE_A2_STRUCT_TIMESPEC], [1],
[Define to 1 if the system has the type `struct timespec'.])
fi
# Checks for library functions.
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.18])
AC_FUNC_ERROR_AT_LINE
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MEMCMP
AC_FUNC_MKTIME
AC_FUNC_SELECT_ARGTYPES
AC_FUNC_STAT
AC_FUNC_STRFTIME
AC_FUNC_VPRINTF
AC_FUNC_FORK
AC_FUNC_STRTOD
# Don't use AC_FUNC_MMAP becaue it fails on some platforms (e.g.,
# OpenWRT) which have mmap and it works in the way we use in aria2.
# Instead use mmap in AC_CHECK_FUNCS list.
AC_CHECK_FUNCS([__argz_count \
__argz_next \
__argz_stringify \
atexit \
ftruncate \
getcwd \
gethostbyaddr \
gethostbyname \
getifaddrs \
getpagesize \
getrandom \
memchr \
memmove \
mempcpy \
memset \
mkdir \
mmap \
munmap \
nl_langinfo \
posix_fadvise \
posix_memalign \
pow \
putenv \
rmdir \
select \
setlocale \
sigaction \
sleep \
socket \
stpcpy \
strcasecmp \
strchr \
strcspn \
strdup \
strerror \
strncasecmp \
strstr \
strtol \
strtoul \
strtoull \
tzset \
unsetenv \
usleep \
utime \
utimes])
AC_MSG_CHECKING([for getrandom linux syscall interface])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <sys/syscall.h>
#include <linux/random.h>
]],
[[
int x = GRND_NONBLOCK;
int y = (int)SYS_getrandom;
]])],
[have_getrandom_interface=yes
AC_DEFINE([HAVE_GETRANDOM_INTERFACE], [1], [Define to 1 if getrandom linux syscall interface is available.])],
[have_getrandom_interface=no])
AC_MSG_RESULT([$have_getrandom_interface])
AM_CONDITIONAL([HAVE_GETRANDOM_INTERFACE], [test "x$have_getrandom_interface" = "xyes"])
dnl Put tcmalloc/jemalloc checks after the posix_memalign check.
dnl These libraries may implement posix_memalign, while the usual CRT may not
dnl (e.g. mingw). Since we aren't including the corresponding library headers
dnl this will lead to undefined posix_memalign() errors when compiling
if test "x$with_tcmalloc_requested" = "xyes" &&
test "x$with_jemalloc_requested" = "xyes"; then
AC_MSG_FAILURE([Cannot use both, tcmalloc and jemalloc!])
fi
if test "x$with_tcmalloc" = "xyes"; then
dnl Important: put malloc libs at the very end.
dnl Only newish versions have a .pc, thus try CHECK_LIB as well.
PKG_CHECK_MODULES([TCMALLOC], [libtcmalloc_minimal], [have_tcmalloc=yes], [have_tcmalloc=no])
if test "x$have_tcmalloc" = "xyes"; then
CPPFLAGS="$TCMALLOC_CFLAGS $CPPFLAGS"
LIBS="$LIBS $TCMALLOC_LIBS"
else
AC_CHECK_LIB([tcmalloc_minimal], [malloc], [have_tcmalloc=yes], [have_tcmalloc=no])
if test "x$have_tcmalloc" = "xyes"; then
LIBS="$LIBS -ltcmalloc_minimal"
else
if test "x$with_tcmalloc_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([tcmalloc_minimal])
fi
fi
fi
fi
if test "x$have_tcmalloc" != "xyes" && test "x$with_jemalloc" = "xyes"; then
dnl Important: put malloc libs at the very end.
dnl Usually jemalloc does not come with a .pc, as the official source does not
dnl generate one.
PKG_CHECK_MODULES([JEMALLOC], [jemalloc], [have_jemalloc=yes], [have_jemalloc=no])
if test "x$have_jemalloc" = "xyes"; then
CPPFLAGS="$JEMALLOC_CFLAGS $CPPFLAGS"
LIBS="$LIBS $JEMALLOC_LIBS"
else
AC_CHECK_LIB([jemalloc], [malloc], [have_jemalloc=yes], [have_jemalloc=no])
if test "x$have_jemalloc" = "xyes"; then
LIBS="$LIBS -ljemalloc"
else
if test "x$with_jemalloc_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([jemalloc (unprefixed)])
fi
fi
fi
fi
if test "x$enable_epoll" = "xyes"; then
AC_CHECK_FUNCS([epoll_create], [have_epoll=yes])
if test "x$have_epoll" = "xyes"; then
AC_DEFINE([HAVE_EPOLL], [1], [Define to 1 if epoll is available.])
fi
fi
AM_CONDITIONAL([HAVE_EPOLL], [test "x$have_epoll" = "xyes"])
AC_CHECK_FUNCS([posix_fallocate],[have_posix_fallocate=yes])
ARIA2_CHECK_FALLOCATE
if test "x$have_posix_fallocate" = "xyes" ||
test "x$have_fallocate" = "xyes" ||
test "x$have_osx" = "xyes" ||
test "x$win_build" = "xyes"; then
AC_DEFINE([HAVE_SOME_FALLOCATE], [1],
[Define to 1 if *_fallocate is available.])
fi
AM_CONDITIONAL([HAVE_SOME_FALLOCATE],
[test "x$have_posix_fallocate" = "xyes" || test "x$have_fallocate" = "xyes" \
|| test "x$have_osx" = "xyes" || test "x$win_build" = "xyes"])
AC_CHECK_FUNCS([asctime_r],
[AM_CONDITIONAL([HAVE_ASCTIME_R], true)],
[AM_CONDITIONAL([HAVE_ASCTIME_R], false)])
AC_CHECK_FUNCS([basename],
[AM_CONDITIONAL([HAVE_BASENAME], true)],
[AM_CONDITIONAL([HAVE_BASENAME], false)])
AC_CHECK_FUNCS([gai_strerror],
[AM_CONDITIONAL([HAVE_GAI_STRERROR], true)],
[AM_CONDITIONAL([HAVE_GAI_STRERROR], false)])
AC_CHECK_FUNCS([getaddrinfo],
[AM_CONDITIONAL([HAVE_GETADDRINFO], true)],
[AM_CONDITIONAL([HAVE_GETADDRINFO], false)])
AC_CHECK_FUNCS([gettimeofday],
[AM_CONDITIONAL([HAVE_GETTIMEOFDAY], true)],
[AM_CONDITIONAL([HAVE_GETTIMEOFDAY], false)])
AC_CHECK_FUNCS([localtime_r],
[AM_CONDITIONAL([HAVE_LOCALTIME_R], true)],
[AM_CONDITIONAL([HAVE_LOCALTIME_R], false)])
AC_CHECK_FUNCS([strptime],
[AM_CONDITIONAL([HAVE_STRPTIME], true)],
[AM_CONDITIONAL([HAVE_STRPTIME], false)])
AC_CHECK_FUNCS([timegm],
[AM_CONDITIONAL([HAVE_TIMEGM], true)],
[AM_CONDITIONAL([HAVE_TIMEGM], false)])
AC_CHECK_FUNCS([daemon], [have_daemon=yes])
AM_CONDITIONAL([HAVE_DAEMON], [test "x$have_daemon" = "xyes"])
AC_CHECK_FUNCS([clock_gettime], [have_clock_gettime=yes])
if test "x$have_clock_gettime" != "xyes"; then
AC_CHECK_FUNCS([mach_absolute_time], [have_mach_absolute_time=yes])
fi
AM_CONDITIONAL([HAVE_MACH_ABSOLUTE_TIME],
[test "x$have_mach_absolute_time" = "xyes"])
AC_CHECK_FUNCS([poll], [have_poll=yes])
AM_CONDITIONAL([HAVE_POLL], [test "x$have_poll" = "xyes"])
case "$host" in
*mingw*)
AM_CONDITIONAL([MINGW_BUILD], true)
dnl defined in ws2tcpip.h, but only if _WIN32_WINNT >= 0x0501
AM_CONDITIONAL([HAVE_GETADDRINFO], true)
dnl defined in ws2tcpip.h, but missing in C:\mingw\lib\libws2_32.a
AM_CONDITIONAL([HAVE_GAI_STRERROR], false)
AM_CONDITIONAL([HAVE_TIMEGETTIME], [test "x$have_clock_gettime" != "xyes"])
;;
*)
AM_CONDITIONAL([MINGW_BUILD], false)
AM_CONDITIONAL([HAVE_TIMEGETTIME], false)
;;
esac
AC_CHECK_FUNCS([port_associate], [have_port_associate=yes])
AM_CONDITIONAL([HAVE_PORT_ASSOCIATE], [test "x$have_port_associate" = "xyes"])
AC_CHECK_FUNCS([kqueue], [have_kqueue=yes])
AM_CONDITIONAL([HAVE_KQUEUE], [test "x$have_kqueue" = "xyes"])
if test "x$have_kqueue" = "xyes"; then
AC_MSG_CHECKING([whether struct kevent.udata is intptr_t])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>
]],
[[
struct kevent event;
event.udata = reinterpret_cast<intptr_t>(&event);
]])],
[kevent_udata_intptr_t=yes], [kevent_udata_intptr_t=no])
AC_MSG_RESULT([$kevent_udata_intptr_t])
if test "x$kevent_udata_intptr_t" = "xyes"; then
AC_DEFINE([KEVENT_UDATA_INTPTR_T], [1], [Define to 1 if struct kevent.udata is intptr_t])
fi
fi
AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
[AC_DEFINE([HAVE_SOCKADDR_IN_SIN_LEN],[1],
[Define to 1 if struct sockaddr_in has sin_len member.])],
[],
[[
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
]])
AC_CHECK_MEMBER([struct sockaddr_in6.sin6_len],
[AC_DEFINE([HAVE_SOCKADDR_IN6_SIN6_LEN],[1],
[Define to 1 if struct sockaddr_in6 has sin6_len member.])],
[],
[[
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
]])
# Check struct option.name is assignable from const char*. struct
# option.name in opensolaris is of type char*. In Linux, it is const
# char*
AC_MSG_CHECKING([whether struct option.name is assignable from const char*])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <unistd.h>
#include <getopt.h>
]],
[[
const char* s = "const char";
option op;
op.name = s;
]])],
[have_option_const_name=yes], [have_option_const_name=no])
AC_MSG_RESULT([$have_option_const_name])
if test "x$have_option_const_name" = "xyes"; then
AC_DEFINE([HAVE_OPTION_CONST_NAME], [1], [Define 1 if struct option.name is const char*])
fi
if test "x$enable_websocket" = "xyes"; then
AC_CONFIG_SUBDIRS([deps/wslay])
enable_websocket=yes
AC_DEFINE([ENABLE_WEBSOCKET], [1],
[Define 1 if WebSocket support is enabled.])
WSLAY_LIBS="\$(top_builddir)/deps/wslay/lib/libwslay.la"
AC_SUBST([WSLAY_LIBS])
# $(top_srcdir) for `make distcheck`
CPPFLAGS="-I\$(top_builddir)/deps/wslay/lib/includes -I\$(top_srcdir)/deps/wslay/lib/includes $CPPFLAGS"
fi
AM_CONDITIONAL([ENABLE_WEBSOCKET], [test "x$enable_websocket" = "xyes"])
AM_CONDITIONAL([ENABLE_LIBARIA2], [test "x$enable_libaria2" = "xyes"])
AC_SUBST([bashcompletiondir])
case "$host" in
*android*)
android=yes
LIBS="$LIBS -lstdc++ -lsupc++"
case "$host" in
arm-*)
android_arm=yes
;;
mipsel-*)
android_mips=yes
;;
i686-*)
android_x86=yes
;;
esac
;;
*)
;;
esac
AM_CONDITIONAL([ANDROID], [test "x$android" = "xyes"])
AM_CONDITIONAL([ANDROID_ARM], [test "x$android_arm" = "xyes"])
AM_CONDITIONAL([ANDROID_MIPS], [test "x$android_mips" = "xyes"])
AM_CONDITIONAL([ANDROID_X86], [test "x$android_x86" = "xyes"])
if test "x$ARIA2_STATIC" = "xyes"; then
# -static-libgcc and -static-libstdc++ are linker flags and not for
# libtool.
LDFLAGS="$LDFLAGS -all-static"
dnl For non-MinGW build, we need additional libs for static build.
case "$host" in
*mingw*|*msvc*|*darwin*)
;;
*)
LIBS="$LIBS -lpthread -ldl -lrt"
;;
esac
fi
if test "x$win_build" = "xyes" && test "x$enable_libaria2" = "xyes"; then
# Creating dll needs this
LDFLAGS="$LDFLAGS -no-undefined"
fi
AC_CONFIG_FILES([Makefile
src/Makefile
src/libaria2.pc
src/includes/Makefile
test/Makefile
po/Makefile.in
lib/Makefile
doc/Makefile
doc/manual-src/Makefile
doc/manual-src/en/Makefile
doc/manual-src/en/conf.py
doc/manual-src/ru/Makefile
doc/manual-src/ru/conf.py
doc/manual-src/pt/Makefile
doc/manual-src/pt/conf.py
deps/Makefile])
AC_OUTPUT
echo " "
echo "Build: $build"
echo "Host: $host"
echo "Target: $target"
echo "Install prefix: $prefix"
echo "CC: $CC"
echo "CXX: $CXX"
echo "CPP: $CPP"
echo "CXXFLAGS: $CXXFLAGS"
echo "CFLAGS: $CFLAGS"
echo "CPPFLAGS: $CPPFLAGS"
echo "LDFLAGS: $LDFLAGS"
echo "LIBS: $LIBS"
echo "DEFS: $DEFS"
echo "LibUV: $have_libuv"
echo "SQLite3: $have_sqlite3"
echo "SSL Support: $have_ssl"
echo "AppleTLS: $have_appletls"
echo "WinTLS: $have_wintls"
echo "GnuTLS: $have_libgnutls"
echo "OpenSSL: $have_openssl"
echo "CA Bundle: $ca_bundle"
echo "LibXML2: $have_libxml2"
echo "LibExpat: $have_libexpat"
echo "LibCares: $have_libcares"
echo "Zlib: $have_zlib"
echo "Libssh2: $have_libssh2"
echo "Epoll: $have_epoll"
echo "Bittorrent: $enable_bittorrent"
echo "Metalink: $enable_metalink"
echo "XML-RPC: $enable_xml_rpc"
echo "Message Digest: $use_md"
echo "WebSocket: $enable_websocket"
echo "Libaria2: $enable_libaria2"
if test "x$enable_libaria2" = "xyes"; then
echo "Library types: Shared=${enable_shared}, Static=${enable_static}"
fi
echo "bash_completion dir: $bashcompletiondir"
echo "Static build: $ARIA2_STATIC"