This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [MinGW-w64]Build gdb/ctf.c failed


> Date: Mon, 25 Mar 2013 13:42:52 +0100
> From: Kai Tietz <ktietz70@googlemail.com>
> Cc: asmwarrior@gmail.com, tromey@redhat.com, yao@codesourcery.com, 
> 	gdb-patches@sourceware.org
> 
> So, you claimed MinGW-w64 did something wrong ... well, if we wouldn't
> declare mkdir here, indeed it would be worth a bug-report ...

Actually, Posix says mkdir should be in sys/stat.h, not in unistd.h.
And it looks like MinGW64 does indeed have mkdir in stat.h, not in
unistd.h.  Which IMO is another unfortunate incompatibility with
mingw.org.

> So what differences you were talking about?

The difference that caused the warning -- the fact that _mkdir's
prototype was not visible after including unistd.h.

> The function mkdir is declared for MinGW.org, and for MinGW-w64.  It
> is the POSIX compliant API name and both ventures are declaring it
> in an POSIX-helper header.

Yes (but see below about its Posix nature).

>  So you mean yet _mkdir?

Yes, of course.  _mkdir was the reason for the compiler warning.  If
it were declared in io.h, then the warning would not have been
emitted.

> if you want to use a posix function, include the corresponding posix
> header; if you want to a MS API, use the header MS defines the
> function/interface lives in.  it wouldn't really help portability
> (in either direction) to support including a posix header, and
> getting a MS API function, so mingw doesn't lay its headers that
> way.

Unfortunately, this isn't so simple, as MS API offers mkdir as well
(see direct.h in any MS SDK), albeit while discouraging/deprecating
its use:

  http://msdn.microsoft.com/en-us/library/vstudio/ms235326%28v=vs.100%29.aspx

Thus, mkdir is both a Posix API and an MS API.  Moreover, the Posix
mkdir accepts 2 arguments, not one.  So what MinGW provides is not
really a Posix API, but rather a slightly incompatible variant
thereof.

> The header io.h isn't a POSIX one, and therefore you should just
> expect what actual is documented by vendor (in msdn) for it and not
> what one implementation mightz does.

MinGW's unistd.h includes io.h, and thus gets both mkdir and _mkdir.
One could perhaps argue that this is or isn't a mistake, but given the
precedence, having a different arrangement in MinGW64 is unfortunate,
since it will mean more #ifdef'ing in the projects that want to
support both.  For yet another example of such incompatibilities, see

  http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00611.html


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]