[vlc-devel] [PATCH] configure: Make the dirfd(3) check more portable

Kamil Rytarowski n54 at gmx.com
Wed Mar 14 06:46:15 CET 2018


Current POSIX specifies that dirfd(3) shall be a function and optionally
a macro.

NetBSD uses traditionally a macro, without a function. This means that
the AC_CHECK_FUNCS() check is insufficient and it misses the macro
definition in the system headers. Replace this check with a
AC_COMPILE_IFELSE() logic that covers such cases and can detect correctly
the system feature.
---
 configure.ac | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 7af0979cfe..3200bdea2e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -582,7 +582,7 @@ need_libc=false
 
 dnl Check for usual libc functions
 AC_CHECK_FUNCS([accept4 daemon fcntl flock fstatvfs fork getenv getpwuid_r isatty memalign mkostemp mmap open_memstream newlocale openat pipe2 pread posix_fadvise posix_madvise posix_memalign setlocale stricmp strnicmp strptime uselocale])
-AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir flockfile fsync getdelim getpid lldiv memrchr nrand48 poll recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind timegm timespec_get strverscmp pathconf])
+AC_REPLACE_FUNCS([aligned_alloc atof atoll fdopendir flockfile fsync getdelim getpid lldiv memrchr nrand48 poll recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind timegm timespec_get strverscmp pathconf])
 AC_REPLACE_FUNCS([gettimeofday])
 AC_CHECK_FUNC(fdatasync,,
   [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
@@ -590,6 +590,13 @@ AC_CHECK_FUNC(fdatasync,,
 
 VLC_REPLACE_DECL([realpath], [#include <stdlib.h>])
 
+dnl dirfd can be either a function or a macro (sometimes both)
+AC_COMPILE_IFELSE([
+    AC_LANG_PROGRAM([[#include <dirent.h>
+        DIR *dir;]],[[
+        return(dirfd(dir));]])
+    ],[AC_DEFINE(HAVE_DIRFD,1,[Define to 1 if you have a dirfd function or macro])])
+
 dnl mingw64 implements those as static inline, not functions with C linkage
 VLC_REPLACE_DECL([asprintf], [#include <stdio.h>])
 VLC_REPLACE_DECL([vasprintf], [#include <stdio.h>])
-- 
2.16.2



More information about the vlc-devel mailing list