php 7.{3,4}/git ext/curl builds FAIL with recent curl/libcurl 7.67+: "error: ‘CURLE_OBSOLETE20’ undeclared ...".

php.internals

PGNet Dev

6 years ago
I needed to bump local curl build version to fix a (php-unrelated) SEGV. Currently, I have curl -V curl 7.67.1-DEV (x86_64-pc-linux-gnu) libcurl/7.67.1-DEV OpenSSL/1.1.1d zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh2/1.9.0_DEV nghttp2/1.40.0-DEV Release-Date: [unreleased] Protocols: dict file ftp ftps http https imap imaps pop3 pop3s scp sftp smtp smtps tftp Features: AsynchDNS brotli HTTP2 HTTPS-proxy IDN IPv6 Largefile libz Metalink NTLM NTLM_WB PSL SSL TLS-SRP UnixSockets Rebuilding my usual PHP7.3/git install, (add'l note: fwiw, the following issue also occurs with 7.4/git ...) cd php7 git branch -a | grep \* * PHP-7.3 git log | head commit 9083e178f656878cab46aee52b555346ef92a768 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Nov 12 12:59:50 2019 +0300 Fixed wrong constant usage commit ea2a125789d2e6cf7416bd706be1ac44df1367e4 Merge: 4a55794b98 2c9926f156 Author: Stanislav Malyshev <stas@php.net> Date: Mon Nov 11 23:08:38 2019 -0800 works nicely as usual, /usr/local/php7/bin/php -v PHP 7.3.13-dev (cli) (built: Nov 14 2019 19:53:24) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.13-dev, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.13-dev, Copyright (c) 1999-2018, by Zend Technologies But curl extension now fails, ext/curl/interface.c:778:25: error: ‘CURLE_OBSOLETE20’ undeclared (first use in this function); did you mean ‘CURLE_OBSOLETE50’? 778 | REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); Before making noise about in @bugs, wanted to check 1st; known issue? additional/new config req'd? Here's more detail cd ext/curl /usr/local/php7/bin/phpize Configuring for: PHP Api Version: 20180731 Zend Module Api No: 20180731 Zend Extension Api No: 320180731 ./configure \ --with-php-config=/usr/local/php7/bin/php-config \ --with-curl=/usr/local \ --with-libdir=lib64 \ --enable-shared --disable-static \ --with-gnu-ld ... checking for cURL support... yes, shared checking for libcurl.pc... using /usr/local/lib64/pkgconfig/libcurl.pc checking for cURL 7.15.5 or greater... 7.67.1-DEV checking for SSL support in libcurl... yes checking how to run the C preprocessor... /usr/bin/cpp-9 checking for openssl support in libcurl... checking for ANSI C header files... yes ... checking for gnutls support in libcurl... no checking for curl_easy_perform in -lcurl... yes checking for curl_easy_strerror in -lcurl... yes checking for curl_multi_strerror in -lcurl... yes ... , at `make`, make V=1 /bin/sh /usr/local/src/php7-src/ext/curl/libtool --mode=compile /usr/bin/gcc-9 -I. -I/usr/local/src/php7-src/ext/curl -DPHP_ATOM_INC -I/usr/local/src/php7-src/ext/curl/include -I/usr/local/src/php7-src/ext/curl/main -I/usr/local/src/php7-src/ext/curl -I/usr/local/php7/include/php -I/usr/local/php7/include/php/main -I/usr/local/php7/include/php/TSRM -I/usr/local/php7/include/php/Zend -I/usr/local/php7/include/php/ext -I/usr/local/php7/include/php/ext/date/lib -I/usr/local/include -O3 -Wall -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fmessage-length=0 -grecord-gcc-switches -march=native -mtune=native -D_FORTIFY_SOURCE=2 -DHAVE_CONFIG_H -O3 -Wall -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fmessage-length=0 -grecord-gcc-switches -march=native -mtune=native -c /usr/local/src/php7-src/ext/curl/interface.c -o interface.lo mkdir .libs /usr/bin/gcc-9 -I. -I/usr/local/src/php7-src/ext/curl -DPHP_ATOM_INC -I/usr/local/src/php7-src/ext/curl/include -I/usr/local/src/php7-src/ext/curl/main -I/usr/local/src/php7-src/ext/curl -I/usr/local/php7/include/php -I/usr/local/php7/include/php/main -I/usr/local/php7/include/php/TSRM -I/usr/local/php7/include/php/Zend -I/usr/local/php7/include/php/ext -I/usr/local/php7/include/php/ext/date/lib -I/usr/local/include -O3 -Wall -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fmessage-length=0 -grecord-gcc-switches -march=native -mtune=native -D_FORTIFY_SOURCE=2 -DHAVE_CONFIG_H -O3 -Wall -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fmessage-length=0 -grecord-gcc-switches -march=native -mtune=native -c /usr/local/src/php7-src/ext/curl/interface.c -fPIC -DPIC -o .libs/interface.o In file included from /usr/local/php7/include/php/main/php.h:468, from /usr/local/src/php7-src/ext/curl/interface.c:25: /usr/local/src/php7-src/ext/curl/interface.c: In function ‘zm_startup_curl’: /usr/local/src/php7-src/ext/curl/interface.c:778:25: error: ‘CURLE_OBSOLETE20’ undeclared (first use in this function); did you mean ‘CURLE_OBSOLETE50’? 778 | REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); | ^~~~~~~~~~~~~~~~~~~~~ /usr/local/php7/include/php/Zend/zend_constants.h:53:105: note: in definition of macro ‘REGISTER_LONG_CONSTANT’ 53 | #define REGISTER_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name)-1, (lval), (flags), module_number) | ^~~~ /usr/local/src/php7-src/ext/curl/interface.c:778:2: note: in expansion of macro ‘REGISTER_CURL_CONSTANT’ 778 | REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); | ^~~~~~~~~~~~~~~~~~~~~~ /usr/local/src/php7-src/ext/curl/interface.c:778:25: note: each undeclared identifier is reported only once for each function it appears in 778 | REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); | ^~~~~~~~~~~~~~~~~~~~~ /usr/local/php7/include/php/Zend/zend_constants.h:53:105: note: in definition of macro ‘REGISTER_LONG_CONSTANT’ 53 | #define REGISTER_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name)-1, (lval), (flags), module_number) | ^~~~ /usr/local/src/php7-src/ext/curl/interface.c:778:2: note: in expansion of macro ‘REGISTER_CURL_CONSTANT’ 778 | REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); | ^~~~~~~~~~~~~~~~~~~~~~ make: *** [Makefile:194: interface.lo] Error 1 noting /usr/local/src/php7-src/ext/curl/interface.c ... REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_USER_REPLY); 778 REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); REGISTER_CURL_CONSTANT(CURLE_FUNCTION_NOT_FOUND); ... checking, grep CURLE_OBSOLETE /usr/local/include/curl/curl.h CURLE_OBSOLETE24, /* 24 - NOT USED */ CURLE_OBSOLETE29, /* 29 - NOT USED */ CURLE_OBSOLETE32, /* 32 - NOT USED */ CURLE_OBSOLETE40, /* 40 - NOT USED */ CURLE_OBSOLETE44, /* 44 - NOT USED */ CURLE_OBSOLETE46, /* 46 - NOT USED */ CURLE_OBSOLETE50, /* 50 - NOT USED */ CURLE_OBSOLETE51, /* 51 - NOT USED */ CURLE_OBSOLETE57, /* 57 - NOT IN USE */ #define CURLE_OBSOLETE16 CURLE_HTTP2 #define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED #define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT #define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ #define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 #define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 #define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 #define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 #define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 #define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 #define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 ! #define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 #define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 #define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 #define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 A problem on my end, or a bug with new(er) curl/libcurl 'vs' php ext/curl? If more info's needed b4 redirecting, or to deal with here, pls let me know. thx!

Christoph Becker

6 years ago
On 15.11.2019 at 05:56, PGNet Dev wrote:
> I needed to bump local curl build version to fix a (php-unrelated) SEGV. Currently, I have > > curl -V > curl 7.67.1-DEV (x86_64-pc-linux-gnu) libcurl/7.67.1-DEV OpenSSL/1.1.1d zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh2/1.9.0_DEV nghttp2/1.40.0-DEV > Release-Date: [unreleased] > Protocols: dict file ftp ftps http https imap imaps pop3 pop3s scp sftp smtp smtps tftp > Features: AsynchDNS brotli HTTP2 HTTPS-proxy IDN IPv6 Largefile libz Metalink NTLM NTLM_WB PSL SSL TLS-SRP UnixSockets > > Rebuilding my usual PHP7.3/git install, > (add'l note: fwiw, the following issue also occurs with 7.4/git ...) > > cd php7 > > git branch -a | grep \* > * PHP-7.3 > > git log | head > commit 9083e178f656878cab46aee52b555346ef92a768 > Author: Dmitry Stogov <dmitry@zend.com> > Date: Tue Nov 12 12:59:50 2019 +0300 > > Fixed wrong constant usage > > commit ea2a125789d2e6cf7416bd706be1ac44df1367e4 > Merge: 4a55794b98 2c9926f156 > Author: Stanislav Malyshev <stas@php.net> > Date: Mon Nov 11 23:08:38 2019 -0800 > > works nicely as usual, > > /usr/local/php7/bin/php -v > PHP 7.3.13-dev (cli) (built: Nov 14 2019 19:53:24) ( NTS ) > Copyright (c) 1997-2018 The PHP Group > Zend Engine v3.3.13-dev, Copyright (c) 1998-2018 Zend Technologies > with Zend OPcache v7.3.13-dev, Copyright (c) 1999-2018, by Zend Technologies > > But curl extension now fails, > > ext/curl/interface.c:778:25: error: ‘CURLE_OBSOLETE20’ undeclared (first use in this function); did you mean ‘CURLE_OBSOLETE50’? > 778 | REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); > > > Before making noise about in @bugs, wanted to check 1st; known issue? additional/new config req'd?
That appears to be due to a recent change in libcurl[1]. We'll have to work around that, but I'm not sure how. Define both constants for BC? [1] <https://github.com/curl/curl/blob/b3eb7d172aab6c7f423aea2f97c27099d6b65f7a/include/curl/curl.h#L504-L506>
-- Christoph M. Becker

Rowan Collins

6 years ago
On Fri, 15 Nov 2019 at 08:19, Christoph M. Becker <cmbecker69@gmx.de> wrote:
> > That appears to be due to a recent change in libcurl[1]. We'll have to > work around that, but I'm not sure how. Define both constants for BC? > > [1] > < > https://github.com/curl/curl/blob/b3eb7d172aab6c7f423aea2f97c27099d6b65f7a/include/curl/curl.h#L504-L506 > > >
It looks like last time this happened (value 16 reused for HTTP2), the removed constant was reintroduced in curl to avoid just this scenario: https://github.com/curl/curl/pull/106 Perhaps a patch should be submitted to do the same thing again this time? Regards,
-- Rowan Tommins [IMSoP]

Christoph Becker

6 years ago
On 15.11.2019 at 10:01, Rowan Tommins wrote:
> On Fri, 15 Nov 2019 at 08:19, Christoph M. Becker <cmbecker69@gmx.de> wrote: > >> That appears to be due to a recent change in libcurl[1]. We'll have to >> work around that, but I'm not sure how. Define both constants for BC? >> >> [1] <https://github.com/curl/curl/blob/b3eb7d172aab6c7f423aea2f97c27099d6b65f7a/include/curl/curl.h#L504-L506> >> It looks like last time this happened (value 16 reused for HTTP2), the > removed constant was reintroduced in curl to avoid just this scenario: > https://github.com/curl/curl/pull/106 > > Perhaps a patch should be submitted to do the same thing again this time?
Ah, thanks! I've just submitted <https://github.com/curl/curl/pull/4601>.
-- Christoph M. Becker

PGNet Dev

6 years ago
On 11/15/19 1:41 AM, Christoph M. Becker wrote:
> Ah, thanks! I've just submitted <https://github.com/curl/curl/pull/4601>.
applied that patch to local curl/master build now build of php7/ext/curl ... make
>> Build complete.
thx!

PGNet Dev

6 years ago
On 11/15/19 8:15 AM, PGNet Dev wrote:
> On 11/15/19 1:41 AM, Christoph M. Becker wrote: >> Ah, thanks! I've just submitted <https://github.com/curl/curl/pull/4601>. > > applied that patch to local curl/master build > > now build of php7/ext/curl
fyi, bumps to php 7.4/git git log | head commit 99b8e67615159fc600a615e1e97f2d1cf18f14cb Merge: b78ec58f09 e981f5af51 Author: George Wang <gwang@php.net> Date: Thu Nov 21 17:58:44 2019 -0500 Merge branch 'PHP-7.3' into PHP-7.4 commit e981f5af51bf2a16965aad68ae268021dc251c9c Merge: b4f501d5a4 c7141412ce Author: George Wang <gwang@php.net> and curl/master, git log | head commit f70da9c17e315f382694d8ca5585191f4e5478d7 Author: Daniel Stenberg <daniel@haxx.se> Date: Thu Nov 21 11:37:44 2019 +0100 include: make CURLE_HTTP3 use a new error code To avoid potential issues with error code reuse. Reported-by: Christoph M. Becker Assisted-by: Dan Fandrich which includes the reworked fix for this issue, https://github.com/curl/curl/commit/f70da9c17e315f382694d8ca5585191f4e5478d7 does the trick as well, php -v PHP 7.4.1-dev (cli) (built: Nov 21 2019 16:45:24) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.1-dev, Copyright (c), by Zend Technologies php -m | grep curl curl now just a matter of the fix making it into next curl release.