hughperman / pure-lang

Automatically exported from code.google.com/p/pure-lang
0 stars 0 forks source link

pure-sockets does not compile under FreeBSD #52

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?
1. gmake

What is the expected output? What do you see instead?
clang -O2 -emit-llvm -c sockets.c -o sockets.bc
sockets.c:162:12: warning: implicit declaration of function 'ntohs' is invalid 
in C99 [-Wimplicit-function-declaration]
    return ntohs(((struct sockaddr_in*)addr)->sin_port);
           ^
sockets.c:162:45: error: incomplete definition of type 'struct sockaddr_in'
    return ntohs(((struct sockaddr_in*)addr)->sin_port);
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
sockets.c:162:27: note: forward declaration of 'struct sockaddr_in'
    return ntohs(((struct sockaddr_in*)addr)->sin_port);
                          ^
sockets.c:164:46: error: incomplete definition of type 'struct sockaddr_in6'
    return ntohs(((struct sockaddr_in6*)addr)->sin6_port);
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
sockets.c:164:27: note: forward declaration of 'struct sockaddr_in6'
    return ntohs(((struct sockaddr_in6*)addr)->sin6_port);
                          ^
sockets.c:177:7: error: invalid application of 'sizeof' to an incomplete type 
'struct sockaddr_in'
      sizeof(struct sockaddr_in):sizeof(struct sockaddr_in6);
      ^     ~~~~~~~~~~~~~~~~~~~~
sockets.c:177:21: note: forward declaration of 'struct sockaddr_in'
      sizeof(struct sockaddr_in):sizeof(struct sockaddr_in6);
                    ^
sockets.c:194:7: error: invalid application of 'sizeof' to an incomplete type 
'struct sockaddr_in'
      sizeof(struct sockaddr_in):sizeof(struct sockaddr_in6);
      ^     ~~~~~~~~~~~~~~~~~~~~
sockets.c:194:21: note: forward declaration of 'struct sockaddr_in'
      sizeof(struct sockaddr_in):sizeof(struct sockaddr_in6);
                    ^
sockets.c:211:7: error: invalid application of 'sizeof' to an incomplete type 
'struct sockaddr_in'
      sizeof(struct sockaddr_in):sizeof(struct sockaddr_in6);
      ^     ~~~~~~~~~~~~~~~~~~~~
sockets.c:211:21: note: forward declaration of 'struct sockaddr_in'
      sizeof(struct sockaddr_in):sizeof(struct sockaddr_in6);
                    ^
sockets.c:233:12: error: invalid application of 'sizeof' to an incomplete type 
'struct sockaddr_in'
    return sizeof(struct sockaddr_in);
           ^     ~~~~~~~~~~~~~~~~~~~~
sockets.c:233:26: note: forward declaration of 'struct sockaddr_in'
    return sizeof(struct sockaddr_in);
                         ^
sockets.c:235:12: error: invalid application of 'sizeof' to an incomplete type 
'struct sockaddr_in6'
    return sizeof(struct sockaddr_in6);
           ^     ~~~~~~~~~~~~~~~~~~~~~
sockets.c:235:26: note: forward declaration of 'struct sockaddr_in6'
    return sizeof(struct sockaddr_in6);
                         ^
sockets.c:325:3: error: use of undeclared identifier 'IPPROTO_ICMP'
  define(IPPROTO_ICMP);
  ^
sockets.c:325:10: note: instantiated from:
  define(IPPROTO_ICMP);
         ^
sockets.c:326:3: error: use of undeclared identifier 'IPPROTO_TCP'
  define(IPPROTO_TCP);
  ^
sockets.c:326:10: note: instantiated from:
  define(IPPROTO_TCP);
         ^
sockets.c:327:3: error: use of undeclared identifier 'IPPROTO_UDP'
  define(IPPROTO_UDP);
  ^
sockets.c:327:10: note: instantiated from:
  define(IPPROTO_UDP);
         ^
1 warning and 10 errors generated.
gmake: [sockets.bc] Error 1 (ignored)

What version of the product are you using? On what operating system?
pure-0.46
pure-sockets-0.1
FreeBSD 8.2-STABLE

Please provide any additional information below.
On FreeBSD, you need an separated header file for ntohs and sockaddr_in:
http://www.freebsd.org/cgi/man.cgi?query=ntohs&sektion=3

Original issue reported on code.google.com by lich...@gmail.com on 18 Mar 2011 at 7:50

Attachments:

GoogleCodeExporter commented 8 years ago
The portable way to do this seems to be to include arpa/inet.h. This has been 
fixed in the repo now (rev. fee8a5552624). Can you please check whether that 
works ok on FreeBSD?

Original comment by aggraef@gmail.com on 29 Mar 2011 at 1:10

GoogleCodeExporter commented 8 years ago
Missing definition of both struct sockaddr_in and sockaddr_in6.

Original comment by lich...@gmail.com on 29 Mar 2011 at 1:14

GoogleCodeExporter commented 8 years ago
Ok, so netinet/in.h needs to be included after all. Fixed in rev. c44d12787912, 
would be nice if you could give it another go.

Original comment by aggraef@gmail.com on 29 Mar 2011 at 2:32

GoogleCodeExporter commented 8 years ago
It works fine.
I hope netinet/in.h is available to all OSs :)

Original comment by lich...@gmail.com on 29 Mar 2011 at 2:35

GoogleCodeExporter commented 8 years ago
Not on Windows, of course. :) But it should be available on all real POSIX 
systems.

Original comment by aggraef@gmail.com on 29 Mar 2011 at 3:28