aboutsummaryrefslogtreecommitdiff
path: root/kde-modules
diff options
context:
space:
mode:
authorAlex Merry <alex.merry@kde.org>2014-05-02 16:53:40 +0100
committerAlex Merry <alex.merry@kde.org>2014-05-02 17:00:48 +0100
commit0ec4b7b4128a9aa22530512bb87863e5d72ee2f2 (patch)
tree25f94cdadbb6dd6cbdf3e98ab0fb68e9e322d34f /kde-modules
parentf8b5cf4773c8f860894bc43c48d8bdac8ac07cad (diff)
downloadextra-cmake-modules-0ec4b7b4128a9aa22530512bb87863e5d72ee2f2.tar.gz
extra-cmake-modules-0ec4b7b4128a9aa22530512bb87863e5d72ee2f2.tar.bz2
Set _FILE_OFFSET_BITS=64 again when necessary
This essentially reverts db553c810cbc3a446f90d4c962110d6262853cde. It turns out that (for better or worse) quite a few places access files without going through KFile, so it is worth making sure they can deal with files larger than 2Gb on 32-bit systems. Reviewed by: Harald Sitter <sitter@kde.org> CCBUG: 165449
Diffstat (limited to 'kde-modules')
-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)