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

- Thread: https://externals.io/message/107793
- Original archive: https://news-web.php.net/php.internals/107793
- Started by PGNet Dev on 2019-11-15T04:56:48+00:00
- Messages: 6
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #107793 — PGNet Dev — 2019-11-15T04:56:48+00:00

URL: https://externals.io/message/107793#107793

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!

---

## #107794 — Christoph M. Becker — 2019-11-15T08:18:51+00:00

URL: https://externals.io/message/107793#107794 · In reply to: #107793

> 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

---

## #107795 — Rowan Tommins — 2019-11-15T09:01:13+00:00

URL: https://externals.io/message/107793#107795 · In reply to: #107794

>
> 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]

---

## #107796 — Christoph M. Becker — 2019-11-15T09:41:32+00:00

URL: https://externals.io/message/107793#107796 · In reply to: #107795

> 
>
> > […]
> 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

---

## #107800 — PGNet Dev — 2019-11-15T16:15:09+00:00

URL: https://externals.io/message/107793#107800 · In reply to: #107796

> 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
> > […]


thx!

---

## #107850 — PGNet Dev — 2019-11-22T01:30:31+00:00

URL: https://externals.io/message/107793#107850 · In reply to: #107800

> 
> > […]
> 
> 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.
