diff --git a/ChangeLog b/ChangeLog index 002706aa7ad137..a8601c2dfe3900 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,7 @@ -Sat Sep 3 23:55:17 2011 Nobuyoshi Nakada +Sat Sep 3 23:56:24 2011 Nobuyoshi Nakada + + * configure.in (sizeof_struct_dirent_too_small): check if struct + dirent.d_name is too small. * configure.in (RUBY_MINGW32): take tool prefix from CC. diff --git a/configure.in b/configure.in index 616837d6ec5db4..14165a3c18b90e 100644 --- a/configure.in +++ b/configure.in @@ -933,15 +933,6 @@ dnl Checks for libraries. AS_CASE(["$target_os"],[*bsd*|dragonfly*],[],[ac_cv_func_daemon=no]) AS_CASE(["$target_os"], -[solaris*], [ - AC_DEFINE(SIZEOF_STRUCT_DIRENT_TOO_SMALL, 1) - LIBS="-lm $LIBS" - ], -# GNU Hurd -[gnu*], [ - AC_DEFINE(SIZEOF_STRUCT_DIRENT_TOO_SMALL, 1) - LIBS="-lm $LIBS" - ], [nextstep*], [ ], [openstep*], [ ], [rhapsody*], [ ], @@ -1734,6 +1725,38 @@ fi RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include ]) +AC_CACHE_CHECK([whether struct dirent.d_name is too small], rb_cv_sizeof_struct_dirent_too_small, + [AC_COMPILE_IFELSE( + [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([ +@%:@if defined _WIN32 +@%:@ error <<>> +@%:@elif defined HAVE_DIRENT_H +@%:@ include +@%:@elif defined HAVE_DIRECT_H +@%:@ include +@%:@else +@%:@ define dirent direct +@%:@ if HAVE_SYS_NDIR_H +@%:@ include +@%:@ endif +@%:@ if HAVE_SYS_DIR_H +@%:@ include +@%:@ endif +@%:@ if HAVE_NDIR_H +@%:@ include +@%:@ endif +@%:@endif +@%:@include +@%:@define numberof(array) [(int)(sizeof(array) / sizeof((array)[0]))] +struct dirent d; +])], + [offsetof(struct dirent, [d_name[numberof(d.d_name)]]) - offsetof(struct dirent, d_name) < 256])], + [rb_cv_sizeof_struct_dirent_too_small=yes], + [rb_cv_sizeof_struct_dirent_too_small=no])]) +if test "$rb_cv_sizeof_struct_dirent_too_small" = yes; then + AC_DEFINE(SIZEOF_STRUCT_DIRENT_TOO_SMALL, 1) +fi + if test "$ac_cv_func_sysconf" = yes; then AC_DEFUN([RUBY_CHECK_SYSCONF], [dnl AC_CACHE_CHECK([whether _SC_$1 is supported], rb_cv_have_sc_[]m4_tolower($1),