Bug #64833 [Com]: ext/sockets/sendrecvmsg.c related compilation errors

From: Date: Mon, 16 Oct 2017 20:32:29 +0000
Subject: Bug #64833 [Com]: ext/sockets/sendrecvmsg.c related compilation errors
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-211735@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=64833&edit=1 ID: 64833 Comment by: peterkokot at gmail dot com Reported by: clicky at erebot dot net Summary: ext/sockets/sendrecvmsg.c related compilation errors Status: Assigned Type: Bug Package: Compile Failure Operating System: Debian Stretch PHP Version: 7.1.0alpha3 Assigned To: cataphract Block user comment: N Private report: N New Comment: Hello, I've tried compiling PHP 7.1.10 on Debian 9 and it goes through without any patches required so far. Used procedure: ./configure --disable-all --enable-sockets=shared make I believe the compilation issues have been fixed in the mentioned problematic file and got into PHP 7.1.x release: https://github.com/php/php-src/commits/master/ext/sockets/conversions.c I believe we can close this issue since also according to some Docker images based on Debian 8 and 9 the compilation goes through ok. In case the issue is still relevant, you we can reopen this ticket anytime anyway. Thanks. Previous Comments: ------------------------------------------------------------------------ [2016-07-11 15:21:12] clicky at erebot dot net Now I'm seeing errors like this one when compiling PHP 7.1.0alpha3: In file included from /usr/include/rpc/netdb.h:42:0, from /usr/include/netdb.h:32, from .../phpfarm/src/php-7.1.0alpha3-debug/main/php_network.h:79, from .../phpfarm/src/php-7.1.0alpha3-debug/ext/sockets/sockaddr_conv.h:4, from .../phpfarm/src/php-7.1.0alpha3-debug/ext/sockets/conversions.c:1: .../phpfarm/src/php-7.1.0alpha3-debug/ext/sockets/conversions.c:1291:47: error: invalid use of undefined type ‘struct in6_pktinfo’ {"addr", sizeof("addr"), 1, offsetof(struct in6_pktinfo, ipi6_addr), from_zval_write_sin6_addr, to_zval_read_sin6_addr}, It seems some of the structures like in6_pktinfo (from netinet/in.h) and ucred (from bits/socket.h) are not exposed in glibc headers anymore (at least with glibc 2.22) unless -D_GNU_SOURCE is used in the CFLAGS. That's because those structures are now guarded with the _USE_GNU preprocessor macro. ------------------------------------------------------------------------ [2015-05-08 00:37:58] clicky at erebot dot net Closing this bug as I cannot reproduce it in stable releases. ------------------------------------------------------------------------ [2013-05-16 19:32:46] clicky at erebot dot net Adding to my initial report. Compiling with ./configure --disable-all --enable-sockets also triggers this issue, although with a different output: /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1288:31: error: invalid use of undefined type ‘struct in6_pktinfo’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1289:37: error: invalid use of undefined type ‘struct in6_pktinfo’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1307:29: error: invalid use of undefined type ‘struct ucred’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1307:29: error: initializer element is not constant /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1307:29: error: (near initialization for ‘descriptors_ucred[0].field_offset’) /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1308:29: error: invalid use of undefined type ‘struct ucred’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1308:29: error: initializer element is not constant /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1308:29: error: (near initialization for ‘descriptors_ucred[1].field_offset’) /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1310:29: error: invalid use of undefined type ‘struct ucred’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1310:29: error: initializer element is not constant /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/conversions.c:1310:29: error: (near initialization for ‘descriptors_ucred[2].field_offset’) make: *** [ext/sockets/conversions.lo] Error 1 ------------------------------------------------------------------------ [2013-05-13 21:49:36] clicky at erebot dot net Description: ------------ While trying to build PHP 5.5.0RC1 under Debian Squeeze, the following compilation errors were triggered. I think this may be related to this commit that introduced support for SCM_CREDENTIALS and other goodies in the sockets extension recently: http://git.php.net/?p=php-src.git;a=commitdiff;h=a85d7f28f69fbc522ed90aee1926d3733be7620d Also, please note that the manpage for UNIX sockets states that "struct ucred" (which is used in the code) is only defined when the _GNU_SOURCE macro is defined since glibc 2.8 [1]. This may also be the reason why the build fails (Debian Squeeze uses libc6-2.13 [2]). Other projects have been impacted by this issue too [3]. [1] http://manpages.ubuntu.com/manpages/karmic/en/man7/unix.7.html [2] http://packages.debian.org/wheezy/libc6 [3] http://sourceforge.net/p/wide-dhcpv6/bugs/29/ (also contains link to a glibc commit that changed some of the structs like in6_pktinfo to be macro-guarded). Test script: --------------- './configure' \ '--enable-debug' \ '--disable-all' \ '--disable-short-tags' \ '--disable-sigchild' \ '--with-layout=GNU' \ '--with-regex' \ '--with-openssl=shared' \ '--with-zlib=shared' \ '--enable-bcmath=shared' \ '--with-bz2=shared' \ '--enable-calendar=shared' \ '--with-gettext=shared' \ '--enable-mbstring=shared' \ '--enable-pcntl=shared' \ '--enable-sockets=shared' \ '--with-pdo-sqlite' \ '--enable-sysvmsg=shared' \ '--enable-sysvsem=shared' \ '--enable-sysvshm=shared' \ '--with-xsl=shared' \ '--with-iconv=shared' \ '--enable-zip=shared' \ '--enable-posix=shared' \ '--enable-libxml=shared' \ '--enable-dom=shared' \ '--enable-xml=shared' \ '--enable-xmlreader=shared' \ '--enable-xmlwriter=shared' \ '--enable-tokenizer=shared' \ '--enable-pdo' \ '--enable-ctype=shared' \ '--enable-json=shared' \ '--enable-session=shared' \ '--enable-soap=shared' \ '--enable-simplexml=shared' \ '--enable-hash' \ '--enable-intl=shared' \ '--enable-phar=shared' \ '--with-sqlite3' \ '--with-mysql=shared,mysqlnd' \ '--with-mysqli=shared,mysqlnd' \ '--with-pdo-mysql=shared,mysqlnd' \ '--prefix=/home/qa/phpfarm/inst/php-5.5.0RC1-debug' \ '--exec-prefix=/home/qa/phpfarm/inst/php-5.5.0RC1-debug' \ '--without-pear' \ '--enable-cgi' \ '--enable-cli' \ '--enable-fpm' \ "$@" (but could probably be reduced to just ./configure --disable-all --enable-sockets=shared) Expected result: ---------------- PHP should build without any compilation error. Actual result: -------------- /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c: In function ‘init_ancillary_registry’: /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c:109:2: error: invalid application of ‘sizeof’ to incomplete type ‘struct in6_pktinfo’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c:124:2: error: invalid application of ‘sizeof’ to incomplete type ‘struct ucred’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c:124:2: error: ‘SCM_CREDENTIALS’ undeclared (first use in this function) /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c:124:2: note: each undeclared identifier is reported only once for each function it appears in /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c: In function ‘php_do_setsockopt_ipv6_rfc3542’: /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c:339:12: error: invalid application of ‘sizeof’ to incomplete type ‘struct in6_pktinfo’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c:345:19: error: invalid application of ‘sizeof’ to incomplete type ‘struct in6_pktinfo’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c: In function ‘php_do_getsockopt_ipv6_rfc3542’: /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c:377:17: error: invalid application of ‘sizeof’ to incomplete type ‘struct in6_pktinfo’ /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c: In function ‘php_socket_sendrecvmsg_init’: /home/qa/phpfarm/src/php-5.5.0RC1-debug/ext/sockets/sendrecvmsg.c:436:2: error: ‘SCM_CREDENTIALS’ undeclared (first use in this function) make: *** [ext/sockets/sendrecvmsg.lo] Error 1 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=64833&edit=1

« previous php.bugs (#211735) next »