Neil Jerram <[EMAIL PROTECTED]> writes:

> Neil Jerram <[EMAIL PROTECTED]> writes:
>
>> In that light, and also because a Guile without LARGEFILE64 support is
>> surely better than no Guile at all, I think we should address this
>> problem for the Mac OSes (and also HP-UX, per [1]), by adding a
>> --disable-64-calls option to ./configure, whose effect will be to
>> prevent Guile from trying to use xxx64() sys and library calls.
>
> OK, attached is the patch that I propose for this.  Note that the
> option will actually be --without-64-calls, not --disable..., because
> --disable is supposed to be for optional features provided by the
> package being built.
>
> Any comments?
>
> Thanks,
>       Neil

Er... and here is that attachment. :-)

Index: configure.in
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/configure.in,v
retrieving revision 1.268.2.35
diff -u -r1.268.2.35 configure.in
--- configure.in	10 Oct 2007 16:58:56 -0000	1.268.2.35
+++ configure.in	30 Jan 2008 23:02:34 -0000
@@ -173,6 +173,47 @@
   [  --disable-elisp         omit Emacs Lisp support],,
   enable_elisp=yes)
 
+dnl  Added the following configure option in January 2008 following
+dnl  investigation of problems with "64" system and library calls on
+dnl  Darwin (MacOS X).  The libguile code (_scm.h) assumes that if a
+dnl  system has stat64, it will have all the other 64 APIs too; but on
+dnl  Darwin, stat64 is there but other APIs are missing.
+dnl 
+dnl  It also appears, from the Darwin docs, that most system call APIs
+dnl  there (i.e. the traditional ones _without_ "64" in their names) have
+dnl  been 64-bit-capable for a long time now, so it isn't necessary to
+dnl  use "64" versions anyway.  For example, Darwin's off_t is 64-bit.
+dnl 
+dnl  A similar problem has been reported for HP-UX:
+dnl  http://www.nabble.com/Building-guile-1.8.2-on-hpux-td13106681.html
+dnl 
+dnl  Therefore, and also because a Guile without LARGEFILE64 support is
+dnl  better than no Guile at all, we provide this option to suppress
+dnl  trying to use "64" calls.
+dnl 
+dnl  It may be that for some 64-bit function on Darwin/HP-UX we do need
+dnl  to use a "64" call, and hence that by using --without-64-calls we're
+dnl  missing out on that.  If so, someone can work on that in the future.
+dnl  For now, --without-64-calls allows Guile to build on OSs where it
+dnl  wasn't building before.
+AC_ARG_WITH([64-calls],
+  AC_HELP_STRING([--without-64-calls],
+                 [don't attempt to use system and library calls with "64" in their names]),
+  [use_64_calls=$withval],
+  [use_64_calls=yes
+   case $host in
+     *-apple-darwin* )
+       use_64_calls=no
+       ;;
+   esac])
+echo "use_64_calls=$use_64_calls"
+case "$use_64_calls" in
+  y* )
+    AC_DEFINE(GUILE_USE_64_CALLS, 1,
+      [Define to 1 in order to try to use "64" versions of system and library calls.])
+    ;;
+esac
+
 #--------------------------------------------------------------------
 
 dnl Check for dynamic linking
Index: libguile/_scm.h
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/libguile/_scm.h,v
retrieving revision 1.34.2.7
diff -u -r1.34.2.7 _scm.h
--- libguile/_scm.h	22 Jan 2008 21:12:05 -0000	1.34.2.7
+++ libguile/_scm.h	30 Jan 2008 23:02:35 -0000
@@ -114,7 +114,7 @@
 
 
 
-#if HAVE_STAT64
+#if GUILE_USE_64_CALLS && HAVE_STAT64
 #define CHOOSE_LARGEFILE(foo,foo64)     foo64
 #else
 #define CHOOSE_LARGEFILE(foo,foo64)     foo
Index: libguile/fports.c
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/libguile/fports.c,v
retrieving revision 1.137.2.6
diff -u -r1.137.2.6 fports.c
--- libguile/fports.c	28 Sep 2006 01:03:51 -0000	1.137.2.6
+++ libguile/fports.c	30 Jan 2008 23:02:35 -0000
@@ -670,7 +670,7 @@
    case on NetBSD apparently), then fport_seek_or_seek64 is right to be
    fport_seek already.  */
 
-#if HAVE_STAT64 && SIZEOF_OFF_T != SIZEOF_OFF64_T
+#if GUILE_USE_64_CALLS && HAVE_STAT64 && SIZEOF_OFF_T != SIZEOF_OFF64_T
 static off_t
 fport_seek (SCM port, off_t offset, int whence)
 {

Reply via email to