diff --git a/configure.ac b/configure.ac index 55997979..8ced4d80 100644 --- a/configure.ac +++ b/configure.ac @@ -19,7 +19,7 @@ define(RELEASE_NUM, 77) define(CDIO_VERSION_STR, 0.$1cvs) AC_PREREQ(2.52) -AC_REVISION([$Id: configure.ac,v 1.181 2005/11/10 11:11:15 rocky Exp $])dnl +AC_REVISION([$Id: configure.ac,v 1.182 2006/01/05 21:57:40 rocky Exp $])dnl AC_INIT(libcdio, CDIO_VERSION_STR(RELEASE_NUM)) AC_CONFIG_SRCDIR(src/cd-info.c) @@ -145,6 +145,26 @@ fi AC_SUBST(DIFF) AC_SUBST(DIFF_OPTS) +dnl check for large file support +AC_SYS_LARGEFILE + +dnl we need to define _FILE_OFFSET_BITS or _LARGE_FILES on the compiler command +dnl line because otherwise the system headers risk being included before +dnl problems +if test "x$ac_cv_sys_largefiles" = "xyes"; then + if test "x$ac_cv_sys_file_offset_bits" = "x64"; then + LIBCDIO_LARGEFILE_FLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGE_FILES" + else + LIBCDIO_LARGEFILE_FLAGS="-D_LARGE_FILES" + fi + dnl AC_FUNC_FSEEKO sets HAVE_FSEEKO and $ac_cv_sys_largefile_source + AC_FUNC_FSEEKO + if test "$ac_cv_sys_largefile_source" != no; then + LIBCDIO_LARGEFILE_FLAGS="$LIBDDIO_LARGEFILE_FLAGS -D_LARGEFILE_SOURCE=$ac_cv_sys_largefile_source" + fi + CPPFLAGS="$CPPFLAGS $LIBCDIO_LARGEFILE_FLAGS" +fi + # We use cmp and cdparanoia in cd-paranoia regression testing AC_PATH_PROG(CMP, cmp, no) AC_SUBST(CMP) diff --git a/largefile.m4 b/largefile.m4 new file mode 100644 index 00000000..b7fb16cb --- /dev/null +++ b/largefile.m4 @@ -0,0 +1,63 @@ +dnl --------------------------------------------------------------------------- +dnl AC_SYS_LARGEFILE from wxWidgets code which is partly based on the code from +dnl autoconf 2.5x) +dnl --------------------------------------------------------------------------- + +dnl WX_SYS_LARGEFILE_TEST +dnl +dnl NB: original autoconf test was checking if compiler supported 6 bit off_t +dnl arithmetic properly but this failed miserably with gcc under Linux +dnl whereas the system still supports 64 bit files, so now simply check +dnl that off_t is big enough +define(WX_SYS_LARGEFILE_TEST, +[typedef struct { + unsigned int field: sizeof(off_t) == 8; +} wxlf; +]) + + +dnl WX_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR) +define(WX_SYS_LARGEFILE_MACRO_VALUE, +[ + AC_CACHE_CHECK([for $1 value needed for large files], [$3], + [ + AC_TRY_COMPILE([#define $1 $2 + #include ], + WX_SYS_LARGEFILE_TEST, + [$3=$2], + [$3=no]) + ] + ) + + if test "$$3" != no; then + ac_cv_sys_largefiles=yes + AC_DEFINE_UNQUOTED([$1], [$$3]) + fi +]) + + +dnl AC_SYS_LARGEFILE +dnl ---------------- +dnl By default, many hosts won't let programs access large files; +dnl one must use special compiler options to get large-file access to work. +dnl For more details about this brain damage please see: +dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html +AC_DEFUN([AC_SYS_LARGEFILE], +[AC_ARG_ENABLE(largefile, + [ --disable-largefile omit support for large files]) +if test "$enable_largefile" != no; then + dnl _FILE_OFFSET_BITS==64 is needed for Linux, Solaris, ... + dnl _LARGE_FILES -- for AIX + ac_cv_sys_largefiles=no + WX_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits) + if test "x$ac_cv_sys_largefiles" != "xyes"; then + WX_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files) + fi + + AC_MSG_CHECKING(if large file support is available) + if test "x$ac_cv_sys_largefiles" = "xyes"; then + AC_DEFINE(HAVE_LARGEFILE_SUPPORT) + fi + AC_MSG_RESULT($ac_cv_sys_largefiles) +fi +])