gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-2-g


From: Eli Zaretskii
Subject: [gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-2-g242f84c
Date: Tue, 14 May 2013 13:53:37 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, gawk-4.1-stable has been updated
       via  242f84cd211a13c4056d228aaa9bc1f57aa21763 (commit)
      from  c96323b5e32f54295556809833d2d6a44daa75d0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=242f84cd211a13c4056d228aaa9bc1f57aa21763

commit 242f84cd211a13c4056d228aaa9bc1f57aa21763
Author: Eli Zaretskii <address@hidden>
Date:   Tue May 14 16:26:29 2013 +0300

    Fix building, installing, and testing extensions on MS-Windows.
    
     test/Makefile.in (mpfr-tests, shlib-tests): Add a blank character
     between ' and /FOO/ in Gawk command lines, for the benefit of
     testing under MSYS Bash.
     test/filefuncs.awk (BEGIN): Call 'stat' on gawkapi.o, not on gawk,
     which does not exist on systems that produce gawk.exe.
    
     README_D/README.pc: Update the pc build and test instructions.
    
     pc/Makefile.tst (AWK): Set AWKLIBPATH so extensions could be found.
     (LS): New variable.
     (check): Add back shlib-tests and shlib-msg-end.
     (readdir): Add a warning regarding inode reporting by ls.exe.
     (fts, fork, fork2): Add message about expected failure on MinGW.
     pc/Makefile (install): Install the extensions.
     (install-strip): Likewise.
     pc/Makefile.ext: New file.
    
     io.c (devopen) [__EMX__ || __MINGW32__]: Produce EISDIR on MinGW
     when an attempt to open() a directory fails.
     (two_way_open) [__EMX__ || __MINGW32__]: When trying to open() a
     directory fails with EISDIR, assign FAKE_FD_VALUE to the file
     descriptor and attributes of a directory to its mode bits.  This
     is needed to support the readdir extension.
     gawkapi.h (FAKE_FD_VALUE): New macro, used in io.h and in
     extension/gawkdirfd.h.
    
     extension/rwarray.c [__MINGW32__]: Include winsock2.h instead of
     arpa/inet.h.
     extension/readdir.c [__MINGW32__]: Include windows.h.
     Include gawkapi.h before gawkdirfd.h, since the former defines
     FAKE_FD_VALUE needed by the latter.
     (ftype): Accept an additional argument, the directory that is
     being read.  Callers changed.
     [!DT_BLK]: Produce the file's type by calling 'stat' on it, if the
     dirent structure doesn't provide that.
     (get_inode): New function, to produce inode values on MS-Windows.
     (dir_get_record): Use it.
     extension/inplace.c (chown, link) [__MINGW32__]: Redirect to existing
     library functions.
     (mkstemp) [__MINGW32__]: New function, for MinGW, which doesn't
     have it in its library.
     (do_inplace_end) [__MINGW32__]: Remove the old file before
     renaming the new, since 'rename' on Windows cannot overwrite
     existing files.
     extension/gawkdirfd.h (ENOTSUP): Define to ENOSYS if not already defined.
     (DIR_TO_FD): If not defined yet, define to FAKE_FD_VALUE.
     extension/filefuncs.c (get_inode) [_WIN32]: New function, produces the
     file index used on Windows as its inode.
     (fill_stat_array) [_WIN32]: Use it.

diff --git a/ChangeLog b/ChangeLog
index fcf4e04..d52168f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2013-05-14  Eli Zaretskii  <address@hidden>
+
+       * io.c (devopen) [__EMX__ || __MINGW32__]: Produce EISDIR on MinGW
+       when an attempt to open() a directory fails.
+       (two_way_open) [__EMX__ || __MINGW32__]: When trying to open() a
+       directory fails with EISDIR, assign FAKE_FD_VALUE to the file
+       descriptor and attributes of a directory to its mode bits.  This
+       is needed to support the readdir extension.
+
+       * gawkapi.h (FAKE_FD_VALUE): New macro, used in io.h and in
+       extension/gawkdirfd.h.
+
 2013-05-09         Arnold D. Robbins     <address@hidden>
 
        * 4.1.0: Release tar ball made.
diff --git a/README_d/ChangeLog b/README_d/ChangeLog
index 814b272..3bd99ad 100644
--- a/README_d/ChangeLog
+++ b/README_d/ChangeLog
@@ -1,3 +1,7 @@
+2013-05-14  Eli Zaretskii  <address@hidden>
+
+       * README.pc: Update the pc build and test instructions.
+
 2013-05-09         Arnold D. Robbins     <address@hidden>
 
        * 4.1.0: Release tar ball made.
diff --git a/README_d/README.pc b/README_d/README.pc
index d989e5c..9971d7b 100644
--- a/README_d/README.pc
+++ b/README_d/README.pc
@@ -28,7 +28,8 @@ Copy the files in the `pc' directory (EXCEPT for `ChangeLog') 
to the
 directory with the rest of the gawk sources.  (The subdirectories of 
 `pc' need not be copied.)  The Makefile contains a configuration 
 section with comments, and may need to be edited in order to work
-with your make utility.
+with your make utility.  If you are building with MinGW, copy the
+file Makefile.ext to extension/Makefile.
 
 The "prefix" line in the Makefile is used during the install of gawk
 (and in building igawk.bat and igawk.cmd). Since the libraries for
@@ -40,6 +41,10 @@ OS/2 versions.  A list of targets will be printed if the 
make command is
 given without a target.  As an example, to build gawk using the djgpp
 tools, enter "make djgpp".
 
+For the MinGW build, after you build in the top-level directory, chdir
+to the extension subdirectory and say "make" there to build the
+extensions.
+
 
 Testing and installing gawk
 ---------------------------
@@ -54,9 +59,11 @@ and batch files. See the configuration section of the 
makefile.
 
 The file test/Makefile will need some editing (especially for DOS). A
 sample makefile with comments appears in pc/Makefile.tst, and can be
-used to modify test/Makefile for your platform.  In addition, some
-files in the test directory may need to have their end-of-line markers
-converted, as described in Makefile.tst.
+used to modify test/Makefile for your platform.  For starters, just
+copy pc/Makefile.tst to test/Makefile, then walk through the variables
+defined at the beginning and change them as appropriate for your
+setup.  In addition, some files in the test directory may need to have
+their end-of-line markers converted, as described in Makefile.tst.
 
 As with building gawk, the OS, shell, and long filename issues come into
 play when testing, too.  If you are testing gawk on a LFN aware system with
diff --git a/extension/ChangeLog b/extension/ChangeLog
index e01d6d1..ef2bcb9 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,33 @@
+2013-05-14  Eli Zaretskii  <address@hidden>
+
+       * rwarray.c [__MINGW32__]: Include winsock2.h instead of
+       arpa/inet.h.
+
+       * readdir.c [__MINGW32__]: Include windows.h.
+       Include gawkapi.h before gawkdirfd.h, since the former defines
+       FAKE_FD_VALUE needed by the latter.
+       (ftype): Accept an additional argument, the directory that is
+       being read.  Callers changed.
+       [!DT_BLK]: Produce the file's type by calling 'stat' on it, if the
+       dirent structure doesn't provide that.
+       (get_inode): New function, to produce inode values on MS-Windows.
+       (dir_get_record): Use it.
+
+       * inplace.c (chown, link) [__MINGW32__]: Redirect to existing
+       library functions.
+       (mkstemp) [__MINGW32__]: New function, for MinGW, which doesn't
+       have it in its library.
+       (do_inplace_end) [__MINGW32__]: Remove the old file before
+       renaming the new, since 'rename' on Windows cannot overwrite
+       existing files.
+
+       * gawkdirfd.h (ENOTSUP): Define to ENOSYS if not already defined.
+       (DIR_TO_FD): If not defined yet, define to FAKE_FD_VALUE.
+
+       * filefuncs.c (get_inode) [_WIN32]: New function, produces the
+       file index used on Windows as its inode.
+       (fill_stat_array) [_WIN32]: Use it.
+
 2013-05-09         Arnold D. Robbins     <address@hidden>
 
        * 4.1.0: Release tar ball made.
diff --git a/extension/filefuncs.c b/extension/filefuncs.c
index 1e8fc8d..277bb45 100644
--- a/extension/filefuncs.c
+++ b/extension/filefuncs.c
@@ -73,6 +73,29 @@
 #define S_ISVTX 0
 #define major(s) (s)
 #define minor(s) (0)
+
+#include <windows.h>
+
+/* get_inode --- get the inode of a file */
+static long long
+get_inode(const char *fname)
+{
+       HANDLE fh;
+       BY_HANDLE_FILE_INFORMATION info;
+
+       fh = CreateFile(fname, 0, 0, NULL, OPEN_EXISTING,
+                       FILE_FLAG_BACKUP_SEMANTICS, NULL);
+       if (fh == INVALID_HANDLE_VALUE)
+               return 0;
+       if (GetFileInformationByHandle(fh, &info)) {
+               long long inode = info.nFileIndexHigh;
+
+               inode <<= 32;
+               inode += info.nFileIndexLow;
+               return inode;
+       }
+       return 0;
+}
 #endif
 
 static const gawk_api_t *api;  /* for convenience macros to work */
@@ -302,7 +325,11 @@ fill_stat_array(const char *name, awk_array_t array, 
struct stat *sbuf)
        /* fill in the array */
        array_set(array, "name", make_const_string(name, strlen(name), & tmp));
        array_set_numeric(array, "dev", sbuf->st_dev);
+#ifdef _WIN32
+       array_set_numeric(array, "ino", (double)get_inode (name));
+#else
        array_set_numeric(array, "ino", sbuf->st_ino);
+#endif
        array_set_numeric(array, "mode", sbuf->st_mode);
        array_set_numeric(array, "nlink", sbuf->st_nlink);
        array_set_numeric(array, "uid", sbuf->st_uid);
diff --git a/extension/gawkdirfd.h b/extension/gawkdirfd.h
index 1fbd6f5..e75f9bc 100644
--- a/extension/gawkdirfd.h
+++ b/extension/gawkdirfd.h
@@ -21,6 +21,14 @@
 
 #include <config.h>
 
+#ifndef ENOTSUP
+# define ENOTSUP ENOSYS
+#endif
+
+#ifndef DIR_TO_FD
+# define DIR_TO_FD(d) (FAKE_FD_VALUE)
+#endif
+
 #if !defined(HAVE_DIRFD) && (!defined(HAVE_DECL_DIRFD) || HAVE_DECL_DIRFD == 0)
 int
 dirfd (DIR *dir_p)
diff --git a/extension/inplace.c b/extension/inplace.c
index ded4746..ad6f0e2 100644
--- a/extension/inplace.c
+++ b/extension/inplace.c
@@ -51,6 +51,20 @@
 #define        S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
 #endif
 
+#ifdef __MINGW32__
+# define chown(x,y,z)  (0)
+# define link(f1,f2)   rename(f1,f2)
+int
+mkstemp (char *template)
+{
+  char *tmp_fname = _mktemp (template);
+
+  if (tmp_fname)
+    return _open (tmp_fname, O_RDWR | O_CREAT | O_EXCL, S_IREAD | S_IWRITE);
+  return -1;
+}
+#endif
+
 static const gawk_api_t *api;  /* for convenience macros to work */
 static awk_ext_id_t *ext_id;
 static const char *ext_version = "inplace extension: version 1.0";
@@ -225,6 +239,10 @@ do_inplace_end(int nargs, awk_value_t *result)
                free(bakname);
        }
 
+#ifdef __MINGW32__
+       unlink(filename.str_value.str);
+#endif
+
        if (rename(state.tname, filename.str_value.str) < 0)
                fatal(ext_id, _("inplace_end: rename(`%s', `%s') failed (%s)"),
                        state.tname, filename.str_value.str, strerror(errno));
diff --git a/extension/readdir.c b/extension/readdir.c
index 5ca4dc6..9d53ad9 100644
--- a/extension/readdir.c
+++ b/extension/readdir.c
@@ -50,10 +50,14 @@
 #error Cannot compile the dirent extension on this system!
 #endif
 
-#include "gawkdirfd.h"
+#ifdef __MINGW32__
+#include <windows.h>
+#endif
 
 #include "gawkapi.h"
 
+#include "gawkdirfd.h"
+
 #include "gettext.h"
 #define _(msgid)  gettext(msgid)
 #define N_(msgid) msgid
@@ -77,7 +81,7 @@ typedef struct open_directory {
 /* ftype --- return type of file as a single character string */
 
 static const char *
-ftype(struct dirent *entry)
+ftype(struct dirent *entry, const char *dirname)
 {
 #ifdef DT_BLK
        switch (entry->d_type) {
@@ -92,10 +96,67 @@ ftype(struct dirent *entry)
        case DT_UNKNOWN: return "u";
        }
 #else
+       char fname[PATH_MAX];
+       struct stat sbuf;
+
+       strcpy(fname, dirname);
+       strcat(fname, "/");
+       strcat(fname, entry->d_name);
+       if (stat(fname, &sbuf) == 0) {
+               if (S_ISBLK(sbuf.st_mode))
+                       return "b";
+               if (S_ISCHR(sbuf.st_mode))
+                       return "c";
+               if (S_ISDIR(sbuf.st_mode))
+                       return "d";
+               if (S_ISFIFO(sbuf.st_mode))
+                       return "p";
+               if (S_ISREG(sbuf.st_mode))
+                       return "f";
+#ifdef S_ISLNK
+               if (S_ISLNK(sbuf.st_mode))
+                       return "l";
+#endif
+#ifdef S_ISSOCK
+               if (S_ISSOCK(sbuf.st_mode))
+                       return "s";
+#endif
+       }
        return "u";
 #endif
 }
 
+/* get_inode --- get the inode of a file */
+#ifdef ZOS_USS
+static long
+#else
+static long long
+#endif
+get_inode(struct dirent *entry, const char *dirname)
+{
+#ifdef __MINGW32__
+       char fname[PATH_MAX];
+       HANDLE fh;
+       BY_HANDLE_FILE_INFORMATION info;
+
+       sprintf(fname, "%s\\%s", dirname, entry->d_name);
+       fh = CreateFile(fname, 0, 0, NULL, OPEN_EXISTING,
+                       FILE_FLAG_BACKUP_SEMANTICS, NULL);
+       if (fh == INVALID_HANDLE_VALUE)
+               return 0;
+       if (GetFileInformationByHandle(fh, &info)) {
+               long long inode = info.nFileIndexHigh;
+
+               inode <<= 32;
+               inode += info.nFileIndexLow;
+               return inode;
+       }
+       return 0;
+#else
+       return entry->d_ino;
+#endif
+}
+
 /* dir_get_record --- get one record at a time out of a directory */
 
 static int
@@ -107,6 +168,11 @@ dir_get_record(char **out, awk_input_buf_t *iobuf, int 
*errcode,
        int len;
        open_directory_t *the_dir;
        const char *ftstr;
+#ifdef ZOS_USS
+       unsigned long ino;
+#else
+       unsigned long long ino;
+#endif
 
        /*
         * The caller sets *errcode to 0, so we should set it only if an
@@ -129,17 +195,17 @@ dir_get_record(char **out, awk_input_buf_t *iobuf, int 
*errcode,
                return EOF;
        }
 
-#ifdef ZOS_USS
-       len = sprintf(the_dir->buf, "%lu/%s",
-                       (unsigned long) dirent->d_ino,
-                       dirent->d_name);
+       ino = get_inode (dirent, iobuf->name);
+
+#if defined(ZOS_USS)
+       len = sprintf(the_dir->buf, "%lu/%s", ino, dirent->d_name);
+#elif __MINGW32__
+       len = sprintf(the_dir->buf, "%I64u/%s", ino, dirent->d_name);
 #else
-       len = sprintf(the_dir->buf, "%llu/%s",
-                       (unsigned long long) dirent->d_ino,
-                       dirent->d_name);
+       len = sprintf(the_dir->buf, "%llu/%s", ino, dirent->d_name);
 #endif
 
-       ftstr = ftype(dirent);
+       ftstr = ftype(dirent, iobuf->name);
        len += sprintf(the_dir->buf + len, "/%s", ftstr);
 
        *out = the_dir->buf;
diff --git a/extension/rwarray.c b/extension/rwarray.c
index d7b26c4..6185000 100644
--- a/extension/rwarray.c
+++ b/extension/rwarray.c
@@ -39,7 +39,11 @@
 #include <string.h>
 #include <unistd.h>
 
+#ifdef __MINGW32__
+#include <winsock2.h>
+#else
 #include <arpa/inet.h>
+#endif
 #include <sys/types.h>
 #include <sys/stat.h>
 
diff --git a/gawkapi.h b/gawkapi.h
index cc50bba..c5cc460 100644
--- a/gawkapi.h
+++ b/gawkapi.h
@@ -113,6 +113,10 @@ extern "C" {
 #define awk_const const
 #endif
 
+/* This is for fake directory file descriptors on systems that don't
+   allow to open() a directory.  */
+#define FAKE_FD_VALUE 42
+
 typedef enum awk_bool {
        awk_false = 0,
        awk_true
diff --git a/io.c b/io.c
index 7e3626b..6024c4f 100644
--- a/io.c
+++ b/io.c
@@ -1625,9 +1625,10 @@ devopen(const char *name, const char *mode)
 strictopen:
        if (openfd == INVALID_HANDLE)
                openfd = open(name, flag, 0666);
-#ifdef __EMX__
+#if defined(__EMX__) || defined(__MINGW32__)
        if (openfd == INVALID_HANDLE && errno == EACCES) {
-               /* on OS/2 directory access via open() is not permitted */
+               /* On OS/2 and Windows directory access via open() is
+                  not permitted.  */
                struct stat buf;
 
                if (stat(name, & buf) == 0 && S_ISDIR(buf.st_mode))
@@ -2883,6 +2884,12 @@ iop_alloc(int fd, const char *name, int errno_val)
 
        if (fd != INVALID_HANDLE)
                fstat(fd, & iop->public.sbuf);
+#if defined(__EMX__) || defined(__MINGW32__)
+       else if (errno_val == EISDIR) {
+               iop->public.sbuf.st_mode = (_S_IFDIR | _S_IRWXU);
+               iop->public.fd = FAKE_FD_VALUE;
+       }
+#endif
 
        return iop;
 }
diff --git a/pc/ChangeLog b/pc/ChangeLog
index eeae976..2c246fc 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,16 @@
+2013-05-14  Eli Zaretskii  <address@hidden>
+
+       * Makefile.tst (AWK): Set AWKLIBPATH so extensions could be found.
+       (LS): New variable.
+       (check): Add back shlib-tests and shlib-msg-end.
+       (readdir): Add a warning regarding inode reporting by ls.exe.
+       (fts, fork, fork2): Add message about expected failure on MinGW.
+
+       * Makefile (install): Install the extensions.
+       (install-strip): Likewise.
+
+       * Makefile.ext: New file.
+
 2013-05-09         Arnold D. Robbins     <address@hidden>
 
        * 4.1.0: Release tar ball made.
diff --git a/pc/Makefile b/pc/Makefile
index b234446..4152ed2 100644
--- a/pc/Makefile
+++ b/pc/Makefile
@@ -263,6 +263,7 @@ alloca$O:   alloca.c
 
 
 install: install$(install)
+       -$(MAKE) -C extension install-extensions
 
 install1:
        echo extproc sh $(prefix)/bin/igawk.cmd > igawk.cmd
@@ -286,6 +287,7 @@ install2:
 
 install-strip: install$(install)
        strip "$(prefix)/bin"/*.exe
+       -$(MAKE) -C extension $@
 
 clean:
        -rm -rf gawk *.exe gawk.map *.o *.obj core a.out $(RSPFILE) $(PRSPFILE) 
$(DRSPFILE) $(DYN_EXP)
diff --git a/pc/Makefile.ext b/pc/Makefile.ext
new file mode 100644
index 0000000..8971014
--- /dev/null
+++ b/pc/Makefile.ext
@@ -0,0 +1,75 @@
+# extension/Makefile for the MinGW build
+#
+# Copyright (C) 2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+prefix = c:/gnu
+pkgdatadir = $(prefix)/lib/awk
+pkgextensiondir = $(prefix)/lib/gawk
+includedir = $(prefix)/include
+libdir = $(prefix)/lib
+datadir = $(prefix)/share
+pkgdatadir = $(datadir)/gawk-extensions
+pkgincludedir = $(includedir)/gawk-extensions
+pkglibdir = $(libdir)/gawk-extensions
+pkglibexecdir = $(libexecdir)/gawk-extensions
+
+SOEXT = dll
+SIMPLE_EXTENSIONS = inplace.$(SOEXT) ordchr.$(SOEXT) readfile.$(SOEXT)\
+ revoutput.$(SOEXT) revtwoway.$(SOEXT) testext.$(SOEXT)
+ALL_EXTENSIONS = filefuncs.$(SOEXT) fnmatch.$(SOEXT) inplace.$(SOEXT)\
+ ordchr.$(SOEXT) readdir.$(SOEXT) readfile.$(SOEXT) revoutput.$(SOEXT)\
+ revtwoway.$(SOEXT) rwarray.$(SOEXT) testext.$(SOEXT) time.$(SOEXT)
+
+extensions: $(ALL_EXTENSIONS)
+
+fnmatch.$(SOEXT): fnmatch.c
+       gcc -I.. -I../missing_d -DHAVE_FNMATCH_H -shared -gdwarf-2 -g3 -o $@ 
fnmatch.c
+
+readdir.$(SOEXT): readdir.c gawkdirfd.h
+       gcc -I.. -DHAVE_DIRENT_H -shared -gdwarf-2 -g3 -o $@ readdir.c
+
+rwarray.$(SOEXT): rwarray.c
+       gcc -I.. -shared -gdwarf-2 -g3 -o $@ rwarray.c -lws2_32
+
+filefuncs.$(SOEXT): filefuncs.c stack.c stack.h gawkfts.h
+       gcc -I.. -shared -gdwarf-2 -g3 -o $@ filefuncs.c stack.c
+
+time.$(SOEXT): time.c
+       gcc -DHAVE_GETSYSTEMTIMEASFILETIME -I.. -shared -gdwarf-2 -g3 -o $@ 
time.c
+
+$(SIMPLE_EXTENSIONS):
+       gcc -I.. -shared -gdwarf-2 -g3 -o $@ $(@:.$(SOEXT)=.c)
+
+$(ALL_EXTENSIONS): ../gawkapi.h ../gettext.h
+
+inplace.$(SOEXT): inplace.c
+ordchr.$(SOEXT): ordchr.c
+readfile.$(SOEXT): readfile.c
+revoutput.$(SOEXT): revoutput.c
+rwarray.$(SOEXT): rwarray.c
+testext.$(SOEXT): testext.c
+time.$(SOEXT): time.c
+
+# This must not be called 'install' because there's a file INSTALL,
+# and case-insensitive filesystems will gladly accept it.
+install-extensions:
+       -mkdir "$(pkgextensiondir)"
+       cp *.$(SOEXT) "$(pkgextensiondir)"
+       -mkdir "$(prefix)/share/man/man3"
+       cp *.3am "$(prefix)/share/man/man3"
+
+install-strip: install-extensions
+       strip --strip-unneeded "$(pkgextensiondir)"/*.$(SOEXT)
+
+clean:
+       -rm -f *.$(SOEXT)
+
diff --git a/pc/Makefile.tst b/pc/Makefile.tst
index dff0cac..cc188fd 100644
--- a/pc/Makefile.tst
+++ b/pc/Makefile.tst
@@ -60,11 +60,16 @@
 SHELL = /bin/sh
 
 # Point to gawk
-AWK = ../gawk.exe
+AWK = AWKLIBPATH=../extension ../gawk.exe
 # Also point to gawk but for DOS commands needing backslashes.  We need
 # the forward slash version too or 'arrayparam' fails.
 AWK2 = '..\gawk.exe'
 AWKPROG = ../gawk.exe
+# Point $(LS) to a version of ls.exe that reports true Windows file
+# index numbers, because this is what the readdir test expects.
+# Otherwise, the readdir test will fail.  (The MSYS ls.exe doesn't
+# report full index values.)
+LS = ls.exe
 
 # Define PGAWK
 PGAWK = ../gawk.exe -p
@@ -100,12 +105,13 @@ CP = cp
 #CP = : && command -c copy
 #CP  = command.com /c copy
 
-MV = cmd.exe /c ren
+#MV = cmd.exe /c ren
+MV = mv
 
-#MKDIR = mkdir
+MKDIR = mkdir
 #MKDIR = gmkdir
 #MKDIR = : && command -c mkdir
-MKDIR  = command.com /c mkdir
+#MKDIR  = command.com /c mkdir
 
 # Set your unix-style date function here
 #DATE = date
@@ -237,13 +243,10 @@ check:    msg \
        extend-msg-start gawk-extensions extend-msg-end \
        machine-msg-start machine-tests machine-msg-end \
        charset-msg-start charset-tests charset-msg-end \
-       shlib-msg-start \
+       shlib-msg-start shlib-tests     shlib-msg-end \
        mpfr-msg-start   mpfr-tests      mpfr-msg-end \
        pass-fail
 
-# Removed from 'check': shlib-tests     shlib-msg-end
-# FIXME: add back when the extensions are built by default.
-
 basic: $(BASIC_TESTS)
 
 unix-tests: $(UNIX_TESTS)
@@ -1007,17 +1010,15 @@ readdir:
        echo If it does, try rerunning on an ext'[234]' filesystem. ; \
        fi
        @echo $@
+       @echo This test may fail if $(LS) does not report full Windows file 
index as the inode
        @$(AWK) -f $(srcdir)/readdir.awk $(top_srcdir) > _$@
-       @ls -afli $(top_srcdir) | sed 1d | $(AWK) -f $(srcdir)/readdir0.awk -v 
extout=_$@ > address@hidden
+       @$(LS) -afli $(top_srcdir) | sed 1d | $(AWK) -f $(srcdir)/readdir0.awk 
-v extout=_$@ > address@hidden
        @-$(CMP) address@hidden _$@ && rm -f address@hidden _$@
 
 fts:
-       @if [ "`uname`" = IRIX ];  then \
-       echo This test may fail on IRIX systems when run on an NFS filesystem.; 
\
-       echo If it does, try rerunning on an xfs filesystem. ; \
-       fi
        @echo $@
-       @$(AWK) -f $(srcdir)/fts.awk
+       @echo Expect $@ to fail with MinGW because function 'fts' is not 
defined.
+       @-$(AWK) -f $(srcdir)/fts.awk
        @-$(CMP) address@hidden _$@ && rm -f address@hidden _$@
 
 charasbytes:
@@ -2362,11 +2363,13 @@ filefuncs:
 
 fork:
        @echo $@
+       @echo Expect $@ to fail with MinGW because fork.dll is not available
        @AWKPATH=$(srcdir) $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
        @-$(CMP) $(srcdir)/address@hidden _$@ && rm -f _$@
 
 fork2:
        @echo $@
+       @echo Expect $@ to fail with MinGW because fork.dll is not available
        @AWKPATH=$(srcdir) $(AWK) -f address@hidden  >_$@ 2>&1 || echo EXIT 
CODE: $$? >>_$@
        @-$(CMP) $(srcdir)/address@hidden _$@ && rm -f _$@
 
diff --git a/test/ChangeLog b/test/ChangeLog
index 20b4d6e..fda3b68 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,12 @@
+2013-05-14  Eli Zaretskii  <address@hidden>
+
+       * Makefile.in (mpfr-tests, shlib-tests): Add a blank character
+       between ' and /FOO/ in Gawk command lines, for the benefit of
+       testing under MSYS Bash.
+
+       * filefuncs.awk (BEGIN): Call 'stat' on gawkapi.o, not on gawk,
+       which does not exist on systems that produce gawk.exe.
+
 2013-05-09         Arnold D. Robbins     <address@hidden>
 
        * 4.1.0: Release tar ball made.
diff --git a/test/Makefile.in b/test/Makefile.in
index 46e7f57..bfecafc 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -1453,14 +1453,18 @@ inet:   inetmesg $(INET_TESTS)
 
 machine-tests: $(MACHINE_TESTS)
 
+# The blank between ' and /MPFR/ is for running tests on Windows under
+# MSYS, which thinks /MPFR is a Unix-style file name and converts it
+# to Windows format, butchering it in the process.  Likewise for /API/
+# in the next shlib-tests.
 mpfr-tests:
-       @if $(AWK) --version | $(AWK) '/MPFR/ { exit 1 }' ; then \
+       @if $(AWK) --version | $(AWK) ' /MPFR/ { exit 1 }' ; then \
        echo MPFR tests not supported on this system ; \
        else $(MAKE) $(MPFR_TESTS) ; \
        fi
 
 shlib-tests:
-       @if $(AWK) --version | $(AWK) '/API/ { exit 1 }' ; then \
+       @if $(AWK) --version | $(AWK) ' /API/ { exit 1 }' ; then \
        echo shlib tests not supported on this system ; \
        else $(MAKE) shlib-real-tests ; \
        fi
diff --git a/test/filefuncs.awk b/test/filefuncs.awk
index aa53274..4bbfcb5 100644
--- a/test/filefuncs.awk
+++ b/test/filefuncs.awk
@@ -6,8 +6,8 @@ BEGIN {
       exit 1
    }
 
-   if (stat(ARGV[0], st) < 0) {
-      printf "Error: stat(%s) failed with ERRNO %s\n", ARGV[0], ERRNO
+   if (stat(ARGV[0] "api.o", st) < 0) {
+      printf "Error: stat(%s) failed with ERRNO %s\n", ARGV[0] "api.o", ERRNO
       exit 1
    }
 

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog             |   12 +++++++
 README_d/ChangeLog    |    4 ++
 README_d/README.pc    |   15 ++++++--
 extension/ChangeLog   |   30 +++++++++++++++++
 extension/filefuncs.c |   27 +++++++++++++++
 extension/gawkdirfd.h |    8 ++++
 extension/inplace.c   |   18 ++++++++++
 extension/readdir.c   |   86 +++++++++++++++++++++++++++++++++++++++++++------
 extension/rwarray.c   |    4 ++
 gawkapi.h             |    4 ++
 io.c                  |   11 +++++-
 pc/ChangeLog          |   13 +++++++
 pc/Makefile           |    2 +
 pc/Makefile.ext       |   75 ++++++++++++++++++++++++++++++++++++++++++
 pc/Makefile.tst       |   31 ++++++++++--------
 test/ChangeLog        |    9 +++++
 test/Makefile.in      |    8 +++-
 test/filefuncs.awk    |    4 +-
 18 files changed, 327 insertions(+), 34 deletions(-)
 create mode 100644 pc/Makefile.ext


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]