From: Bruno Haible Date: Thu, 25 Jan 2024 23:18:55 +0000 (+0100) Subject: Resolve conflicts for functions introduced in Android API level 34. X-Git-Tag: v1.0~490 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=6143e4217b409336967a7bf38b79f62d9fa9bd6f;p=gnulib.git Resolve conflicts for functions introduced in Android API level 34. * m4/copy-file-range.m4 (gl_FUNC_COPY_FILE_RANGE): On platforms without glibc, test for copy_file_range using gl_CHECK_FUNCS_ANDROID instead of AC_CHECK_FUNCS_ONCE. Conditionally set REPLACE_COPY_FILE_RANGE. * doc/glibc-functions/copy_file_range.texi: Mention the Android API levels. --- diff --git a/ChangeLog b/ChangeLog index 7dbf07fe1c..d4716bdf9e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,12 @@ Resolve conflicts for functions introduced in Android API level 34. + * m4/copy-file-range.m4 (gl_FUNC_COPY_FILE_RANGE): On platforms without + glibc, test for copy_file_range using gl_CHECK_FUNCS_ANDROID instead of + AC_CHECK_FUNCS_ONCE. Conditionally set REPLACE_COPY_FILE_RANGE. + * doc/glibc-functions/copy_file_range.texi: Mention the Android API + levels. + * m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): Test for posix_spawn_file_actions_addchdir_np and posix_spawn_file_actions_addfchdir_np using gl_CHECK_FUNCS_ANDROID diff --git a/doc/glibc-functions/copy_file_range.texi b/doc/glibc-functions/copy_file_range.texi index f10271c157..979a3ffd69 100644 --- a/doc/glibc-functions/copy_file_range.texi +++ b/doc/glibc-functions/copy_file_range.texi @@ -21,8 +21,8 @@ Portability problems fixed by Gnulib: @itemize @item This function exists only on Linux and FreeBSD and is therefore -missing on many non-glibc platforms: -glibc 2.26, macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. +missing on many platforms: +glibc 2.26, macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 33. But the replacement function is only a stub: It always fails with error ENOSYS. @item diff --git a/m4/copy-file-range.m4 b/m4/copy-file-range.m4 index e919854951..443e598ba5 100644 --- a/m4/copy-file-range.m4 +++ b/m4/copy-file-range.m4 @@ -1,4 +1,4 @@ -# copy-file-range.m4 +# copy-file-range.m4 serial 5 dnl Copyright 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -17,22 +17,33 @@ AC_DEFUN([gl_FUNC_COPY_FILE_RANGE], dnl Programs that use copy_file_range must fall back on read+write dnl anyway, and there's little point to substituting the Gnulib stub dnl for a glibc stub. - AC_CACHE_CHECK([for copy_file_range], [gl_cv_func_copy_file_range], - [AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[ssize_t (*func) (int, off_t *, int, off_t *, size_t, unsigned) - = copy_file_range; - return func (0, 0, 0, 0, 0, 0) & 127; - ]]) - ], - [gl_cv_func_copy_file_range=yes], - [gl_cv_func_copy_file_range=no]) - ]) - + case "$host_os" in + *-gnu* | gnu*) + AC_CACHE_CHECK([for copy_file_range], [gl_cv_func_copy_file_range], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + ]], + [[ssize_t (*func) (int, off_t *, int, off_t *, size_t, unsigned) + = copy_file_range; + return func (0, 0, 0, 0, 0, 0) & 127; + ]]) + ], + [gl_cv_func_copy_file_range=yes], + [gl_cv_func_copy_file_range=no]) + ]) + gl_cv_onwards_func_copy_file_range="$gl_cv_func_copy_file_range" + ;; + *) + gl_CHECK_FUNCS_ANDROID([copy_file_range], [[#include ]]) + gl_cv_func_copy_file_range="$ac_cv_func_copy_file_range" + ;; + esac if test "$gl_cv_func_copy_file_range" != yes; then HAVE_COPY_FILE_RANGE=0 + case "$gl_cv_onwards_func_copy_file_range" in + future*) REPLACE_COPY_FILE_RANGE=1 ;; + esac else AC_DEFINE([HAVE_COPY_FILE_RANGE], 1, [Define to 1 if the function copy_file_range exists.])