bug-gnulib
[Top][All Lists]
Advanced

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

Re: levels of Windows support


From: Bruno Haible
Subject: Re: levels of Windows support
Date: Wed, 10 May 2017 23:27:46 +0200
User-agent: KMail/5.1.3 (Linux/4.4.0-75-generic; KDE/5.18.0; x86_64; ; )

Eli Zaretskii wrote:
> > Would a gnulib-wide option "ignore MSVC portability" be useful for Emacs?
> 
> Yes, most probably, because Emacs no longer supports MSVC builds
> (although you might still find traces of that in the sources).

OK, so I'm documenting that the existing practice of Emacs (namely,
--avoid=msvc-inval --avoid=msvc-nothrow) works for this purpose, and
make it work throughout gnulib.


2017-05-10 Bruno Haible  <address@hidden>

        Implement a way to opt out from MSVC support.
        This is useful for Emacs.
        * modules/msvc-nothrow (configure.ac): Invoke gl_MODULE_INDICATOR.
        * lib/accept4.c: Include <io.h> as an alternative to msvc-nothrow.h.
        * lib/error.c: Likewise.
        * lib/fcntl.c: Likewise.
        * lib/flock.c: Likewise.
        * lib/fstat.c: Likewise.
        * lib/fsync.c: Likewise.
        * lib/ioctl.c: Likewise.
        * lib/isapipe.c: Likewise.
        * lib/lseek.c: Likewise.
        * lib/nonblocking.c: Likewise.
        * lib/poll.c: Likewise.
        * lib/select.c: Likewise.
        * lib/sockets.h: Likewise.
        * lib/sockets.c: Likewise.
        * lib/stdio-read.c: Likewise.
        * lib/stdio-write.c: Likewise.
        * lib/utimens.c: Likewise.
        * lib/w32sock.h: Likewise.
        * lib/w32spawn.h: Likewise.
        * tests/test-cloexec.c: Likewise.
        * tests/test-dup-safer.c: Likewise.
        * tests/test-dup2.c: Likewise.
        * tests/test-dup3.c: Likewise.
        * tests/test-fcntl.c: Likewise.
        * tests/test-pipe.c: Likewise.
        * tests/test-pipe2.c: Likewise.
        * lib/ftruncate.c: Likewise.
        (chsize_nothrow): Renamed from chsize.
        * lib/msvc-nothrow.c: Don't include msvc-inval.h if
        HAVE_MSVC_INVALID_PARAMETER_HANDLER is not defined.
        * lib/close.c: Likewise.
        * lib/dup.c: Likewise.
        * lib/fclose.c: Likewise.
        * lib/raise.c: Likewise.
        * tests/test-fgetc.c: Likewise.
        * tests/test-fputc.c: Likewise.
        * tests/test-fread.c: Likewise.
        * tests/test-fwrite.c: Likewise.
        * lib/getdtablesize.c: Likewise.
        (_setmaxstdio_nothrow): Renamed from _setmaxstdio.
        * lib/isatty.c: Don't include msvc-inval.h if
        HAVE_MSVC_INVALID_PARAMETER_HANDLER is not defined.
        Include <io.h> as an alternative to msvc-nothrow.h.
        * lib/read.c: Likewise.
        * lib/write.c: Likewise.
        * lib/dup2.c: Likewise.
        (dup2_nothrow): New function.
        (ms_windows_dup2): Use it.
        * m4/close.m4 (gl_FUNC_CLOSE): Invoke gl_MSVC_INVAL and test
        HAVE_MSVC_INVALID_PARAMETER_HANDLER only if gl_MSVC_INVAL is defined.
        * m4/dup.m4 (gl_FUNC_DUP): Likewise.
        * m4/fdopen.m4 (gl_FUNC_FDOPEN): Likewise.
        * m4/raise.m4 (gl_FUNC_RAISE): Likewise.
        * m4/read.m4 (gl_FUNC_READ): Likewise.
        * m4/write.m4 (gl_FUNC_WRITE): Likewise.
        * doc/windows-without-msvc.texi: New file.
        * doc/gnulib.texi (Native Windows Support without MSVC Support): New
        section.

diff --git a/doc/gnulib.texi b/doc/gnulib.texi
index 378cee6..d23ab9c 100644
--- a/doc/gnulib.texi
+++ b/doc/gnulib.texi
@@ -6324,12 +6324,15 @@ to POSIX that it can be treated like any other 
Unix-like platform.
 @menu
 * Libtool and Windows::
 * Windows sockets::
+* Native Windows Support without MSVC Support::
 @end menu
 
 @include windows-libtool.texi
 
 @include windows-sockets.texi
 
address@hidden windows-without-msvc.texi
+
 
 @node Particular Modules
 @chapter Particular Modules
diff --git a/doc/windows-without-msvc.texi b/doc/windows-without-msvc.texi
new file mode 100644
index 0000000..781612b
--- /dev/null
+++ b/doc/windows-without-msvc.texi
@@ -0,0 +1,8 @@
address@hidden Native Windows Support without MSVC Support
address@hidden Native Windows Support without MSVC Support
+
+If your package does not desire to have MSVC support, that is, if MinGW
+shall be the only native Windows platform that you wish to get support
+for from Gnulib, and you wish to minimize the number of files imported
+from Gnulib accordingly, you can do so by passing the options
address@hidden --avoid=msvc-nothrow} to @code{gnulib-tool}.
diff --git a/lib/accept4.c b/lib/accept4.c
index 040fb9f..997f75a 100644
--- a/lib/accept4.c
+++ b/lib/accept4.c
@@ -22,7 +22,11 @@
 #include <errno.h>
 #include <fcntl.h>
 #include "binary-io.h"
-#include "msvc-nothrow.h"
+#if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+#else
+# include <io.h>
+#endif
 
 #ifndef SOCK_CLOEXEC
 # define SOCK_CLOEXEC 0
diff --git a/lib/close.c b/lib/close.c
index 3e45187..6a72c32 100644
--- a/lib/close.c
+++ b/lib/close.c
@@ -22,7 +22,9 @@
 #include <errno.h>
 
 #include "fd-hook.h"
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #undef close
 
diff --git a/lib/dup.c b/lib/dup.c
index 819e9e3..69887b0 100644
--- a/lib/dup.c
+++ b/lib/dup.c
@@ -22,7 +22,9 @@
 
 #include <errno.h>
 
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #undef dup
 
diff --git a/lib/dup2.c b/lib/dup2.c
index c0c7cad..002dc8c 100644
--- a/lib/dup2.c
+++ b/lib/dup2.c
@@ -35,10 +35,39 @@
 #  define WIN32_LEAN_AND_MEAN
 #  include <windows.h>
 
-#  include "msvc-inval.h"
+#  if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#   include "msvc-inval.h"
+#  endif
 
 /* Get _get_osfhandle.  */
-#  include "msvc-nothrow.h"
+#  if GNULIB_MSVC_NOTHROW
+#   include "msvc-nothrow.h"
+#  else
+#   include <io.h>
+#  endif
+
+#  if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+dup2_nothrow (int fd, int desired_fd)
+{
+  int result;
+
+  TRY_MSVC_INVAL
+    {
+      result = dup2 (fd, desired_fd);
+    }
+  CATCH_MSVC_INVAL
+    {
+      errno = EBADF;
+      result = -1;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+#  else
+#   define dup2_nothrow dup2
+#  endif
 
 static int
 ms_windows_dup2 (int fd, int desired_fd)
@@ -66,16 +95,7 @@ ms_windows_dup2 (int fd, int desired_fd)
       return -1;
     }
 
-  TRY_MSVC_INVAL
-    {
-      result = dup2 (fd, desired_fd);
-    }
-  CATCH_MSVC_INVAL
-    {
-      errno = EBADF;
-      result = -1;
-    }
-  DONE_MSVC_INVAL;
+  result = dup2_nothrow (fd, desired_fd);
 
   if (result == 0)
     result = desired_fd;
diff --git a/lib/error.c b/lib/error.c
index ed9b37a..418d1ab 100644
--- a/lib/error.c
+++ b/lib/error.c
@@ -98,7 +98,11 @@ extern void __error_at_line (int status, int errnum, const 
char *file_name,
 #  define WIN32_LEAN_AND_MEAN
 #  include <windows.h>
 /* Get _get_osfhandle.  */
-#  include "msvc-nothrow.h"
+#  if GNULIB_MSVC_NOTHROW
+#   include "msvc-nothrow.h"
+#  else
+#   include <io.h>
+#  endif
 # endif
 
 /* The gnulib override of fcntl is not needed in this file.  */
diff --git a/lib/fclose.c b/lib/fclose.c
index facff2b..fc6f608 100644
--- a/lib/fclose.c
+++ b/lib/fclose.c
@@ -23,7 +23,9 @@
 #include <unistd.h>
 
 #include "freading.h"
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #undef fclose
 
diff --git a/lib/fcntl.c b/lib/fcntl.c
index afe1546..d4dd144 100644
--- a/lib/fcntl.c
+++ b/lib/fcntl.c
@@ -38,7 +38,11 @@
 # include <windows.h>
 
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 /* Upper bound on getdtablesize().  See lib/getdtablesize.c.  */
 # define OPEN_MAX_MAX 0x10000
diff --git a/lib/flock.c b/lib/flock.c
index 7698e43..0c55d52 100644
--- a/lib/flock.c
+++ b/lib/flock.c
@@ -33,7 +33,11 @@
 # include <errno.h>
 
 /* _get_osfhandle */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 /* Determine the current size of a file.  Because the other braindead
  * APIs we'll call need lower/upper 32 bit pairs, keep the file size
diff --git a/lib/fstat.c b/lib/fstat.c
index a4896e3..605ac7d 100644
--- a/lib/fstat.c
+++ b/lib/fstat.c
@@ -56,7 +56,11 @@ orig_fstat (int fd, struct stat *buf)
 #ifdef WINDOWS_NATIVE
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 # include "stat-w32.h"
 #endif
 
diff --git a/lib/fsync.c b/lib/fsync.c
index d7de6d8..846f308 100644
--- a/lib/fsync.c
+++ b/lib/fsync.c
@@ -34,7 +34,11 @@
 # include <errno.h>
 
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 int
 fsync (int fd)
diff --git a/lib/ftruncate.c b/lib/ftruncate.c
index 913df19..f0ecae2 100644
--- a/lib/ftruncate.c
+++ b/lib/ftruncate.c
@@ -38,7 +38,11 @@
 #  include <windows.h>
 
 /* Get _get_osfhandle.  */
-#  include "msvc-nothrow.h"
+#  if GNULIB_MSVC_NOTHROW
+#   include "msvc-nothrow.h"
+#  else
+#   include <io.h>
+#  endif
 
 static BOOL
 SetFileSize (HANDLE h, LONGLONG size)
@@ -175,13 +179,14 @@ chsize_nothrow (int fd, long length)
 
   return result;
 }
-#   define chsize chsize_nothrow
+#  else
+#   define chsize_nothrow chsize
 #  endif
 
 int
 ftruncate (int fd, off_t length)
 {
-  return chsize (fd, length);
+  return chsize_nothrow (fd, length);
 }
 
 # endif
diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c
index 7fabb51..c356cf4 100644
--- a/lib/getdtablesize.c
+++ b/lib/getdtablesize.c
@@ -24,7 +24,9 @@
 
 # include <stdio.h>
 
-# include "msvc-inval.h"
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#  include "msvc-inval.h"
+# endif
 
 # if HAVE_MSVC_INVALID_PARAMETER_HANDLER
 static int
@@ -44,7 +46,8 @@ _setmaxstdio_nothrow (int newmax)
 
   return result;
 }
-#  define _setmaxstdio _setmaxstdio_nothrow
+# else
+#  define _setmaxstdio_nothrow _setmaxstdio
 # endif
 
 /* Cache for the previous getdtablesize () result.  Safe to cache because
@@ -76,9 +79,9 @@ getdtablesize (void)
          freed when we call _setmaxstdio with the original value.  */
       int orig_max_stdio = _getmaxstdio ();
       unsigned int bound;
-      for (bound = 0x10000; _setmaxstdio (bound) < 0; bound = bound / 2)
+      for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 
2)
         ;
-      _setmaxstdio (orig_max_stdio);
+      _setmaxstdio_nothrow (orig_max_stdio);
       dtablesize = bound;
     }
   return dtablesize;
diff --git a/lib/ioctl.c b/lib/ioctl.c
index a28a3ae..f142558 100644
--- a/lib/ioctl.c
+++ b/lib/ioctl.c
@@ -52,7 +52,11 @@ rpl_ioctl (int fd, int request, ... /* {void *,char *} arg 
*/)
 
 # include "fd-hook.h"
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 static int
 primary_ioctl (int fd, int request, void *arg)
diff --git a/lib/isapipe.c b/lib/isapipe.c
index dbc63b5..535ece9 100644
--- a/lib/isapipe.c
+++ b/lib/isapipe.c
@@ -30,7 +30,11 @@
 # include <windows.h>
 
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 int
 isapipe (int fd)
diff --git a/lib/isatty.c b/lib/isatty.c
index f050426..dba4380 100644
--- a/lib/isatty.c
+++ b/lib/isatty.c
@@ -27,10 +27,16 @@
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 /* Get _get_osfhandle().  */
-#include "msvc-nothrow.h"
+#if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+#else
+# include <io.h>
+#endif
 
 static BOOL IsConsoleHandle (HANDLE h)
 {
diff --git a/lib/lseek.c b/lib/lseek.c
index e603539..9c991a3 100644
--- a/lib/lseek.c
+++ b/lib/lseek.c
@@ -24,7 +24,11 @@
 /* Get GetFileType.  */
 # include <windows.h>
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #else
 # include <sys/stat.h>
 #endif
diff --git a/lib/msvc-nothrow.c b/lib/msvc-nothrow.c
index 300ed41..86a8808 100644
--- a/lib/msvc-nothrow.c
+++ b/lib/msvc-nothrow.c
@@ -24,7 +24,9 @@
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #undef _get_osfhandle
 
diff --git a/lib/nonblocking.c b/lib/nonblocking.c
index 3d031aa..b9ed86a 100644
--- a/lib/nonblocking.c
+++ b/lib/nonblocking.c
@@ -32,7 +32,11 @@
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 int
 get_nonblocking_flag (int desc)
diff --git a/lib/poll.c b/lib/poll.c
index 078b1ba..9115bcd 100644
--- a/lib/poll.c
+++ b/lib/poll.c
@@ -41,7 +41,11 @@
 # include <io.h>
 # include <stdio.h>
 # include <conio.h>
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #else
 # include <sys/time.h>
 # include <unistd.h>
diff --git a/lib/raise.c b/lib/raise.c
index d3325a6..0a6d8ca 100644
--- a/lib/raise.c
+++ b/lib/raise.c
@@ -27,7 +27,9 @@
 
 # include <errno.h>
 
-# include "msvc-inval.h"
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#  include "msvc-inval.h"
+# endif
 
 # undef raise
 
diff --git a/lib/read.c b/lib/read.c
index 08108f7..a9b943f 100644
--- a/lib/read.c
+++ b/lib/read.c
@@ -28,8 +28,14 @@
 # define WIN32_LEAN_AND_MEAN  /* avoid including junk */
 # include <windows.h>
 
-# include "msvc-inval.h"
-# include "msvc-nothrow.h"
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#  include "msvc-inval.h"
+# endif
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 # undef read
 
diff --git a/lib/select.c b/lib/select.c
index ac86c49..01b1982 100644
--- a/lib/select.c
+++ b/lib/select.c
@@ -39,7 +39,11 @@
 /* Get the overridden 'struct timeval'.  */
 #include <sys/time.h>
 
-#include "msvc-nothrow.h"
+#if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+#else
+# include <io.h>
+#endif
 
 #undef select
 
diff --git a/lib/sockets.c b/lib/sockets.c
index 9333ee4..028e20e 100644
--- a/lib/sockets.c
+++ b/lib/sockets.c
@@ -28,7 +28,11 @@
 # include <sys/socket.h>
 
 # include "fd-hook.h"
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 /* Get set_winsock_errno, FD_TO_SOCKET etc. */
 # include "w32sock.h"
diff --git a/lib/sockets.h b/lib/sockets.h
index 8392e57..23ad74d 100644
--- a/lib/sockets.h
+++ b/lib/sockets.h
@@ -18,7 +18,7 @@
 /* Written by Simon Josefsson */
 
 #ifndef SOCKETS_H
-# define SOCKETS_H 1
+#define SOCKETS_H 1
 
 #define SOCKETS_1_0 0x0001
 #define SOCKETS_1_1 0x0101
@@ -43,9 +43,13 @@ int gl_sockets_cleanup (void)
    other library that only accepts sockets. */
 #ifdef WINDOWS_SOCKETS
 
-#include <sys/socket.h>
+# include <sys/socket.h>
 
-#include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 static inline SOCKET
 gl_fd_to_handle (int fd)
@@ -55,7 +59,7 @@ gl_fd_to_handle (int fd)
 
 #else
 
-#define gl_fd_to_handle(x) (x)
+# define gl_fd_to_handle(x) (x)
 
 #endif /* WINDOWS_SOCKETS */
 
diff --git a/lib/stdio-read.c b/lib/stdio-read.c
index 8caf2f0..98db749 100644
--- a/lib/stdio-read.c
+++ b/lib/stdio-read.c
@@ -37,7 +37,11 @@
 #  define WIN32_LEAN_AND_MEAN  /* avoid including junk */
 #  include <windows.h>
 
-#  include "msvc-nothrow.h"
+#  if GNULIB_MSVC_NOTHROW
+#   include "msvc-nothrow.h"
+#  else
+#   include <io.h>
+#  endif
 
 #  define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \
   if (ferror (stream))                                                        \
diff --git a/lib/stdio-write.c b/lib/stdio-write.c
index 8ad693b..34b22f5 100644
--- a/lib/stdio-write.c
+++ b/lib/stdio-write.c
@@ -39,7 +39,11 @@
 #  define WIN32_LEAN_AND_MEAN  /* avoid including junk */
 #  include <windows.h>
 
-#  include "msvc-nothrow.h"
+#  if GNULIB_MSVC_NOTHROW
+#   include "msvc-nothrow.h"
+#  else
+#   include <io.h>
+#  endif
 
 #  if GNULIB_NONBLOCKING
 #   define CLEAR_ERRNO \
diff --git a/lib/utimens.c b/lib/utimens.c
index b4bfa8e..ff4eab0 100644
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -44,7 +44,11 @@
 # define USE_SETFILETIME
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #endif
 
 /* Avoid recursion with rpl_futimens or rpl_utimensat.  */
diff --git a/lib/w32sock.h b/lib/w32sock.h
index 8ac8ab7..2f753fb 100644
--- a/lib/w32sock.h
+++ b/lib/w32sock.h
@@ -26,7 +26,11 @@
 #include <io.h>
 
 /* Get _get_osfhandle().  */
-#include "msvc-nothrow.h"
+#if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+#else
+# include <io.h>
+#endif
 
 #define FD_TO_SOCKET(fd)   ((SOCKET) _get_osfhandle ((fd)))
 #define SOCKET_TO_FD(fh)   (_open_osfhandle ((intptr_t) (fh), O_RDWR | 
O_BINARY))
diff --git a/lib/w32spawn.h b/lib/w32spawn.h
index 7932662..26ff658 100644
--- a/lib/w32spawn.h
+++ b/lib/w32spawn.h
@@ -30,7 +30,11 @@
 #include <errno.h>
 
 /* Get _get_osfhandle().  */
-#include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 #include "cloexec.h"
 #include "xalloc.h"
diff --git a/lib/write.c b/lib/write.c
index 6a3b623..b81db62 100644
--- a/lib/write.c
+++ b/lib/write.c
@@ -34,8 +34,14 @@
 # define WIN32_LEAN_AND_MEAN  /* avoid including junk */
 # include <windows.h>
 
-# include "msvc-inval.h"
-# include "msvc-nothrow.h"
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#  include "msvc-inval.h"
+# endif
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 # undef write
 
diff --git a/m4/close.m4 b/m4/close.m4
index 005a43a..ed357ab 100644
--- a/m4/close.m4
+++ b/m4/close.m4
@@ -1,4 +1,4 @@
-# close.m4 serial 8
+# close.m4 serial 9
 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,10 +7,12 @@ dnl with or without modifications, as long as this notice is 
preserved.
 AC_DEFUN([gl_FUNC_CLOSE],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
-  AC_REQUIRE([gl_MSVC_INVAL])
-  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
-    REPLACE_CLOSE=1
-  fi
+  m4_ifdef([gl_MSVC_INVAL], [
+    AC_REQUIRE([gl_MSVC_INVAL])
+    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+      REPLACE_CLOSE=1
+    fi
+  ])
   m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [
     gl_PREREQ_SYS_H_WINSOCK2
     if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then
diff --git a/m4/dup.m4 b/m4/dup.m4
index 74fa9bd..75307cb 100644
--- a/m4/dup.m4
+++ b/m4/dup.m4
@@ -1,4 +1,4 @@
-# dup.m4 serial 4
+# dup.m4 serial 5
 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,10 +7,12 @@ dnl with or without modifications, as long as this notice is 
preserved.
 AC_DEFUN([gl_FUNC_DUP],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
-  AC_REQUIRE([gl_MSVC_INVAL])
-  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
-    REPLACE_DUP=1
-  fi
+  m4_ifdef([gl_MSVC_INVAL], [
+    AC_REQUIRE([gl_MSVC_INVAL])
+    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+      REPLACE_DUP=1
+    fi
+  ])
   dnl Replace dup() for supporting the gnulib-defined fchdir() function,
   dnl to keep fchdir's bookkeeping up-to-date.
   m4_ifdef([gl_FUNC_FCHDIR], [
diff --git a/m4/fdopen.m4 b/m4/fdopen.m4
index 8e8619c..42f928e 100644
--- a/m4/fdopen.m4
+++ b/m4/fdopen.m4
@@ -1,4 +1,4 @@
-# fdopen.m4 serial 3
+# fdopen.m4 serial 4
 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -8,10 +8,13 @@ AC_DEFUN([gl_FUNC_FDOPEN],
 [
   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-  AC_REQUIRE([gl_MSVC_INVAL])
-  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
-    REPLACE_FDOPEN=1
-  else
+  m4_ifdef([gl_MSVC_INVAL], [
+    AC_REQUIRE([gl_MSVC_INVAL])
+    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+      REPLACE_FDOPEN=1
+    fi
+  ])
+  if test $REPLACE_FDOPEN = 0; then
     dnl Test whether fdopen() sets errno when it fails due to a bad fd 
argument.
     AC_CACHE_CHECK([whether fdopen sets errno], [gl_cv_func_fdopen_works],
       [
diff --git a/m4/raise.m4 b/m4/raise.m4
index 28c2e0b..fe6e068 100644
--- a/m4/raise.m4
+++ b/m4/raise.m4
@@ -1,4 +1,4 @@
-# raise.m4 serial 3
+# raise.m4 serial 4
 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -8,14 +8,16 @@ AC_DEFUN([gl_FUNC_RAISE],
 [
   AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
   AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_REQUIRE([gl_MSVC_INVAL])
   AC_CHECK_FUNCS([raise])
   if test $ac_cv_func_raise = no; then
     HAVE_RAISE=0
   else
-    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
-      REPLACE_RAISE=1
-    fi
+    m4_ifdef([gl_MSVC_INVAL], [
+      AC_REQUIRE([gl_MSVC_INVAL])
+      if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+        REPLACE_RAISE=1
+      fi
+    ])
     m4_ifdef([gl_SIGNALBLOCKING], [
       gl_SIGNALBLOCKING
       if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
diff --git a/m4/read.m4 b/m4/read.m4
index 36249ab..2466802 100644
--- a/m4/read.m4
+++ b/m4/read.m4
@@ -1,4 +1,4 @@
-# read.m4 serial 4
+# read.m4 serial 5
 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,10 +7,12 @@ dnl with or without modifications, as long as this notice is 
preserved.
 AC_DEFUN([gl_FUNC_READ],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
-  AC_REQUIRE([gl_MSVC_INVAL])
-  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
-    REPLACE_READ=1
-  fi
+  m4_ifdef([gl_MSVC_INVAL], [
+    AC_REQUIRE([gl_MSVC_INVAL])
+    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+      REPLACE_READ=1
+    fi
+  ])
   dnl This ifdef is just an optimization, to avoid performing a configure
   dnl check whose result is not used. It does not make the test of
   dnl GNULIB_UNISTD_H_NONBLOCKING or GNULIB_NONBLOCKING redundant.
diff --git a/m4/write.m4 b/m4/write.m4
index fd46acc..2f4a235 100644
--- a/m4/write.m4
+++ b/m4/write.m4
@@ -1,4 +1,4 @@
-# write.m4 serial 5
+# write.m4 serial 6
 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,10 +7,12 @@ dnl with or without modifications, as long as this notice is 
preserved.
 AC_DEFUN([gl_FUNC_WRITE],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
-  AC_REQUIRE([gl_MSVC_INVAL])
-  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
-    REPLACE_WRITE=1
-  fi
+  m4_ifdef([gl_MSVC_INVAL], [
+    AC_REQUIRE([gl_MSVC_INVAL])
+    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+      REPLACE_WRITE=1
+    fi
+  ])
   dnl This ifdef is just an optimization, to avoid performing a configure
   dnl check whose result is not used. It does not make the test of
   dnl GNULIB_UNISTD_H_SIGPIPE or GNULIB_SIGPIPE redundant.
diff --git a/modules/msvc-nothrow b/modules/msvc-nothrow
index 2e670f9..d187eea 100644
--- a/modules/msvc-nothrow
+++ b/modules/msvc-nothrow
@@ -15,6 +15,7 @@ AC_REQUIRE([gl_MSVC_NOTHROW])
 if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
   AC_LIBOBJ([msvc-nothrow])
 fi
+gl_MODULE_INDICATOR([msvc-nothrow])
 
 Makefile.am:
 
diff --git a/tests/test-cloexec.c b/tests/test-cloexec.c
index e30e130..cbfded1 100644
--- a/tests/test-cloexec.c
+++ b/tests/test-cloexec.c
@@ -29,7 +29,11 @@
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #endif
 
 #include "binary-io.h"
diff --git a/tests/test-dup-safer.c b/tests/test-dup-safer.c
index a41950a..936e484 100644
--- a/tests/test-dup-safer.c
+++ b/tests/test-dup-safer.c
@@ -34,7 +34,11 @@
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #endif
 
 #if !O_BINARY
diff --git a/tests/test-dup2.c b/tests/test-dup2.c
index 8f7df3a..f98486a 100644
--- a/tests/test-dup2.c
+++ b/tests/test-dup2.c
@@ -41,7 +41,11 @@ SIGNATURE_CHECK (dup2, int, (int, int));
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #endif
 
 #include "macros.h"
diff --git a/tests/test-dup3.c b/tests/test-dup3.c
index 8b0eef4..85f3256 100644
--- a/tests/test-dup3.c
+++ b/tests/test-dup3.c
@@ -33,7 +33,11 @@ SIGNATURE_CHECK (dup3, int, (int, int, int));
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #endif
 
 #include "binary-io.h"
diff --git a/tests/test-fcntl.c b/tests/test-fcntl.c
index 5df9027..a249f9a 100644
--- a/tests/test-fcntl.c
+++ b/tests/test-fcntl.c
@@ -35,7 +35,11 @@ SIGNATURE_CHECK (fcntl, int, (int, int, ...));
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #endif
 
 #include "binary-io.h"
diff --git a/tests/test-fgetc.c b/tests/test-fgetc.c
index f1a3188..17edf13 100644
--- a/tests/test-fgetc.c
+++ b/tests/test-fgetc.c
@@ -25,7 +25,9 @@ SIGNATURE_CHECK (fgetc, int, (FILE *));
 #include <fcntl.h>
 #include <unistd.h>
 
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #include "macros.h"
 
diff --git a/tests/test-fputc.c b/tests/test-fputc.c
index dd6993e..448e5f2 100644
--- a/tests/test-fputc.c
+++ b/tests/test-fputc.c
@@ -25,7 +25,9 @@ SIGNATURE_CHECK (fputc, int, (int, FILE *));
 #include <fcntl.h>
 #include <unistd.h>
 
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #include "macros.h"
 
diff --git a/tests/test-fread.c b/tests/test-fread.c
index 1b7c42a..751774d 100644
--- a/tests/test-fread.c
+++ b/tests/test-fread.c
@@ -25,7 +25,9 @@ SIGNATURE_CHECK (fread, size_t, (void *, size_t, size_t, FILE 
*));
 #include <fcntl.h>
 #include <unistd.h>
 
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #include "macros.h"
 
diff --git a/tests/test-fwrite.c b/tests/test-fwrite.c
index f50bbfc..0dfb15b 100644
--- a/tests/test-fwrite.c
+++ b/tests/test-fwrite.c
@@ -25,7 +25,9 @@ SIGNATURE_CHECK (fwrite, size_t, (const void *, size_t, 
size_t, FILE *));
 #include <fcntl.h>
 #include <unistd.h>
 
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #include "macros.h"
 
diff --git a/tests/test-pipe.c b/tests/test-pipe.c
index d6dc267..08cfe92 100644
--- a/tests/test-pipe.c
+++ b/tests/test-pipe.c
@@ -29,7 +29,11 @@ SIGNATURE_CHECK (pipe, int, (int[2]));
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #endif
 
 #include "binary-io.h"
diff --git a/tests/test-pipe2.c b/tests/test-pipe2.c
index 6cebd33..b50ea99 100644
--- a/tests/test-pipe2.c
+++ b/tests/test-pipe2.c
@@ -29,7 +29,11 @@ SIGNATURE_CHECK (pipe2, int, (int[2], int));
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 /* Get _get_osfhandle.  */
-# include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 #endif
 
 #include "binary-io.h"




reply via email to

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