aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvapier@chromium.org <vapier@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2013-12-10 06:28:08 +0000
committervapier@chromium.org <vapier@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2013-12-10 06:28:08 +0000
commit302124aff1a2041450456eb78ac44f6dcae21d2b (patch)
tree7aa0064de4d2d44aa6803f95940793959e4149f1
parentFix Windows release build error due to unreferenced variables. (diff)
downloadbreakpad-302124aff1a2041450456eb78ac44f6dcae21d2b.tar.xz
check for and enable Large File Support automatically
If you try to process a file using a 32bit build that is larger than 2GiB in size, the linux kernel will reject things: $ strace -eopen dump_syms ./chrome ./ > chrome.sym ... open(".//chrome.debug", O_RDONLY) = -1 EOVERFLOW (Value too large for defined data type) So let's use the existing autoconf macro to check for and enable support as need be. We have to shift the existing m32 logic up to before we start doing feature test macros though otherwise a simple configure won't work: $ ./configure --enable-m32 This is because it first tests LFS and such w/out the -m32 flags. BUG=chromium:266064 TEST=`./configure --enable-m32 && make && make check` passes R=benchan@chromium.org Review URL: https://breakpad.appspot.com/619002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1250 4c0a9323-5329-0410-9bdc-e9ce6186880e
-rwxr-xr-xconfigure242
-rw-r--r--configure.ac40
-rw-r--r--src/config.h.in6
3 files changed, 249 insertions, 39 deletions
diff --git a/configure b/configure
index f84e0a17..c8bee1f2 100755
--- a/configure
+++ b/configure
@@ -753,6 +753,7 @@ enable_option_checking
enable_silent_rules
enable_dependency_tracking
enable_m32
+enable_largefile
enable_processor
enable_tools
enable_selftest
@@ -1396,6 +1397,7 @@ Optional Features:
--disable-dependency-tracking
speeds up one-time build
--enable-m32 Compile/build with -m32 (default is no)
+ --disable-largefile omit support for large files
--disable-processor Don't build processor library (default is no)
--disable-tools Don't build tool binaries (default is no)
--enable-selftest Run extra tests with "make check" (may conflict with
@@ -5491,6 +5493,26 @@ else
fi
# let the Makefile know if we're gcc
+# Check whether --enable-m32 was given.
+if test "${enable_m32+set}" = set; then :
+ enableval=$enable_m32; case "${enableval}" in
+ yes)
+ CFLAGS="${CFLAGS} -m32"
+ CXXFLAGS="${CXXFLAGS} -m32"
+ usem32=true
+ ;;
+ no)
+ usem32=false
+ ;;
+ *)
+ as_fn_error $? "bad value ${enableval} for --enable-m32" "$LINENO" 5
+ ;;
+ esac
+else
+ usem32=false
+fi
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
@@ -5735,6 +5757,206 @@ $as_echo "#define STDC_HEADERS 1" >>confdefs.h
fi
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+ enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ fi
+
+
+fi
+
# ===========================================================================
# http://www.nongnu.org/autoconf-archive/ax_pthread.html
# ===========================================================================
@@ -6248,26 +6470,6 @@ else
fi
-# Check whether --enable-m32 was given.
-if test "${enable_m32+set}" = set; then :
- enableval=$enable_m32; case "${enableval}" in
- yes)
- CFLAGS="${CFLAGS} -m32"
- CXXFLAGS="${CXXFLAGS} -m32"
- usem32=true
- ;;
- no)
- usem32=false
- ;;
- *)
- as_fn_error $? "bad value ${enableval} for --enable-m32" "$LINENO" 5
- ;;
- esac
-else
- usem32=false
-fi
-
-
# Check whether --enable-processor was given.
if test "${enable_processor+set}" = set; then :
enableval=$enable_processor; case "${enableval}" in
diff --git a/configure.ac b/configure.ac
index 84295520..e2afc072 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,7 +48,28 @@ AC_PROG_CXX
AC_PROG_RANLIB
AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc
+dnl This must come before all the feature tests below.
+AC_ARG_ENABLE(m32,
+ AS_HELP_STRING([--enable-m32],
+ [Compile/build with -m32]
+ [(default is no)]),
+ [case "${enableval}" in
+ yes)
+ CFLAGS="${CFLAGS} -m32"
+ CXXFLAGS="${CXXFLAGS} -m32"
+ usem32=true
+ ;;
+ no)
+ usem32=false
+ ;;
+ *)
+ AC_MSG_ERROR(bad value ${enableval} for --enable-m32)
+ ;;
+ esac],
+ [usem32=false])
+
AC_HEADER_STDC
+AC_SYS_LARGEFILE
m4_include(m4/ax_pthread.m4)
AX_PTHREAD
AC_CHECK_HEADERS([a.out.h])
@@ -69,25 +90,6 @@ case $host in
esac
AM_CONDITIONAL(ANDROID_HOST, test x$ANDROID_HOST = xtrue)
-AC_ARG_ENABLE(m32,
- AS_HELP_STRING([--enable-m32],
- [Compile/build with -m32]
- [(default is no)]),
- [case "${enableval}" in
- yes)
- CFLAGS="${CFLAGS} -m32"
- CXXFLAGS="${CXXFLAGS} -m32"
- usem32=true
- ;;
- no)
- usem32=false
- ;;
- *)
- AC_MSG_ERROR(bad value ${enableval} for --enable-m32)
- ;;
- esac],
- [usem32=false])
-
AC_ARG_ENABLE(processor,
AS_HELP_STRING([--disable-processor],
[Don't build processor library]
diff --git a/src/config.h.in b/src/config.h.in
index f5e5e280..3746e830 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -63,3 +63,9 @@
/* Version number of package */
#undef VERSION
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES