unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: guile-devel@gnu.org
Subject: [PATCH] HP-UX 11.11 build fixes
Date: Thu, 17 Jul 2008 00:33:23 +0200	[thread overview]
Message-ID: <87wsjlv4r0.fsf@gnu.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 388 bytes --]

Hi,

FYI, I committed the attached patch, which handles the lack of `struct
dirent64' and `readdir64_r ()' on HP-UX 11.11 (and possibly other
versions).

I tested it on GNU/Linux (glibc 2.7) and HP-UX 11.11.  It'd be nice if
somebody could check whether the `dirent64' detection doesn't break on
MinGW since it normally uses custom `dirent' code (in `win32-dirent.h').

Thanks,
Ludovic.


[-- Attachment #2: The patch --]
[-- Type: text/x-patch, Size: 7808 bytes --]

From dc329592ff09b7300977d177eba430fe5dd83ecc Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Thu, 17 Jul 2008 00:17:56 +0200
Subject: [PATCH] Handle lack of `struct dirent64' and `readdir64_r ()' on HP-UX 11.11.

---
 ChangeLog                   |    5 +++++
 NEWS                        |    1 +
 configure.in                |   34 ++++++++++++++++++++++++++++++++--
 libguile/ChangeLog          |   10 ++++++++++
 libguile/_scm.h             |   12 ++++++++++--
 libguile/gen-scmconfig.c    |   13 +++++++++++++
 libguile/gen-scmconfig.h.in |    1 +
 7 files changed, 72 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index be0c84e..a33cf69 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-07-16  Ludovic Courtès  <ludo@gnu.org>
+
+	* configure.in: Look for `struct dirent64' and `readdir64_r ()',
+	not available on HP-UX 11.11.
+
 2008-07-06  Ludovic Courtès  <ludo@gnu.org>
 
 	* configure.in: Update to Autoconf 2.61.
diff --git a/NEWS b/NEWS
index aaea7af..3684490 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')
 
 \f
 Changes in 1.8.5 (since 1.8.4)
diff --git a/configure.in b/configure.in
index d5d2264..2c0d671 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 <sys/types.h>
+    #ifdef HAVE_DIRENT_H
+    # include <dirent.h>
+    #else
+    # define dirent direct
+    # ifdef HAVE_SYS_NDIR_H
+    #  include <sys/ndir.h>
+    # endif
+    # ifdef HAVE_SYS_DIR_H
+    #  include <sys/dir.h>
+    # endif
+    # ifdef HAVE_NDIR_H
+    #  include <ndir.h>
+    # 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 5c30574..2dc4f16 100644
--- a/libguile/ChangeLog
+++ b/libguile/ChangeLog
@@ -1,3 +1,13 @@
+2008-07-16  Ludovic Courtès  <ludo@gnu.org>
+
+	* 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  <ludo@gnu.org>
 
 	* strings.c (scm_c_symbol_length): New function.
diff --git a/libguile/_scm.h b/libguile/_scm.h
index 4d6ded6..6b728be 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 788b451..6d3fea6 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 cdc59b0..1be95af 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:
-- 
1.5.6.2


                 reply	other threads:[~2008-07-16 22:33 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wsjlv4r0.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=guile-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).