1# serial 20
2
3dnl From Jim Meyering.
4dnl
5dnl Check whether struct dirent has a member named d_ino.
6dnl
7
8# Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009-2021 Free Software
9# Foundation, Inc.
10
11# This file is free software; the Free Software Foundation
12# gives unlimited permission to copy and/or distribute it,
13# with or without modifications, as long as this notice is preserved.
14
15AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO],
16  [AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
17   AC_CACHE_CHECK([for d_ino member in directory struct],
18                  [gl_cv_struct_dirent_d_ino],
19     [AC_RUN_IFELSE(
20        [AC_LANG_PROGRAM(
21           [[#include <sys/types.h>
22             #include <sys/stat.h>
23             #include <dirent.h>
24           ]],
25           [[DIR *dp = opendir (".");
26             struct dirent *e;
27             struct stat st;
28             if (! dp)
29               return 1;
30             e = readdir (dp);
31             if (! e)
32               { closedir (dp); return 2; }
33             if (lstat (e->d_name, &st) != 0)
34               { closedir (dp); return 3; }
35             if (e->d_ino != st.st_ino)
36               { closedir (dp); return 4; }
37             closedir (dp);
38             return 0;
39           ]])],
40           [gl_cv_struct_dirent_d_ino=yes],
41           [gl_cv_struct_dirent_d_ino=no],
42           [case "$host_os" in
43                            # Guess yes on glibc systems with Linux kernel.
44              linux*-gnu*)  gl_cv_struct_dirent_d_ino="guessing yes" ;;
45                            # Guess yes on musl systems with Linux kernel.
46              linux*-musl*) gl_cv_struct_dirent_d_ino="guessing yes" ;;
47                            # Guess no on native Windows.
48              mingw*)       gl_cv_struct_dirent_d_ino="guessing no" ;;
49                            # If we don't know, obey --enable-cross-guesses.
50              *)            gl_cv_struct_dirent_d_ino="$gl_cross_guess_normal" ;;
51            esac
52           ])])
53   case "$gl_cv_struct_dirent_d_ino" in
54     *yes)
55       AC_DEFINE([D_INO_IN_DIRENT], [1],
56         [Define if struct dirent has a member d_ino that actually works.])
57       ;;
58   esac
59  ]
60)
61