3rdparty(libtiff): fix build with Android NDK 16
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Fri, 5 Jan 2018 02:37:12 +0000 (02:37 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Fri, 5 Jan 2018 04:52:17 +0000 (04:52 +0000)
Compiler message:
tif_unix.c:170:12: error: call to 'mmap' declared with attribute error:
mmap is not available with _FILE_OFFSET_BITS=64 when using GCC until android-21.
Either raise your minSdkVersion, disable _FILE_OFFSET_BITS=64, or switch to Clang.

3rdparty/libtiff/CMakeLists.txt
3rdparty/libtiff/tif_config.h.cmake.in

index ae9914b..73717e2 100644 (file)
@@ -244,10 +244,14 @@ mark_as_advanced(HAVE_IEEEFP)
 
 # Large file support
 if(UNIX OR MINGW)
-  # This might not catch every possibility catered for by
-  # AC_SYS_LARGEFILE.
-  add_definitions(-D_FILE_OFFSET_BITS=64)
-  set(FILE_OFFSET_BITS 64)
+  if(ANDROID AND (ANDROID_NATIVE_API_LEVEL LESS 21) AND (NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES Clang))
+    # Android NDK build problem: 'mmap' issue with GCC and API<21
+  else()
+    # This might not catch every possibility catered for by
+    # AC_SYS_LARGEFILE.
+    add_definitions(-D_FILE_OFFSET_BITS=64)
+    set(FILE_OFFSET_BITS 64)
+  endif()
 endif()
 
 # Documentation install directory (default to cmake project docdir)
index de0f3a3..492636e 100644 (file)
 # endif
 #endif
 
-/* Number of bits in a file offset, on hosts where this is settable. */
-#define _FILE_OFFSET_BITS @FILE_OFFSET_BITS@
-
 /* Define to `__inline__' or `__inline' if that's what the C compiler
    calls it, or to nothing if 'inline' is not supported under any name.  */
 #ifndef __cplusplus