Port to AIX and HP-UX. Support cross-compilation.
authorJim Meyering <jim@meyering.net>
Wed, 21 Apr 1999 02:21:47 +0000 (02:21 +0000)
committerJim Meyering <jim@meyering.net>
Wed, 21 Apr 1999 02:21:47 +0000 (02:21 +0000)
m4/lfs.m4

index 2a7a4fc..5c7c7ee 100644 (file)
--- a/m4/lfs.m4
+++ b/m4/lfs.m4
@@ -1,4 +1,4 @@
-#serial 2
+#serial 3
 
 dnl The problem is that the default compilation flags in Solaris 2.6 won't
 dnl let programs access large files;  you need to tell the compiler that
@@ -8,50 +8,99 @@ 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_LFS.
+dnl AC_LFS_FLAGS(FLAGSNAME)
+AC_DEFUN(AC_LFS_FLAGS,
+  [AC_CACHE_CHECK([for $1 value to request large file support], ac_cv_lfs_$1,
+     [ac_cv_lfs_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
+       ac_cv_lfs_$1=no
+       ifelse($1, CFLAGS,
+         [case "$host_os" in
+            # IRIX 6.2 and later
+            irix6.[[2-9]]* | irix6.1[[0-9]]* | irix[[7-9]].* | irix[[1-9]][[0-9]]*)
+              if test "$GCC" != yes; then
+                ac_cv_lfs_CFLAGS=-n32
+              fi
+              ac_save_CC="$CC"
+              CC="$ac_save_CC $ac_cv_lfs_CFLAGS"
+              AC_TRY_LINK(, , , ac_cv_lfs_CFLAGS=no)
+              CC="$ac_save_CC"
+          esac])
+      }])])
+
+dnl Internal subroutine of AC_LFS.
+dnl AC_LFS_SPACE_APPEND(VAR, VAL)
+AC_DEFUN(AC_LFS_SPACE_APPEND,
+  [case $2 in
+     no) ;;
+     ?*)
+       case "[$]$1" in
+        '') $1=$2 ;;
+        *) $1=[$]$1' '$2 ;;
+       esac ;;
+   esac])
+
+dnl Internal subroutine of AC_LFS.
+dnl AC_LFS_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
+AC_DEFUN(AC_LFS_MACRO_VALUE,
+  [AC_CACHE_CHECK([for $1], $2,
+     [[$2=no
+       $4
+       for ac_flag in $ac_cv_lfs_CFLAGS no; do
+        case "$ac_flag" in
+          -D$1)
+            $2=1 ;;
+          -D$1=*)
+            $2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
+        esac
+       done]])
+   if test "[$]$2" != no; then
+     AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
+   fi])
+
 AC_DEFUN(AC_LFS,
-[dnl
-  # If available, prefer support for large files unless the user specified
-  # one of the CPPFLAGS, LDFLAGS, or LIBS variables.
-  AC_MSG_CHECKING(whether large file support needs explicit enabling)
-  ac_getconfs=''
-  ac_result=yes
-  ac_set=''
-  ac_shellvars='CPPFLAGS LDFLAGS LIBS'
-  for ac_shellvar in $ac_shellvars; do
-    case $ac_shellvar in
-      CPPFLAGS) ac_lfsvar=LFS_CFLAGS ;;
-      *) ac_lfsvar=LFS_$ac_shellvar ;;
-    esac
-    eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
-    (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
-    ac_getconf=`getconf $ac_lfsvar`
-    ac_getconfs=$ac_getconfs$ac_getconf
-    eval ac_test_$ac_shellvar=\$ac_getconf
-  done
-  case "$ac_result" in
-  no)
-    case "`(uname -s -r) 2>/dev/null`" in
-    HP-UX' '?.10.[[2-9]][[0-9]]* | HP-UX' '?.1[[1-9]]* | HP-UX' '?.[[2-9]][[0-9]]*)
-      # HP-UX 10.20 and later support large files,
-      # but do not support `getconf LFS_CFLAGS'.
-      ac_test_CPPFLAGS='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-      ac_test_LDFLAGS=
-      ac_test_LIBS=
-      ac_getconfs=nonempty
-      ac_result=yes ;;
-    esac ;;
-  esac
-  case "$ac_result$ac_getconfs" in
-    yes) ac_result=no ;;
-  esac
-  case "$ac_result$ac_set" in
-    yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
-  esac
-  AC_MSG_RESULT($ac_result)
-  case $ac_result in
-    yes)
-      for ac_shellvar in $ac_shellvars; do
-       eval $ac_shellvar=\$ac_test_$ac_shellvar
-      done ;;
-  esac
-])
+  [AC_REQUIRE([AC_CANONICAL_HOST])
+   AC_ARG_ENABLE(lfs,
+     [  --disable-lfs           omit Large File Support])
+   if test "$enable_lfs" != no; then
+     AC_CHECK_TOOL(GETCONF, getconf)
+     AC_LFS_FLAGS(CFLAGS)
+     AC_LFS_FLAGS(LDFLAGS)
+     AC_LFS_FLAGS(LIBS)
+     for ac_flag in $ac_cv_lfs_CFLAGS no; do
+       case "$ac_flag" in
+        no) ;;
+        -D_FILE_OFFSET_BITS=*) ;;
+        -D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
+        -D_LARGE_FILES | -D_LARGE_FILES=*) ;;
+        -[[DI]]?* | -[[no]]32 | -n64)
+          AC_LFS_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
+        *)
+          AC_LFS_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
+       esac
+     done
+     AC_LFS_SPACE_APPEND(LDFLAGS, "$ac_cv_lfs_LDFLAGS")
+     AC_LFS_SPACE_APPEND(LIBS, "$ac_cv_lfs_LIBS")
+     AC_LFS_MACRO_VALUE(_FILE_OFFSET_BITS, ac_cv_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_file_offset_bits=64 ;;
+       esac])
+     AC_LFS_MACRO_VALUE(_LARGEFILE_SOURCE, ac_cv_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_largefile_source=1 ;;
+       esac])
+     AC_LFS_MACRO_VALUE(_LARGE_FILES, ac_cv_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_large_files=1 ;;
+       esac])
+   fi
+  ])