On Tue, Aug 18, 2020 at 08:20:44AM -0500, Eric Blake wrote:
On 8/18/20 5:50 AM, Richard W.M. Jones wrote:
Especially on Windows, some common functions are missing. Use the autoconf LIBOBJS mechanism to replace these functions.
This includes replacement functions for:
Function names Implementation Origin
getdelim, getline general purpose NetBSD under a compatible license
openlog, syslog, Win32 written by me vsyslog
realpath Win32 written by me
strndup general purpose written by me
This should do nothing on existing supported platforms. It is only intended in preparation for porting nbdkit to Windows. ---
@@ -464,6 +475,15 @@ AS_CASE([$host_os], AC_MSG_RESULT([$is_windows]) AC_SUBST([NO_UNDEFINED_ON_WINDOWS]) AC_SUBST([LINK_LIBNBDKIT_ON_WINDOWS]) +AM_CONDITIONAL([IS_WINDOWS],[test "x$is_windows" = "xyes"]) + +dnl For Windows, look for the mc/windmc utility. +dnl XXX Do we need to check for mc.exe as well? +AS_IF([test "x$is_windows" = "xyes"],[ + AC_CHECK_TOOLS([MC],[windmc mc],[no]) + AS_IF([test "x$MC" = "xno"], + [AC_MSG_ERROR([mc/windmc utility must be available when compiling for Windows])]) +])
That's true for native windows, but not for cygwin. This one looks like our grouping of Cygwin as being 'is_windows' will bite us.
Yes - I think so (see below for more).
+++ b/common/replacements/Makefile.am @@ -0,0 +1,53 @@ +# nbdkit +# Copyright (C) 2019 Red Hat Inc.
You can add 2020 if desired.
+++ b/common/replacements/win32/Makefile.am @@ -0,0 +1,46 @@ +# nbdkit +# Copyright (C) 2019 Red Hat Inc.
and again
+# All rights reserved.
Stale copy-and-paste; we got rid of these lines in 1.12.
This code was actually written in 2019, but yes I do need to update this lot :-)
+EXTRA_DIST = nbdkit-cat.mc + +if IS_WINDOWS + +# Build the message catalog. +noinst_DATA = MSG00001.bin nbdkit-cat.h nbdkit-cat.rc + +$(noinst_DATA): nbdkit-cat.mc + rm -f $@ + $(MC) $<
Is the message catalog integral to the general function replacements, or should this be split into a separate commit?
I honestly cannot remember now how all this worked, except that it was apparently necessary for something - syslog support I think? I'll try and investigate what it was used for.
+#include <config.h> + +#ifdef HAVE_REALPATH + +#include <limits.h> +#include <stdlib.h>
Why limits.h?
That's what realpath(3) says. However I think it might be a mistake in the man page, or it could be because the man page refers to PATH_MAX which is defined in <limits.h>. POSIX says only <stdlib.h> is necessary.
diff --git a/common/replacements/syslog.h b/common/replacements/syslog.h new file mode 100644 index 00000000..e4d76677 --- /dev/null +++ b/common/replacements/syslog.h
+#include <config.h> + +#ifdef HAVE_SYSLOG_H + +#include_next <syslog.h>
I guess our insistence on a decent compiler (for other reasons such as __attribute__((cleanup))) means we can rely on #include_next ;)
Huh, and I thought include_next was part of C ...
+++ b/common/replacements/openlog.c
+#ifdef WIN32 + +/* Replacement openlog for Win32. */ + +#include <windows.h> + +HANDLE event_source = INVALID_HANDLE_VALUE; + +void +openlog (const char *ident, int option, int facility) +{ + event_source = RegisterEventSource (NULL, ident); +}
Ah, so if I understand, the message catalog compilation matters when replacing openlog? Cygwin has openlog, and thus does not need the replacement and thus not the message catalog.
I believe so, but I wrote this 18 months ago and can't remember the details. Re Cygwin: I wonder if we actually care about Cygwin at all. It's a sufficiently different target that we would probably consider it to be a new platform. But if anyone had even a partially working Windows port using the native APIs would they want a Cygwin port? Maybe the way to go is to remove |msys*|cygwin* from configure.ac.
+++ b/common/replacements/win32/nbdkit-cat.mc @@ -0,0 +1,6 @@ +MessageId=1 +Severity=Error +SymbolicName=NBDKIT_SYSLOG_ERROR +Language=English +%1 +.
Does this file not allow for a copyright blurb? Or is it small enough to be trivial and not need one?
Apparently it does support a comment syntax. It's "unique": https://docs.microsoft.com/en-us/windows/win32/eventlog/message-text-files I'll take a look at all the other stuff you mentioned too, thanks. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top