])# FP_PROG_FO_PROCESSOR
-dnl ** Check which CATALOG file we have to use with DocBook SGML.
-dnl
-dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
-dnl
-dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
-dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
-dnl is set to "no". JADE is the jade executable and STYLESHEET
-dnl a DocBook style sheet.
-dnl
-AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
-[AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
-[
-cat > conftest.sgml << EOF
-<!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
-<Article>
-<ArtHeader>
-<Title>Test</Title>
-<Author><OtherName>Test</OtherName></Author>
-<Address>Test</Address>
-<PubDate>Test</PubDate>
-</ArtHeader>
-<Sect1><Title>Test</Title>
-<Para>
-Test.
-</Para>
-</Sect1>
-</Article>
-EOF
-fptools_cv_sgml_catalog=no
-if test -z "$SGML_CATALOG_FILES" ; then
- for fptools_catalog in $4; do
- ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
- if AC_TRY_EVAL(ac_try); then
- fptools_cv_sgml_catalog=[$]fptools_catalog
- break
- fi
- done
-else
-# If the env var SGML_CATALOG_FILES is defined, assume things are cool.
- fptools_cv_sgml_catalog="yes"
-fi
-])
-rm -rf conftest*
-if test $fptools_cv_sgml_catalog != "no"; then
- $1=$fptools_cv_sgml_catalog
-fi
-])
-
-
# FP_CHECK_WIN32
# --------------
# If Windows is the target platform (e.g. MinGW/MSYS or Cygwin with
fi
])
+
+dnl @synopsis FP_READDIR_EOF_ERRNO
+dnl
+dnl Check what readdir() sets 'errno' to upon reaching
+dnl end of directory; not setting it is the correct thing to do,
+dnl but mingw based versions have set it to ENOENT until recently
+dnl (summer 2004).
+dnl
+dnl
+AC_DEFUN(FP_READDIR_EOF_ERRNO,
+[AC_CACHE_CHECK([what readdir sets errno to upon EOF], fptools_cv_readdir_eof_errno,
+[AC_TRY_RUN([#include <dirent.h>
+#include <stdio.h>
+#include <errno.h>
+int
+main(argc, argv)
+int argc;
+char **argv;
+{
+ FILE *f=fopen("conftestval", "w");
+#if defined(__MINGW32__)
+ int fd = mkdir("testdir");
+#else
+ int fd = mkdir("testdir", 0666);
+#endif
+ DIR* dp;
+ struct dirent* de;
+ int err = 0;
+
+ if (!f) return 1;
+ if (fd == -1) {
+ fprintf(stderr,"unable to create directory; quitting.\n");
+ return 1;
+ }
+ close(fd);
+ dp = opendir("testdir");
+ if (!dp) {
+ fprintf(stderr,"unable to browse directory; quitting.\n");
+ rmdir("testdir");
+ return 1;
+ }
+
+ /* the assumption here is that readdir() will only return NULL
+ * due to reaching the end of the directory.
+ */
+ while (de = readdir(dp)) {
+ ;
+ }
+ err = errno;
+ fprintf(f,"%d", err);
+ fclose(f);
+ closedir(de);
+ rmdir("testdir");
+ return 0;
+}],fptools_cv_readdir_eof_errno=`cat conftestval`, fptools_cv_readdir_eof_errno=bogus, fptools_cv_readdir_eof_errno=0)])
+dnl the cross value is somewhat bogus.
+AC_DEFINE_UNQUOTED([READDIR_ERRNO_EOF], [$fptools_cv_readdir_eof_errno], [readdir() sets errno to this upon EOF])
+])
+
+dnl @synopsis FP_DIRENT_FLAT_LAYOUT
+dnl
+dnl Check whether 'struct dirent' (in dirent.h) has d_name defined
+dnl as being the final field in a struct, or a pointer to somewhere
+dnl else. The former is the standardly thing to do, but mingw defns
+dnl have for the longest time gone for the latter. They no longer do,
+dnl hence the need to configure test for this.
+dnl
+dnl
+AC_DEFUN(FP_DIRENT_FLAT_LAYOUT,
+[AC_CACHE_CHECK([if struct dirent layout is flat], fptools_cv_dirent_flat_layout,
+[AC_TRY_RUN([#include <dirent.h>
+#include <stdio.h>
+#include <string.h>
+int
+main(argc, argv)
+int argc;
+char **argv;
+{
+ struct dirent de;
+ /*
+ * Check whether d_name is defined as
+ * struct dirent { .... ; char d_name[..]; }
+ * or
+ * struct dirent { .... ; char* d_name; }
+ *
+ * Returns 0 if the former.
+ */
+ memset(&de,0,sizeof(struct dirent));
+ return ((int)de.d_name == 0);
+}],fptools_cv_dirent_flat_layout=yes, fptools_cv_dirent_flat_layout=no, fptools_cv_dirent_flat_layout=yes)])
+dnl the cross value is somewhat bogus.
+if test "$fptools_cv_dirent_flat_layout" = yes; then
+AC_DEFINE([STRUCT_DIRENT_FLAT_LAYOUT], [1], [Define to 1 if struct dirent is a flat structure])
+fi
+])
+
+
# LocalWords: fi