[PATCH 2/3] port: first cut at native W32 building

thb at libreoffice.org thb at libreoffice.org
Tue Jan 30 20:12:55 CET 2018


From: Thorsten Behrens <Thorsten.Behrens at CIB.de>

Signed-off-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
---
 src/Makefile.am       | 10 ++++++----
 src/estream-printf.c  |  6 +++++-
 src/estream.c         | 16 ++++++++++++++--
 src/gpg-error.c       |  2 ++
 src/init.c            |  6 +++---
 src/mkheader.c        | 14 +++++++++++++-
 src/versioninfo.rc.in |  2 --
 src/w32-estream.c     |  5 +++++
 src/w32-gettext.c     |  4 ++--
 9 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 4446612..253da3b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -38,8 +38,10 @@ bin_PROGRAMS = gpg-error
 
 if HAVE_W32_SYSTEM
 noinst_PROGRAMS = gen-w32-lock-obj
+exe_extension = .exe
 else
 noinst_PROGRAMS = gen-posix-lock-obj
+exe_extension =
 endif
 
 # Distributed lock object definitions for cross compilation.
@@ -264,7 +266,7 @@ gpg-error.def: Makefile gpg-error.def.in
 
 # It is correct to use $(CC_FOR_BUILD) here.  We want to run the
 # program at build time.
-mkerrcodes: mkerrcodes.c mkerrcodes.h Makefile
+mkerrcodes${exe_extension}: mkerrcodes.c mkerrcodes.h Makefile
 	$(CC_FOR_BUILD) -I. -I$(srcdir) -o $@ $(srcdir)/mkerrcodes.c
 
 if HAVE_W32CE_SYSTEM
@@ -274,7 +276,7 @@ mkw32errmap: mkw32errmap.c mkw32errmap.tab.h Makefile
 	$(CC_FOR_BUILD) -I. -I$(srcdir) -o $@ $(srcdir)/mkw32errmap.c
 endif
 
-code-from-errno.h: mkerrcodes Makefile
+code-from-errno.h: mkerrcodes${exe_extension} Makefile
 	./mkerrcodes | $(AWK) -f $(srcdir)/mkerrcodes2.awk >$@
 
 errnos-sym.h: Makefile mkstrtable.awk errnos.in
@@ -283,7 +285,7 @@ errnos-sym.h: Makefile mkstrtable.awk errnos.in
 		$(srcdir)/errnos.in >$@
 
 
-mkheader: mkheader.c Makefile
+mkheader${exe_extension}: mkheader.c Makefile
 	$(CC_FOR_BUILD) -g -O0 -I. -I$(srcdir) -o $@ $(srcdir)/mkheader.c
 
 parts_of_gpg_error_h = 	 	\
@@ -310,7 +312,7 @@ endif
 
 # We also depend on versioninfo.rc because that is build by
 # config.status and thus has up-to-date version numbers.
-gpg-error.h: Makefile mkheader $(parts_of_gpg_error_h) \
+gpg-error.h: Makefile mkheader${exe_extension} $(parts_of_gpg_error_h) \
              versioninfo.rc ../config.h
 	$(pre_mkheader_cmds)
 	./mkheader $(host_os) $(host_triplet)  $(srcdir)/gpg-error.h.in \
diff --git a/src/estream-printf.c b/src/estream-printf.c
index f1cbcde..194d814 100644
--- a/src/estream-printf.c
+++ b/src/estream-printf.c
@@ -85,7 +85,11 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
+#ifdef _WIN32
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
 #include <stdarg.h>
 #include <errno.h>
 #include <stddef.h>
diff --git a/src/estream.c b/src/estream.c
index dd2b289..e466a30 100644
--- a/src/estream.c
+++ b/src/estream.c
@@ -74,12 +74,15 @@
 # include <sys/time.h>
 #endif
 #include <sys/types.h>
-#include <sys/file.h>
 #include <sys/stat.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
+#ifdef _WIN32
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
 #include <stdarg.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -112,6 +115,15 @@
 
 
 #ifdef HAVE_W32_SYSTEM
+# ifndef  S_IRUSR
+#  define S_IRUSR _S_IREAD
+# endif
+# ifndef  S_IWUSR
+#  define S_IWUSR _S_IWRITE
+# endif
+# ifndef  S_IXUSR
+#  define S_IXUSR 0x00400000
+# endif
 # ifndef  S_IRGRP
 #  define S_IRGRP S_IRUSR
 # endif
diff --git a/src/gpg-error.c b/src/gpg-error.c
index f890883..2c36e36 100644
--- a/src/gpg-error.c
+++ b/src/gpg-error.c
@@ -98,6 +98,8 @@ i18n_init (void)
 
 #include <windows.h>
 
+#define strncasecmp _strnicmp
+#define strcasecmp _stricmp
 
 static char *
 get_locale_dir (void)
diff --git a/src/init.c b/src/init.c
index 89475d3..1fb83b1 100644
--- a/src/init.c
+++ b/src/init.c
@@ -88,7 +88,7 @@ gpg_error_t
 _gpg_err_init (void)
 {
 #ifdef HAVE_W32_SYSTEM
-# ifdef DLL_EXPORT
+# ifdef HAVE_DLL_INIT
   /* We always have a constructor and thus this function is called
      automatically.  Due to the way the C init code of mingw works,
      the constructors are called before our DllMain function is
@@ -130,7 +130,7 @@ _gpg_err_init (void)
 void
 _gpg_err_deinit (int mode)
 {
-#if defined (HAVE_W32_SYSTEM) && !defined(DLL_EXPORT)
+#if defined (HAVE_W32_SYSTEM) && !defined(HAVE_DLL_INIT)
   struct tls_space_s *tls;
 
   tls = TlsGetValue (tls_index);
@@ -558,7 +558,7 @@ _gpg_w32ce_strerror (int err)
 
 
 /* Entry point called by the DLL loader.  */
-#ifdef DLL_EXPORT
+#ifdef HAVE_DLL_INIT
 int WINAPI
 DllMain (HINSTANCE hinst, DWORD reason, LPVOID reserved)
 {
diff --git a/src/mkheader.c b/src/mkheader.c
index 997cab5..4b345d1 100644
--- a/src/mkheader.c
+++ b/src/mkheader.c
@@ -16,7 +16,11 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <unistd.h>
+#ifdef _WIN32
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
 
 #define PGM "mkheader"
 
@@ -410,12 +414,20 @@ try_include_file (const char *fname, int lnr, const char *name,
 
   repl_flag = !!strchr (name, '&');
   incfname = mk_include_name (name, repl_flag? host_triplet : NULL);
+#ifdef _WIN32
+  rc = _access (incfname, 04);
+#else
   rc = access (incfname, R_OK);
+#endif
   if (rc && repl_flag)
     {
       free (incfname);
       incfname = mk_include_name (name, host_os);
+#ifdef _WIN32
+      rc = _access (incfname, 04);
+#else
       rc = access (incfname, R_OK);
+#endif
     }
   if (!rc)
     include_file (fname, lnr, name, outf);
diff --git a/src/versioninfo.rc.in b/src/versioninfo.rc.in
index 0986a42..6bfd3ec 100644
--- a/src/versioninfo.rc.in
+++ b/src/versioninfo.rc.in
@@ -14,8 +14,6 @@
 
 #line __LINE__ "versioninfo.rc.in"
 
-#include <afxres.h>
-
 
 VS_VERSION_INFO VERSIONINFO
  FILEVERSION @BUILD_FILEVERSION@
diff --git a/src/w32-estream.c b/src/w32-estream.c
index 2122c59..1a16d8f 100644
--- a/src/w32-estream.c
+++ b/src/w32-estream.c
@@ -45,6 +45,11 @@
 
 #include "gpgrt-int.h"
 
+#ifdef _WIN32
+/* no ssize_t in windows std headers, emulate for native build */
+typedef SSIZE_T ssize_t;
+#endif
+
 /*
  * In order to support es_poll on Windows, we create a proxy shim that
  * we use as the estream I/O functions.  This shim creates reader and
diff --git a/src/w32-gettext.c b/src/w32-gettext.c
index 3b54ebd..71716ce 100644
--- a/src/w32-gettext.c
+++ b/src/w32-gettext.c
@@ -1180,7 +1180,7 @@ static char *current_domainname;
    DLL.  If used as a static lib we can't control the process set; for
    example it might be used with a main module which is not build with
    mingw and thus does not know how to call the constructors.  */
-#ifdef DLL_EXPORT
+#ifdef HAVE_DLL_INIT
 static void module_init (void) _GPG_ERR_CONSTRUCTOR;
 #endif
 static void
@@ -1195,7 +1195,7 @@ module_init (void)
     }
 }
 
-#if !defined(DLL_EXPORT) || !defined(_GPG_ERR_HAVE_CONSTRUCTOR)
+#if !defined(HAVE_DLL_INIT) || !defined(_GPG_ERR_HAVE_CONSTRUCTOR)
 void
 _gpg_w32__init_gettext_module (void)
 {
-- 
2.13.6




More information about the Gnupg-devel mailing list