Hi all,

I am using MingW W64 from SVN, version 3.0 beta-ish.

There are few issues when compiling Postgres with MingW W64.  There was
a patch submitted to this list in July 2011 but it does not address
these issues (that I can tell).  The following applies to both 32 and 64
bit builds.

                                  ----

The header file crtdefs.h in MinGW typedefs errcode which conflicts with
Postgres' elog.h.

#ifndef __ERRCODE_DEFINED_MS
#define __ERRCODE_DEFINED_MS
typedef int errcode;
#endif

The previous patch #undef'ed errcode, which is probably not going to
help here.  I added CPPFLAGS=-D__ERRCODE_DEFINED_MS to the configure
line to work around this.

How would a proper patch deal with this?  Add an explicit #define when
MinGW W64 is detected?

                                  ----

MinGW W64's sys/stat.h #defines stat to be _stati64 and there is
subsequently a compilation error in port.h:

note: expected 'struct _stati64 *' but argument is of type 'struct stat *'
error: conflicting types for 'pgwin32_safestat'

As stupid as it is, I added #undef stat immediately after including
sys/stat.h in port.h:

#if defined(WIN32) && !defined(__CYGWIN__) && !defined(UNSAFE_STAT_OK)
#include <sys/stat.h>
#undef stat
extern int      pgwin32_safestat(const char *path, struct stat * buf);

#define stat(a,b) pgwin32_safestat(a,b)
#endif

Though I might have tried -DUNSAFE_STAT_OK too, but didn't.

NOTE: I'm compiling Postgres exclusively to cross compile PL/Java and
run time behaviour is not a concern of mine.

I am not sure what macro magic would be proper here.  Comments welcome.

                                  ----

There are series of redefined macros from the MinGW W64 CRT.

In pg_config_os:

warning: "_WIN32_WINNT" redefined [enabled by default]
warning: "fseeko" redefined [enabled by default]
warning: "ftello" redefined [enabled by default]
warning: "EMSGSIZE" redefined [enabled by default]
warning: "EAFNOSUPPORT" redefined [enabled by default]
warning: "EWOULDBLOCK" redefined [enabled by default]
warning: "ECONNRESET" redefined [enabled by default]
warning: "EINPROGRESS" redefined [enabled by default]
warning: "ENOBUFS" redefined [enabled by default]
warning: "EPROTONOSUPPORT" redefined [enabled by default]
warning: "ECONNREFUSED" redefined [enabled by default]
warning: "EOPNOTSUPP" redefined [enabled by default]

In port.h:

warning: "popen" redefined [enabled by default]
warning: "pclose" redefined [enabled by default]

And possibly some more.  Do we need these redefines?

                                  ----

I'm willing to work on some (if not all) of these issues with proper
guidance.


-- 
   Johann Oskarsson                http://www.2ndquadrant.com/    |[]
   PostgreSQL Development, 24x7 Support, Training and Services  --+--
                                                                  |
   Blog: http://my.opera.com/myrkraverk/blog/

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to