aria2/configure.ac
Tatsuhiro Tsujikawa a5cc350dcf 2010-07-04 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
When allocating disk space, for Linux system with fallocate()
	system call, first check file system supports fallocate.  This
	just run fallocate with small chunk and see it succeeds or fails.
	If it succeeds, use fallocate() to allocate entire file otherwise
	fall back to traditional slower method: writing zeros. This
	behavior is enabled in --file-allocation=prealloc, so this is
	enabled by default for most modern Linux.
	* configure.ac
	* src/AbstractDiskWriter.cc
	* src/AbstractDiskWriter.h
	* src/AbstractSingleDiskAdaptor.cc
	* src/AdaptiveFileAllocationIterator.cc
	* src/AdaptiveFileAllocationIterator.h
	* src/DefaultPieceStorage.cc
	* src/DiskAdaptor.cc
	* src/DiskAdaptor.h
	* src/FallocFileAllocationIterator.cc
	* src/Makefile.am
	* src/MultiFileAllocationIterator.cc
	* src/OptionHandlerFactory.cc
	* test/FallocFileAllocationIteratorTest.cc
	* test/Makefile.am
2010-07-04 15:03:35 +00:00

503 lines
14 KiB
Plaintext

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
#
AC_PREREQ(2.65)
AC_INIT([aria2],[1.9.5],[t-tujikawa@users.sourceforge.net],[aria2],[http://aria2.sourceforge.net/])
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE()
AM_PATH_CPPUNIT(1.10.2)
AC_CONFIG_SRCDIR([src/a2io.h])
AC_CONFIG_HEADERS([config.h])
case "$target" in
*mingw*|*cygwin*)
WINSOCK_LIBS="-lws2_32"
AC_SUBST(WINSOCK_LIBS)
LIBS="-lws2_32 -lcrypto -lwsock32 -lgdi32 -lwinmm $LIBS"
;;
esac
AC_DEFINE_UNQUOTED([TARGET], ["$target"], [Define target-type])
# Checks for arguments.
ARIA2_ARG_WITH([gnutls])
ARIA2_ARG_WITH([openssl])
ARIA2_ARG_WITH([sqlite3])
ARIA2_ARG_WITH([libxml2])
ARIA2_ARG_WITH([libexpat])
ARIA2_ARG_WITH([libcares])
ARIA2_ARG_WITH([libz])
ARIA2_ARG_ENABLE([bittorrent])
ARIA2_ARG_ENABLE([metalink])
ARIA2_ARG_ENABLE([epoll])
AC_ARG_WITH([ca-bundle],
AS_HELP_STRING([--with-ca-bundle=FILE],[Use FILE as default CA bundle.]),
[ca_bundle=$withval], [ca_bundle=""])
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_MKDIR_P
AC_PROG_RANLIB
AC_PROG_YACC
# Setting language choice
AC_LANG([C++])
# Enable system extensions
AC_USE_SYSTEM_EXTENSIONS
# Check pkg-config is available
PKG_PROG_PKG_CONFIG([0.20])
# Checks for libraries.
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.])
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" &&
test "x$with_libexpat_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libexpat])
fi
fi
if test "x$with_sqlite3" = "xyes"; then
AM_PATH_SQLITE3
if test "x$have_sqlite3" != "xyes" &&
test "x$with_sqlite3_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([sqlite3])
fi
fi
if test "x$with_gnutls" = "xyes"; then
# gnutls >= 2.8 doesn't have libgnutls-config anymore.
# First check the presence of libgnutls using pkg-config.
PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 1.2.9],
[have_libgnutls=yes], [have_libgnutls=no])
# If no libgnutls found by pkg-config, fall back to old macro
if test "x$have_libgnutls" = "xno"; then
AC_MSG_WARN([$LIBGNUTLS_PKG_ERRORS])
AM_PATH_LIBGNUTLS([1.2.9], [have_libgnutls=yes])
fi
if test "x$have_libgnutls" = "xyes"; then
AC_DEFINE([HAVE_LIBGNUTLS], [1], [Define to 1 if you have libgnutls.])
elif test "x$with_gnutls_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([gnutls])
fi
AC_SUBST(LIBGNUTLS_LIBS)
AC_SUBST(LIBGNUTLS_CFLAGS)
fi
if test "x$have_libgnutls" = "xyes"; then
AM_PATH_LIBGCRYPT([1.2.2], [have_libgcrypt=yes])
if test "x$have_libgcrypt" = "xyes"; then
AC_DEFINE([HAVE_LIBGCRYPT], [1], [Define to 1 if you have libgcrypt.])
fi
fi
if test "x$with_openssl" = "xyes" && test "x$have_libgnutls" != "xyes"; then
AM_PATH_OPENSSL
if test "x$have_openssl" != "xyes" &&
test "x$with_openssl_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([openssl])
fi
fi
if test "x$with_libcares" = "xyes"; then
AM_PATH_LIBCARES
if test "x$have_libcares" != "xyes" &&
test "x$with_libcares_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libcares])
fi
fi
# Check availability of libz
if test "x$with_libz" = "xyes"; then
AM_PATH_LIBZ
if test "x$have_libz" != "xyes" && test "x$with_libz_requested" = "xyes"; then
ARIA2_DEP_NOT_MET([libz])
fi
fi
# Define variables based on the result of the checks for libraries.
if test "x$have_libgnutls" = "xyes" || test "x$have_openssl" = "xyes"; then
AC_DEFINE([ENABLE_SSL], [1], [Define to 1 if ssl support is enabled.])
AM_CONDITIONAL([ENABLE_SSL], true)
AC_SUBST([ca_bundle])
else
AM_CONDITIONAL([ENABLE_SSL], false)
fi
AM_CONDITIONAL([HAVE_LIBGNUTLS], [ test "x$have_libgnutls" = "xyes" ])
AM_CONDITIONAL([HAVE_LIBSSL], [ test "x$have_openssl" = "xyes" ])
if test "x$have_libgcrypt" = "xyes" || test "x$have_openssl" = "xyes"; then
AC_DEFINE([ENABLE_MESSAGE_DIGEST], [1],
[Define to 1 if message digest support is enabled.])
AM_CONDITIONAL([ENABLE_MESSAGE_DIGEST], true)
enable_message_digest=yes
else
AM_CONDITIONAL([ENABLE_MESSAGE_DIGEST], false)
fi
if test "x$enable_bittorrent" = "xyes" &&
test "x$enable_message_digest" = "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([ENABLE_METALINK_LIBXML2],
[test "x$enable_metalink" = "xyes" && test "x$have_libxml2" = "xyes"])
AM_CONDITIONAL([ENABLE_METALINK_LIBEXPAT],
[test "x$enable_metalink" = "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_LIBZ], [test "x$have_libz" = "xyes"])
# Set conditional for sqlite3
AM_CONDITIONAL([HAVE_SQLITE3], [test "x$have_sqlite3" = "xyes"])
AC_SEARCH_LIBS([clock_gettime], [rt])
case "$target" in
*solaris*)
AC_SEARCH_LIBS([getaddrinfo], [nsl socket])
AC_SEARCH_LIBS([inet_aton], [nsl socket])
;;
esac
# Checks for header files.
AC_FUNC_ALLOCA
AC_HEADER_STDC
case "$target" in
*mingw*)
AC_CHECK_HEADERS([windows.h \
winsock2.h \
ws2tcpip.h \
mmsystem.h], [], [],
[[#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
]])
;;
esac
AC_CHECK_HEADERS([argz.h \
arpa/inet.h \
fcntl.h \
float.h \
inttypes.h \
io.h \
langinfo.h \
libintl.h \
limits.h \
locale.h \
malloc.h \
netdb.h \
netinet/in.h \
poll.h \
port.h \
stddef.h \
stdint.h \
stdio_ext.h \
stdlib.h \
string.h \
strings.h \
sys/ioctl.h \
sys/param.h \
sys/socket.h \
sys/time.h \
termios.h \
unistd.h \
utime.h \
wchar.h \
ifaddrs.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, struct timespec])
AC_C_BIGENDIAN
AC_SYS_LARGEFILE
# Checks for library functions.
AM_GNU_GETTEXT
AM_GNU_GETTEXT_VERSION([0.17])
AC_FUNC_ERROR_AT_LINE
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MEMCMP
AC_FUNC_MKTIME
AC_FUNC_MMAP
AC_FUNC_SELECT_ARGTYPES
AC_FUNC_STAT
AC_FUNC_STRFTIME
AC_FUNC_VPRINTF
AC_FUNC_FORK
AC_FUNC_STRTOD
AC_CHECK_FUNCS([__argz_count \
__argz_next \
__argz_stringify \
atexit \
ftruncate \
getcwd \
gethostbyaddr \
gethostbyname \
getifaddrs \
getpagesize \
inet_ntoa \
memchr \
memmove \
mempcpy \
memset \
mkdir \
munmap \
nl_langinfo \
posix_memalign \
pow \
putenv \
rmdir \
select \
setlocale \
sleep \
socket \
stpcpy \
strcasecmp \
strchr \
strcspn \
strdup \
strerror \
strncasecmp \
strstr \
strtol \
strtoul \
strtoull \
tzset \
unsetenv \
usleep \
utime])
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])
AM_CONDITIONAL([HAVE_SOME_FALLOCATE], [test "x$have_posix_fallocate" = "xyes"])
AC_CHECK_FUNCS([fallocate], [have_fallocate=yes])
AM_CONDITIONAL([HAVE_SOME_FALLOCATE], [test "x$have_fallocate" = "xyes"])
if test "x$have_posix_fallocate" = "xyes" ||
test "x$have_fallocate" = "xyes"; then
AC_DEFINE([HAVE_SOME_FALLOCATE], [1],
[Define to 1 if *_fallocate is available.])
fi
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([inet_aton],
[AM_CONDITIONAL([HAVE_INET_ATON], true)],
[AM_CONDITIONAL([HAVE_INET_ATON], 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 "$target" in
*mingw*)
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)
if test "x$have_clock_gettime" != "xyes"; then
AM_CONDITIONAL([HAVE_TIMEGETTIME], true)
fi
;;
*)
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 <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
AC_CONFIG_FILES([Makefile
src/Makefile
test/Makefile
po/Makefile.in
intl/Makefile
lib/Makefile
doc/Makefile])
AC_OUTPUT
echo " "
echo "Build: $build"
echo "Target: $target"
echo "Install prefix: $prefix"
echo "CXXFLAGS: $CXXFLAGS"
echo "CFLAGS: $CFLAGS"
echo "CPPFLAGS: $CPPFLAGS"
echo "LDFLAGS: $LDFLAGS"
echo "LIBS: $LIBS"
echo "SQLite3: $have_sqlite3"
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 "Libz: $have_libz"
echo "Epoll: $have_epoll"
echo "Bittorrent: $enable_bittorrent"
echo "Metalink: $enable_metalink"
echo "XML-RPC: $enable_xml_rpc"