aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kde-modules/KDECompilerSettings.cmake20
1 files changed, 20 insertions, 0 deletions
diff --git a/kde-modules/KDECompilerSettings.cmake b/kde-modules/KDECompilerSettings.cmake
index 229e4f59..46b7719c 100644
--- a/kde-modules/KDECompilerSettings.cmake
+++ b/kde-modules/KDECompilerSettings.cmake
@@ -123,6 +123,26 @@ if (UNIX)
# FIXME: this is included in _GNU_SOURCE in glibc; do other libc
# implementation recognize it?
_kde_add_platform_definitions(-D_LARGEFILE64_SOURCE)
+
+ include(CheckCXXSourceCompiles)
+
+ # By default (in glibc, at least), on 32bit platforms off_t is 32 bits,
+ # which causes a SIGXFSZ when trying to manipulate files larger than 2Gb
+ # using libc calls (note that this issue does not occur when using QFile).
+ check_cxx_source_compiles("
+#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; }
+" _OFFT_IS_64BIT)
+
+ if (NOT _OFFT_IS_64BIT)
+ _kde_add_platform_definitions(-D_FILE_OFFSET_BITS=64)
+ endif ()
endif()
if (WIN32)