Do the Windows oldnames workaround through the C++ GNULIB_NAMESPACE.
[gnulib.git] / m4 / truncate.m4
blob649ef276f600b92d764aa9394d62cb19df5797b2
1 # truncate.m4 serial 2   -*- Autoconf -*-
2 dnl Copyright (C) 2017-2020 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
7 AC_DEFUN([gl_FUNC_TRUNCATE],
9   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
10   AC_CHECK_FUNCS_ONCE([truncate])
11   dnl AC_CHECK_FUNC is not enough here, because when compiling for Android 4.4
12   dnl or older with _FILE_OFFSET_BITS=64, truncate() is not declared.  There
13   dnl is a function 'truncate' in libc, but it is unsuitable, because it takes
14   dnl only a 32-bit offset argument.
15   AC_CHECK_DECL([truncate], , , [[#include <unistd.h>]])
16   if test $ac_cv_have_decl_truncate = yes; then
17     m4_ifdef([gl_LARGEFILE], [
18       AC_REQUIRE([AC_CANONICAL_HOST])
19       case "$host_os" in
20         mingw*)
21           dnl Native Windows, and Large File Support is requested.
22           dnl The mingw64 truncate64() function is based on ftruncate64(),
23           dnl which is unreliable (it may delete the file, see
24           dnl <https://web.archive.org/web/20160425005423/http://mingw-w64.sourcearchive.com/documentation/2.0-1/ftruncate64_8c_source.html>).
25           dnl Use gnulib's ftruncate() and truncate() implementation instead.
26           REPLACE_TRUNCATE=1
27           ;;
28       esac
29     ], [
30       :
31     ])
32   else
33     HAVE_DECL_TRUNCATE=0
34     if test $ac_cv_func_truncate = yes; then
35       dnl Avoid a conflict with the 'truncate' in libc.
36       REPLACE_TRUNCATE=1
37     fi
38   fi
41 # Prerequisites of lib/truncate.c.
42 AC_DEFUN([gl_PREREQ_TRUNCATE], [:])