diff --git a/ChangeLog b/ChangeLog index 85406c3bd..ae9117002 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,11 @@ Autoconf _AC_LIBOBJ_ALLOCA and Gnulib; specifically in involving a function calling itself. +2008-07-16 Ludovic Courtès + + * configure.in: Look for `struct dirent64' and `readdir64_r ()', + not available on HP-UX 11.11. + 2008-07-06 Ludovic Courtès * configure.in: Update to Autoconf 2.61. diff --git a/NEWS b/NEWS index aaea7af4a..3684490b7 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,7 @@ application code. ** `guile-config link' now prints `-L$libdir' before `-lguile' ** Fix build issue on Tru64 and ia64-hp-hpux11.23 (`SCM_UNPACK' macro) ** Fix build issue on mips, mipsel, powerpc and ia64 (stack direction) +** Fix build issue on hppa2.0w-hp-hpux11.11 (`dirent64' and `readdir64_r') Changes in 1.8.5 (since 1.8.4) diff --git a/configure.in b/configure.in index d5d226415..2c0d67166 100644 --- a/configure.in +++ b/configure.in @@ -583,9 +583,38 @@ AC_SUBST([SCM_I_GSC_NEEDS_STDINT_H]) AC_SUBST([SCM_I_GSC_NEEDS_INTTYPES_H]) AC_HEADER_STDC -AC_HEADER_DIRENT AC_HEADER_TIME AC_HEADER_SYS_WAIT +AC_HEADER_DIRENT + +# Reason for checking: +# +# HP-UX 11.11 (at least) doesn't provide `struct dirent64', even +# with `_LARGEFILE64_SOURCE', so check whether it's available. +# +AC_CHECK_MEMBER([struct dirent64.d_name], + [SCM_I_GSC_HAVE_STRUCT_DIRENT64=1], [SCM_I_GSC_HAVE_STRUCT_DIRENT64=0], + [ #ifndef _LARGEFILE64_SOURCE + # define _LARGEFILE64_SOURCE + #endif + + /* Per Autoconf manual. */ + #include + #ifdef HAVE_DIRENT_H + # include + #else + # define dirent direct + # ifdef HAVE_SYS_NDIR_H + # include + # endif + # ifdef HAVE_SYS_DIR_H + # include + # endif + # ifdef HAVE_NDIR_H + # include + # endif + #endif ]) +AC_SUBST([SCM_I_GSC_HAVE_STRUCT_DIRENT64]) # Reasons for testing: # complex.h - new in C99 @@ -683,13 +712,14 @@ AC_CHECK_HEADERS([assert.h crt_externs.h]) # pipe - not in mingw # _pipe - specific to mingw, taking 3 args # readdir_r - recent posix, not on old systems +# readdir64_r - not available on HP-UX 11.11 # stat64 - SuS largefile stuff, not on old systems # sysconf - not on old systems # truncate - not in mingw # isblank - available as a GNU extension or in C99 # _NSGetEnviron - Darwin specific # -AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe readdir_r readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strncasecmp]) +AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe readdir_r readdir64_r readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strncasecmp]) # Reasons for testing: # netdb.h - not in mingw diff --git a/libguile/ChangeLog b/libguile/ChangeLog index d9a47dc34..bc786c3d0 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -8,6 +8,16 @@ (DATASTART): Use _fdata instead of __data_start. (STACKBOTTOM): Changed from 0x80000000 to 0x7fff8000. +2008-07-16 Ludovic Courtès + + * gen-scmconfig.h.in (SCM_I_GSC_HAVE_STRUCT_DIRENT64): New. + * gen-scmconfig.c (main): Produce definitions of + `SCM_HAVE_STRUCT_DIRENT64' and `SCM_HAVE_READDIR64_R'. + * _scm.h (dirent_or_dirent64): Depend on + `SCM_HAVE_STRUCT_DIRENT64', for the sake of HP-UX 11.11. + (readdir_r_or_readdir64_r): Depend on `SCM_HAVE_READDIR64_R', + for HP-UX 11.11. + 2008-07-05 Ludovic Courtès * strings.c (scm_c_symbol_length): New function. diff --git a/libguile/_scm.h b/libguile/_scm.h index 4d6ded68e..6b728be2b 100644 --- a/libguile/_scm.h +++ b/libguile/_scm.h @@ -113,7 +113,11 @@ #endif /* These names are a bit long, but they make it clear what they represent. */ -#define dirent_or_dirent64 CHOOSE_LARGEFILE(dirent,dirent64) +#if SCM_HAVE_STRUCT_DIRENT64 == 1 +# define dirent_or_dirent64 CHOOSE_LARGEFILE(dirent,dirent64) +#else +# define dirent_or_dirent64 dirent +#endif #define fstat_or_fstat64 CHOOSE_LARGEFILE(fstat,fstat64) #define ftruncate_or_ftruncate64 CHOOSE_LARGEFILE(ftruncate,ftruncate64) #define lseek_or_lseek64 CHOOSE_LARGEFILE(lseek,lseek64) @@ -121,7 +125,11 @@ #define off_t_or_off64_t CHOOSE_LARGEFILE(off_t,off64_t) #define open_or_open64 CHOOSE_LARGEFILE(open,open64) #define readdir_or_readdir64 CHOOSE_LARGEFILE(readdir,readdir64) -#define readdir_r_or_readdir64_r CHOOSE_LARGEFILE(readdir_r,readdir64_r) +#if SCM_HAVE_READDIR64_R == 1 +# define readdir_r_or_readdir64_r CHOOSE_LARGEFILE(readdir_r,readdir64_r) +#else +# define readdir_r_or_readdir64_r readdir_r +#endif #define stat_or_stat64 CHOOSE_LARGEFILE(stat,stat64) #define truncate_or_truncate64 CHOOSE_LARGEFILE(truncate,truncate64) #define scm_from_off_t_or_off64_t CHOOSE_LARGEFILE(scm_from_off_t,scm_from_int64) diff --git a/libguile/gen-scmconfig.c b/libguile/gen-scmconfig.c index 788b45144..6d3fea679 100644 --- a/libguile/gen-scmconfig.c +++ b/libguile/gen-scmconfig.c @@ -387,6 +387,19 @@ main (int argc, char *argv[]) pf ("#define SCM_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER %d /* 0 or 1 */\n", SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER); + pf ("\n\n/*** File system access ***/\n"); + + pf ("/* Define to 1 if `struct dirent64' is available. */\n"); + pf ("#define SCM_HAVE_STRUCT_DIRENT64 %d /* 0 or 1 */\n", + SCM_I_GSC_HAVE_STRUCT_DIRENT64); + + pf ("/* Define to 1 if `readdir64_r ()' is available. */\n"); +#ifdef HAVE_READDIR64_R + pf ("#define SCM_HAVE_READDIR64_R 1 /* 0 or 1 */\n"); +#else + pf ("#define SCM_HAVE_READDIR64_R 0 /* 0 or 1 */\n"); +#endif + #if USE_DLL_IMPORT pf ("\n"); pf ("/* Define some additional CPP macros on Win32 platforms. */\n"); diff --git a/libguile/gen-scmconfig.h.in b/libguile/gen-scmconfig.h.in index cdc59b047..1be95af94 100644 --- a/libguile/gen-scmconfig.h.in +++ b/libguile/gen-scmconfig.h.in @@ -30,6 +30,7 @@ #define SCM_I_GSC_USE_NULL_THREADS @SCM_I_GSC_USE_NULL_THREADS@ #define SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT @SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT@ #define SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER @SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER@ +#define SCM_I_GSC_HAVE_STRUCT_DIRENT64 @SCM_I_GSC_HAVE_STRUCT_DIRENT64@ /* Local Variables: