Ian Kent 7bcbae
autofs-5.0.7 - workaround missing GNU versionsort extension
Ian Kent 7bcbae
Ian Kent 7bcbae
From: Chris Packham <chris.packham@alliedtelesis.co.nz>
Ian Kent 7bcbae
Ian Kent 7bcbae
alphasort() and scandir() are specified in POSIX.1-2008, versionsort()
Ian Kent 7bcbae
is a GNU extension. When versionsort isn't available fallback to using
Ian Kent 7bcbae
alphasort.
Ian Kent 7bcbae
---
Ian Kent 7bcbae
Ian Kent 7bcbae
 CHANGELOG            |    1 +
Ian Kent 7bcbae
 configure            |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++
Ian Kent 7bcbae
 configure.in         |    6 +++++
Ian Kent 7bcbae
 include/config.h.in  |    3 ++
Ian Kent 7bcbae
 modules/lookup_dir.c |    5 ++++
Ian Kent 7bcbae
 5 files changed, 77 insertions(+), 0 deletions(-)
Ian Kent 7bcbae
Ian Kent 7bcbae
Ian Kent 7bcbae
diff --git a/CHANGELOG b/CHANGELOG
Ian Kent 7bcbae
index 4eaa9f9..39388a5 100644
Ian Kent 7bcbae
--- a/CHANGELOG
Ian Kent 7bcbae
+++ b/CHANGELOG
Ian Kent 7bcbae
@@ -27,6 +27,7 @@
Ian Kent 7bcbae
 - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
Ian Kent 7bcbae
 - make yellow pages support optional.
Ian Kent 7bcbae
 - modules/replicated.c: use sin6_addr.s6_addr32.
Ian Kent 7bcbae
+- workaround missing GNU versionsort extension.
Ian Kent 7bcbae
 
Ian Kent 7bcbae
 25/07/2012 autofs-5.0.7
Ian Kent 7bcbae
 =======================
Ian Kent 7bcbae
diff --git a/configure b/configure
Ian Kent 7bcbae
index cf6428c..c1423d8 100755
Ian Kent 7bcbae
--- a/configure
Ian Kent 7bcbae
+++ b/configure
Ian Kent 7bcbae
@@ -4010,6 +4010,68 @@ $as_echo "yes" >&6; }
Ian Kent 7bcbae
   KRB5_FLAGS=`$KRB5_CONFIG --cflags`
Ian Kent 7bcbae
 fi
Ian Kent 7bcbae
 
Ian Kent 7bcbae
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing versionsort" >&5
Ian Kent 7bcbae
+$as_echo_n "checking for library containing versionsort... " >&6; }
Ian Kent 7bcbae
+if ${ac_cv_search_versionsort+:} false; then :
Ian Kent 7bcbae
+  $as_echo_n "(cached) " >&6
Ian Kent 7bcbae
+else
Ian Kent 7bcbae
+  ac_func_search_save_LIBS=$LIBS
Ian Kent 7bcbae
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
Ian Kent 7bcbae
+/* end confdefs.h.  */
Ian Kent 7bcbae
+
Ian Kent 7bcbae
+/* Override any GCC internal prototype to avoid an error.
Ian Kent 7bcbae
+   Use char because int might match the return type of a GCC
Ian Kent 7bcbae
+   builtin and then its argument prototype would still apply.  */
Ian Kent 7bcbae
+#ifdef __cplusplus
Ian Kent 7bcbae
+extern "C"
Ian Kent 7bcbae
+#endif
Ian Kent 7bcbae
+char versionsort ();
Ian Kent 7bcbae
+int
Ian Kent 7bcbae
+main ()
Ian Kent 7bcbae
+{
Ian Kent 7bcbae
+return versionsort ();
Ian Kent 7bcbae
+  ;
Ian Kent 7bcbae
+  return 0;
Ian Kent 7bcbae
+}
Ian Kent 7bcbae
+_ACEOF
Ian Kent 7bcbae
+for ac_lib in '' ; do
Ian Kent 7bcbae
+  if test -z "$ac_lib"; then
Ian Kent 7bcbae
+    ac_res="none required"
Ian Kent 7bcbae
+  else
Ian Kent 7bcbae
+    ac_res=-l$ac_lib
Ian Kent 7bcbae
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
Ian Kent 7bcbae
+  fi
Ian Kent 7bcbae
+  if ac_fn_c_try_link "$LINENO"; then :
Ian Kent 7bcbae
+  ac_cv_search_versionsort=$ac_res
Ian Kent 7bcbae
+fi
Ian Kent 7bcbae
+rm -f core conftest.err conftest.$ac_objext \
Ian Kent 7bcbae
+    conftest$ac_exeext
Ian Kent 7bcbae
+  if ${ac_cv_search_versionsort+:} false; then :
Ian Kent 7bcbae
+  break
Ian Kent 7bcbae
+fi
Ian Kent 7bcbae
+done
Ian Kent 7bcbae
+if ${ac_cv_search_versionsort+:} false; then :
Ian Kent 7bcbae
+
Ian Kent 7bcbae
+else
Ian Kent 7bcbae
+  ac_cv_search_versionsort=no
Ian Kent 7bcbae
+fi
Ian Kent 7bcbae
+rm conftest.$ac_ext
Ian Kent 7bcbae
+LIBS=$ac_func_search_save_LIBS
Ian Kent 7bcbae
+fi
Ian Kent 7bcbae
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_versionsort" >&5
Ian Kent 7bcbae
+$as_echo "$ac_cv_search_versionsort" >&6; }
Ian Kent 7bcbae
+ac_res=$ac_cv_search_versionsort
Ian Kent 7bcbae
+if test "$ac_res" != no; then :
Ian Kent 7bcbae
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
Ian Kent 7bcbae
+
Ian Kent 7bcbae
+fi
Ian Kent 7bcbae
+
Ian Kent 7bcbae
+if test "$ac_cv_search_versionsort" = "no"; then
Ian Kent 7bcbae
+
Ian Kent 7bcbae
+$as_echo "#define WITHOUT_VERSIONSORT 1" >>confdefs.h
Ian Kent 7bcbae
+
Ian Kent 7bcbae
+fi
Ian Kent 7bcbae
+
Ian Kent 7bcbae
 #
Ian Kent 7bcbae
 # glibc/libc 6 new libraries
Ian Kent 7bcbae
 #
Ian Kent 7bcbae
diff --git a/configure.in b/configure.in
Ian Kent 7bcbae
index 363c376..4029375 100644
Ian Kent 7bcbae
--- a/configure.in
Ian Kent 7bcbae
+++ b/configure.in
Ian Kent 7bcbae
@@ -163,6 +163,12 @@ AF_SLOPPY_MOUNT()
Ian Kent 7bcbae
 AF_CHECK_LIBXML()
Ian Kent 7bcbae
 AF_CHECK_KRB5()
Ian Kent 7bcbae
 
Ian Kent 7bcbae
+AC_SEARCH_LIBS([versionsort],[])
Ian Kent 7bcbae
+if test "$ac_cv_search_versionsort" = "no"; then
Ian Kent 7bcbae
+	AC_DEFINE(WITHOUT_VERSIONSORT, 1,
Ian Kent 7bcbae
+		[Define if your C library does not provide versionsort])
Ian Kent 7bcbae
+fi
Ian Kent 7bcbae
+
Ian Kent 7bcbae
 #
Ian Kent 7bcbae
 # glibc/libc 6 new libraries
Ian Kent 7bcbae
 #
Ian Kent 7bcbae
diff --git a/include/config.h.in b/include/config.h.in
Ian Kent 7bcbae
index 7f1c5b5..a2a05a8 100644
Ian Kent 7bcbae
--- a/include/config.h.in
Ian Kent 7bcbae
+++ b/include/config.h.in
Ian Kent 7bcbae
@@ -135,6 +135,9 @@
Ian Kent 7bcbae
 /* Define to 1 to use the libtirpc tsd usage workaround */
Ian Kent 7bcbae
 #undef TIRPC_WORKAROUND
Ian Kent 7bcbae
 
Ian Kent 7bcbae
+/* Define if your C library does not provide versionsort */
Ian Kent 7bcbae
+#undef WITHOUT_VERSIONSORT
Ian Kent 7bcbae
+
Ian Kent 7bcbae
 /* Define if using the dmalloc debugging malloc package */
Ian Kent 7bcbae
 #undef WITH_DMALLOC
Ian Kent 7bcbae
 
Ian Kent 7bcbae
diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
Ian Kent 7bcbae
index 33901c0..07471b7 100644
Ian Kent 7bcbae
--- a/modules/lookup_dir.c
Ian Kent 7bcbae
+++ b/modules/lookup_dir.c
Ian Kent 7bcbae
@@ -39,6 +39,11 @@
Ian Kent 7bcbae
 #define AUTOFS_DIR_EXT ".autofs"
Ian Kent 7bcbae
 #define AUTOFS_DIR_EXTSIZ (sizeof(AUTOFS_DIR_EXT) - 1)
Ian Kent 7bcbae
 
Ian Kent 7bcbae
+/* Work around non-GNU systems that don't provide versionsort */
Ian Kent 7bcbae
+#ifdef WITHOUT_VERSIONSORT
Ian Kent 7bcbae
+#define versionsort alphasort
Ian Kent 7bcbae
+#endif
Ian Kent 7bcbae
+
Ian Kent 7bcbae
 struct lookup_context {
Ian Kent 7bcbae
   const char *mapname;
Ian Kent 7bcbae
 };