cmake: Detect proper large file defines even with -Wno-error

Without this change large file support was detected as available
even when it was not without additional flags on 32 architectures.

As a result mergecap and other programs are built without large
file support causing mergecap not being able to write files
bigger than 2GB on i386 systems. This used to work properly
with autotools builds, but not with CMake ones.

Change-Id: Ibfd043342b2a48310d2ac9d760e6404a701c5808
Reviewed-on: https://code.wireshark.org/review/15937
Petri-Dish: Balint Reczey <balint@balintreczey.hu>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Balint Reczey <balint@balintreczey.hu>
This commit is contained in:
Balint Reczey 2016-06-14 22:29:34 -07:00 committed by Anders Broman
parent 4962ea601f
commit f749a64280
2 changed files with 19 additions and 4 deletions

View File

@ -8,11 +8,17 @@
#include <sys/types.h>
/* detect failure even with -Wno-error on command line */
#pragma GCC diagnostic error "-Werror"
int main(int argc, char **argv)
{
/* Cause a compile-time error if off_t is smaller than 64 bits */
#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 ];
/* silence unused errors */
(void)off_t_is_large;
(void)argc;
(void)argv;
return 0;
}

View File

@ -10,6 +10,9 @@
#cmakedefine _LARGE_FILES
#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@
/* detect failure even with -Wno-error on command line */
#pragma GCC diagnostic error "-Werror"
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
@ -20,9 +23,15 @@ int main(int argc, char **argv)
* and make sure we have ftello / fseeko.
*/
#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 ];
FILE *fp = fopen(argv[0],"r");
off_t offset = ftello( fp );
int off_t_is_large[ (LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1 ];
/* silence unused warnings */
FILE *fp;
off_t offset;
(void)off_t_is_large;
(void)argc;
(void)argv;
fp = fopen(argv[0],"r");
offset = ftello( fp );
fseeko( fp, offset, SEEK_CUR );
fclose(fp);