[vlc-devel] [PATCH] contrib: gnutls: fix 3.6 compilation with an older macOS SDK

David Fuhrmann david.fuhrmann at gmail.com
Sat Jun 20 21:41:37 CEST 2020



> Am 20.06.2020 um 09:15 schrieb Steve Lhomme <robux4 at ycbcr.xyz>:
> 
> Fixes this compilation error:
> system/fastopen.c:134:9: error: 'connectx' is only available on macOS 10.11 or newer [-Werror,-Wunguarded-availability]
>                ret = connectx(fd, &endpoints, SAE_ASSOCID_ANY, CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT, NULL, 0, NULL, NULL);
>                      ^~~~~~~~
> /Applications/Xcode9.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/socket.h:713:5:
> note: 'connectx' has been marked as being introduced in macOS 10.11 here, but the deployment target is macOS 10.7.0
> 
> In this patch __builtin_available() is assumed to be avalaible in the toolchain
> which is the case in our 3.0 and 4.0 toolchains. A cleaner patch should detect
> it in configure.ac. But we can't do autoconf changes in gnutls as it never
> works properly.
> ---
> ...ctx-not-available-on-older-macOS-SDK.patch | 46 +++++++++++++++++++
> contrib/src/gnutls/rules.mak                  |  3 ++
> 2 files changed, 49 insertions(+)
> create mode 100644 contrib/src/gnutls/0001-fix-connectx-not-available-on-older-macOS-SDK.patch
> 
> diff --git a/contrib/src/gnutls/0001-fix-connectx-not-available-on-older-macOS-SDK.patch b/contrib/src/gnutls/0001-fix-connectx-not-available-on-older-macOS-SDK.patch
> new file mode 100644
> index 00000000000..300437a2320
> --- /dev/null
> +++ b/contrib/src/gnutls/0001-fix-connectx-not-available-on-older-macOS-SDK.patch
> @@ -0,0 +1,46 @@
> +From 3faffe77fd5cb15cb132ebaf4bfef6dc579f25e2 Mon Sep 17 00:00:00 2001
> +From: Steve Lhomme <robux4 at ycbcr.xyz>
> +Date: Fri, 19 Jun 2020 15:11:00 +0200
> +Subject: [PATCH] fix connectx not available on older macOS SDK
> +
> +Fixes this compilation error:
> +system/fastopen.c:134:9: error: 'connectx' is only available on macOS 10.11 or newer [-Werror,-Wunguarded-availability]
> +                ret = connectx(fd, &endpoints, SAE_ASSOCID_ANY, CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT, NULL, 0, NULL, NULL);
> +                      ^~~~~~~~
> +/Applications/Xcode9.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/socket.h:713:5: note: 'connectx' has been marked as being introduced in macOS 10.11 here, but the deployment target is macOS 10.7.0
> +
> +The detection is the same as found in curl [1].
> +
> +If HAVE_BUILTIN_AVAILABLE is not available we fallback to the code without
> +TCP_FASTOPEN_OSX.
> +
> +[1] https://github.com/curl/curl/commit/870d849d48a26b8eeb0d4bb1f4655367a4a191ca
> +---
> + lib/system/fastopen.c | 10 ++++++++--
> + 1 file changed, 8 insertions(+), 2 deletions(-)
> +
> +diff --git a/lib/system/fastopen.c b/lib/system/fastopen.c
> +index 8d8409e48..b816decff 100644
> +--- a/lib/system/fastopen.c
> ++++ b/lib/system/fastopen.c
> +@@ -129,9 +129,15 @@ tfo_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec, int iovec_cnt)
> + 	}
> + # elif defined(TCP_FASTOPEN_OSX)
> + 	{
> +-		sa_endpoints_t endpoints = { .sae_dstaddr = (struct sockaddr*)&p->connect_addr, .sae_dstaddrlen = p->connect_addrlen };
> ++		if(__builtin_available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 2.0, *)) {
> ++			sa_endpoints_t endpoints = { .sae_dstaddr = (struct sockaddr*)&p->connect_addr, .sae_dstaddrlen = p->connect_addrlen };
> + 
> +-		ret = connectx(fd, &endpoints, SAE_ASSOCID_ANY, CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT, NULL, 0, NULL, NULL);
> ++			ret = connectx(fd, &endpoints, SAE_ASSOCID_ANY, CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT, NULL, 0, NULL, NULL);
> ++		}
> ++		else
> ++		{
> ++			ret = connect(fd, (struct sockaddr*)&p->connect_addr, p->connect_addrlen);
> ++		}
> + 		if (errno == ENOTCONN || errno == EINPROGRESS) {
> + 			gnutls_assert();
> + 			errno = EAGAIN;
> +-- 
> +2.26.0.windows.1
> +
> diff --git a/contrib/src/gnutls/rules.mak b/contrib/src/gnutls/rules.mak
> index 191dd8040ca..96a5613a660 100644
> --- a/contrib/src/gnutls/rules.mak
> +++ b/contrib/src/gnutls/rules.mak
> @@ -33,6 +33,9 @@ gnutls: gnutls-$(GNUTLS_VERSION).tar.xz .sum-gnutls
> 
> 	# disable the dllimport in static linking (pkg-config --static doesn't handle Cflags.private)
> 	cd $(UNPACK_DIR) && sed -i.orig -e s/"_SYM_EXPORT __declspec(dllimport)"/"_SYM_EXPORT"/g lib/includes/gnutls/gnutls.h.in
> +
> +	# don't use connectx on macOS versions where it's not available
> +	$(APPLY) $(SRC)/gnutls/0001-fix-connectx-not-available-on-older-macOS-SDK.patch
> ifdef HAVE_ANDROID
> 	$(APPLY) $(SRC)/gnutls/no-create-time-h.patch
> endif

LGTM, but this is only needed if you intend to also port a gnutls bump to 3.6 to the VLC-3.0 branch, and the patch itself is only needed for vlc-3.0 as well, as 4.0 will have 10.11 as macOS min version.


More information about the vlc-devel mailing list