[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#130509: Patch for large file support in dpkg's md5sum



tags 130509 +patch
thanks

I've worked out the attached patch for large file support in md5sum as
supplied with dpkg, blatantly borrowed from the configure code in the
textutils package which has a working md5sum. This should also help
with LFS for the rest of dpkg - as a start, make sure that config.h is
#included in each source file before the system headers like stdio.h
and unistd.h:

sledge:/$ grep -irl __USE_LARGEFILE64 /usr/include 
/usr/include/dirent.h
/usr/include/fcntl.h
/usr/include/features.h
/usr/include/ftw.h
/usr/include/sys/types.h
/usr/include/sys/statfs.h
/usr/include/sys/stat.h
/usr/include/sys/resource.h
/usr/include/sys/mman.h
/usr/include/sys/statvfs.h
/usr/include/bits/dirent.h
/usr/include/bits/confname.h
/usr/include/bits/stat.h
/usr/include/bits/statfs.h
/usr/include/bits/statvfs.h
/usr/include/bits/fcntl.h
/usr/include/bits/resource.h
/usr/include/stdio.h
/usr/include/stdlib.h
/usr/include/unistd.h
/usr/include/aio.h

-- 
Steve McIntyre, Cambridge, UK.                                steve@einval.com
<a href=http://www.einval.com/steve/>My home page</a>
"Can't keep my eyes from the circling sky,                 +------------------
"Tongue-tied & twisted, Just an earth-bound misfit, I..."  |Finger for PGP key
diff -uNr dpkg-1.9.20/aclocal.m4 dpkg-1.9.20.steve/aclocal.m4
--- dpkg-1.9.20/aclocal.m4	Sun Mar 17 09:49:48 2002
+++ dpkg-1.9.20.steve/aclocal.m4	Mon Apr  8 00:45:25 2002
@@ -663,3 +663,116 @@
  fi
 ])
 
+dnl By default, many hosts won't let programs access large files;
+dnl one must use special compiler options to get large-file access to work.
+dnl For more details about this brain damage please see:
+dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
+
+dnl Written by Paul Eggert <eggert@twinsun.com>.
+
+dnl Internal subroutine of AC_SYS_LARGEFILE.
+dnl AC_SYS_LARGEFILE_FLAGS(FLAGSNAME)
+AC_DEFUN(AC_SYS_LARGEFILE_FLAGS,
+  [AC_CACHE_CHECK([for $1 value to request large file support],
+     ac_cv_sys_largefile_$1,
+     [ac_cv_sys_largefile_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
+        ac_cv_sys_largefile_$1=no
+        ifelse($1, CFLAGS,
+          [case "$host_os" in
+           # IRIX 6.2 and later require cc -n32.
+changequote(, )dnl
+           irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
+changequote([, ])dnl
+             if test "$GCC" != yes; then
+               ac_cv_sys_largefile_CFLAGS=-n32
+             fi
+             ac_save_CC="$CC"
+             CC="$CC $ac_cv_sys_largefile_CFLAGS"
+             AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
+             CC="$ac_save_CC"
+           esac])
+      }])])
+
+dnl Internal subroutine of AC_SYS_LARGEFILE.
+dnl AC_SYS_LARGEFILE_SPACE_APPEND(VAR, VAL)
+AC_DEFUN(AC_SYS_LARGEFILE_SPACE_APPEND,
+  [case $2 in
+   no) ;;
+   ?*)
+     case "[$]$1" in
+     '') $1=$2 ;;
+     *) $1=[$]$1' '$2 ;;
+     esac ;;
+   esac])
+
+dnl Internal subroutine of AC_SYS_LARGEFILE.
+dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
+AC_DEFUN(AC_SYS_LARGEFILE_MACRO_VALUE,
+  [AC_CACHE_CHECK([for $1], $2,
+     [$2=no
+changequote(, )dnl
+      $4
+      for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
+        case "$ac_flag" in
+        -D$1)
+          $2=1 ;;
+        -D$1=*)
+          $2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
+        esac
+      done
+changequote([, ])dnl
+      ])
+   if test "[$]$2" != no; then
+     AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
+   fi])
+
+AC_DEFUN(AC_SYS_LARGEFILE,
+  [AC_REQUIRE([AC_CANONICAL_HOST])
+   AC_ARG_ENABLE(largefile,
+     [  --disable-largefile     omit support for large files])
+   if test "$enable_largefile" != no; then
+     AC_CHECK_TOOL(GETCONF, getconf)
+     AC_SYS_LARGEFILE_FLAGS(CFLAGS)
+     AC_SYS_LARGEFILE_FLAGS(LDFLAGS)
+     AC_SYS_LARGEFILE_FLAGS(LIBS)
+
+     for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
+       case "$ac_flag" in
+       no) ;;
+       -D_FILE_OFFSET_BITS=*) ;;
+       -D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
+       -D_LARGE_FILES | -D_LARGE_FILES=*) ;;
+       -D?* | -I?*)
+         AC_SYS_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
+       *)
+         AC_SYS_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
+       esac
+     done
+     AC_SYS_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
+     AC_SYS_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
+     AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
+       ac_cv_sys_file_offset_bits,
+       [Number of bits in a file offset, on hosts where this is settable.]
+       [case "$host_os" in
+        # HP-UX 10.20 and later
+        hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
+          ac_cv_sys_file_offset_bits=64 ;;
+        esac])
+     AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
+       ac_cv_sys_largefile_source,
+       [Define to make fseeko etc. visible, on some hosts.],
+       [case "$host_os" in
+        # HP-UX 10.20 and later
+        hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
+          ac_cv_sys_largefile_source=1 ;;
+        esac])
+     AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
+       ac_cv_sys_large_files,
+       [Define for large files, on AIX-style hosts.],
+       [case "$host_os" in
+        # AIX 4.2 and later
+        aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
+          ac_cv_sys_large_files=1 ;;
+        esac])
+   fi
+  ])
diff -uNr dpkg-1.9.20/configure.in dpkg-1.9.20.steve/configure.in
--- dpkg-1.9.20/configure.in	Fri Feb  1 18:18:38 2002
+++ dpkg-1.9.20.steve/configure.in	Mon Apr  8 00:47:32 2002
@@ -67,6 +67,11 @@
 VERSION=`cat $srcdir/version-nr`
 AC_SUBST(VERSION)
 
+dnl This test must come as early as possible after the compiler configuration
+dnl tests, because the choice of the file model can (in principle) affect
+dnl whether functions and headers are available, whether they work, etc.
+AC_SYS_LARGEFILE
+
 dnl test to see if srcdir already configured
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
diff -uNr dpkg-1.9.20/utils/md5sum.c dpkg-1.9.20.steve/utils/md5sum.c
--- dpkg-1.9.20/utils/md5sum.c	Sat Apr 28 22:22:51 2001
+++ dpkg-1.9.20.steve/utils/md5sum.c	Mon Apr  8 01:16:18 2002
@@ -13,14 +13,15 @@
  *   to support GNU gettext.
  * This file is in the public domain.
  */
+
+#include "config.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <getopt.h>
 #include <unistd.h>
 
-#include "config.h"
-
 /* Take care of NLS matters.  */
 
 #if HAVE_LOCALE_H

Reply to: