pingr icon indicating copy to clipboard operation
pingr copied to clipboard

Fix build on FreeBSD

Open yzgyyang opened this issue 3 years ago • 5 comments

The include directive of netinet/in.h must be before resolv.h on FreeBSD, otherwise, the following errors will occur:

In file included from dns.c:265:
/usr/include/resolv.h:159:14: error: array has incomplete element type 'struct sockaddr_in'
                nsaddr_list[MAXNS];     /*%< address of name server */
                           ^
/usr/include/resolv.h:158:9: note: forward declaration of 'struct sockaddr_in'
        struct sockaddr_in
               ^
/usr/include/resolv.h:173:18: error: field has incomplete type 'struct in_addr'
                struct in_addr  addr;
                                ^
/usr/include/resolv.h:173:10: note: forward declaration of 'struct in_addr'
                struct in_addr  addr;
                       ^
/usr/include/resolv.h:198:21: error: field has incomplete type 'struct sockaddr_in'
        struct sockaddr_in      sin;
                                ^
/usr/include/resolv.h:158:9: note: forward declaration of 'struct sockaddr_in'
        struct sockaddr_in
               ^
3 errors generated.

The reason is that the resolv.h on FreeBSD is not yet self-contained, see this bug report: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=182466

This fix was committed with the FreeBSD port net/R-cran-pingr in https://cgit.freebsd.org/ports/commit/?id=fce80f530301d0079d84bc4b818ba957ad29617b.

yzgyyang avatar Jan 14 '22 10:01 yzgyyang

@gaborcsardi There is actually one last thing to fix for FreeBSD build - -lresolv is not needed for FreeBSD since it is in libc. So, https://github.com/r-lib/pingr/blob/bfe03f4c34945c50a856a7c4844f642fb310193d/src/Makevars#L1 will raise an error during build. To fix it, just an empty PKG_LIBS would work, but I do not know Makevars enough to have a platform-specific fix there. What do you think?

yzgyyang avatar Jan 14 '22 11:01 yzgyyang

Re -lresolv I am afraid that means that we need a configure file, not autoconf, just a simple shell script, that creates Makevars.

gaborcsardi avatar Jan 14 '22 11:01 gaborcsardi

Re -lresolv I am afraid that means that we need a configure file, not autoconf, just a simple shell script, that creates Makevars.

Sounds good - I opened #21 for this and will work on it later, and am fine with leaving it out of this PR for now.

yzgyyang avatar Jan 14 '22 11:01 yzgyyang

Sounds good. I think we can add it to this PR, so that this PR fixed the compilation on FreeBSD. I might add it, it is fairly quick. (Well, I hope...)

gaborcsardi avatar Jan 14 '22 11:01 gaborcsardi

Sounds good. I think we can add it to this PR, so that this PR fixed the compilation on FreeBSD. I might add it, it is fairly quick. (Well, I hope...)

Sounds good, please feel free to do that! I need to get some sleep now... zzzZ

yzgyyang avatar Jan 14 '22 11:01 yzgyyang