libmicrohttpd
[Top][All Lists]
Advanced

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

Re: [libmicrohttpd] build errors.


From: Christian Grothoff
Subject: Re: [libmicrohttpd] build errors.
Date: Tue, 16 Oct 2012 01:36:06 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20120922 Lightning/1.0b1 Icedove/3.0.11

Dear Luis,

Thanks for the report, should be fixed in SVN 24333 by moving all
WINDOWS macro tests to #ifdef/#ifndef.

Happy hacking!

Christian

On 10/16/2012 12:19 AM, luis garcia wrote:
> Hi,
> 
> When I compile the library with the c compiler instead of c++ i get errors
> due to mix use of #if and #ifdef WINDOWS.
> 
> I will give an example. I compile the library for Linux environment. If I
> try to compile having WINDOWS undefined the build will failed whenever
> daemon.c expects WINDOWS to be defined. Here are couple examples:
> 
>     /* make socket non-inheritable */
> #if WINDOWS
>     DWORD dwFlags;
> 
> and
> 
> #if !WINDOWS
>   flags = fcntl (fd, F_GETFD);
>   if (flags < 0)
> 
> among others.
> 
> So then I proceed to define WINDOWS to 0 in MHD_config.h
> #define WINDOWS 0
> 
> Although this does not cause build problems in daemon.c there are issues
> since now WINDOWS is defined. Therefore code like the one below will act as
> if the library was built for WINDOWS:
> 
> #ifdef IPV6_V6ONLY
>         /* Note: "IPV6_V6ONLY" is declared by Windows Vista ff., see
> "IPPROTO_IPV6 Socket Options"
>            
> (http://msdn.microsoft.com/en-us/library/ms738574%28v=VS.85%29.aspx);
>            and may also be missing on older POSIX systems; good luck if you
> have any of those,
>            your IPv6 socket may then also bind against IPv4... */
> #ifndef WINDOWS
>         const int on = 1;
>         setsockopt (socket_fd,
>                     IPPROTO_IPV6, IPV6_V6ONLY,
>                     &on, sizeof (on));
> #else
>         const char on = 1;
>         setsockopt (socket_fd,
>                     IPPROTO_IPV6, IPV6_V6ONLY,
>                     &on, sizeof (on));
> #endif
> #endif
> 
> and
> 
> /**
>  * Default connection limit.
>  */
> #ifndef WINDOWS
> #define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE - 4
> #else
> #define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE
> #endif
> 
> 
> Finally plibc.h uses #ifdef WINDOWS and if WINDOWS is defined even to 0 it
> assumes that you are using windows. Which will cause a whole set of issues
> when you are not actually targeting windows. Looking at the code I realized
> that plibc is only intended to be used and compiled when targeting windows,
> but confirmation of this will be appreciated.
> 
> Thanks for any comments on this matter.
> 
> Luis
> 




reply via email to

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