hc
2023-11-06 36f0949ef9854b82a9a3154d970da4e3b8d12a61
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
From 923cab3a5ee112d3de44b5571e73402f1fa3d619 Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Date: Mon, 26 Feb 2018 19:06:40 +0100
Subject: [PATCH] ext/sockets: make AI_IDN usage optional
 
AI_IDN is not supported by all C libraries (uClibc, musl), so make it
optional, like AI_ALL.
 
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Upstream-status: https://github.com/php/php-src/pull/3160
---
 ext/sockets/config.m4 | 13 +++++++++++++
 ext/sockets/sockets.c |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)
 
diff --git a/ext/sockets/config.m4 b/ext/sockets/config.m4
index fe7d22a10a..2bf6a2bd11 100644
--- a/ext/sockets/config.m4
+++ b/ext/sockets/config.m4
@@ -69,6 +69,19 @@ if test "$PHP_SOCKETS" != "no"; then
     AC_DEFINE(HAVE_AI_ALL,1,[Whether you have AI_ALL])
   fi
 
+  dnl Check for AI_IDN flag
+  AC_CACHE_CHECK([if getaddrinfo supports AI_IDN],[ac_cv_gai_ai_idn],
+  [
+    AC_TRY_COMPILE([
+#include <netdb.h>
+  ], [int flag = AI_IDN;],
+     ac_cv_gai_ai_idn=yes, ac_cv_gai_ai_idn=no)
+  ])
+
+  if test "$ac_cv_gai_ai_idn" = yes; then
+    AC_DEFINE(HAVE_AI_IDN,1,[Whether you have AI_IDN])
+  fi
+
   PHP_NEW_EXTENSION([sockets], [sockets.c multicast.c conversions.c sockaddr_conv.c sendrecvmsg.c], [$ext_shared],, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
   PHP_INSTALL_HEADERS([ext/sockets/], [php_sockets.h])
 fi
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index 6db56c2816..ee9651ce09 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -796,7 +796,7 @@ static PHP_MINIT_FUNCTION(sockets)
     REGISTER_LONG_CONSTANT("AI_ALL",            AI_ALL,                CONST_CS | CONST_PERSISTENT);
 #endif
     REGISTER_LONG_CONSTANT("AI_ADDRCONFIG",        AI_ADDRCONFIG,        CONST_CS | CONST_PERSISTENT);
-#ifdef __USE_GNU
+#if defined(HAVE_AI_IDN) && defined(__USE_GNU)
     REGISTER_LONG_CONSTANT("AI_IDN",            AI_IDN,                CONST_CS | CONST_PERSISTENT);
     REGISTER_LONG_CONSTANT("AI_CANONIDN",        AI_CANONIDN,        CONST_CS | CONST_PERSISTENT);
     REGISTER_LONG_CONSTANT("AI_IDN_ALLOW_UNASSIGNED",        AI_IDN_ALLOW_UNASSIGNED, CONST_CS | CONST_PERSISTENT);
-- 
2.14.3