Changes since v1:

- Replaced check for MinGW 10.0.0 or above with a configure-magic to
  check if afunix.h is available or not.

In https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122666#c2, it's mentioned that
the block was placed above the include of config.h, but I see no reason why it
have to be, as long as it's above the include of system.h.

Ok for trunk?

--

afunix.h was first included in MinGW 10.0.0.  For earlier versions, fall
back to internal definition.

gcc/ChangeLog:

        * diagnostics/sarif-sink.cc: Conditionally include afunix.h
          if it's available, else fall back to internal definition.

Signed-off-by: Torbjörn SVENSSON <[email protected]>
---
 gcc/config.in                 |  6 ++++++
 gcc/configure                 | 38 +++++++++++++++++++++++++++++++++--
 gcc/configure.ac              | 15 ++++++++++++++
 gcc/diagnostics/sarif-sink.cc | 10 ++++++++-
 4 files changed, 66 insertions(+), 3 deletions(-)

diff --git a/gcc/config.in b/gcc/config.in
index 72d2eb1dc80..2feb1d12b1b 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -355,6 +355,12 @@
 #endif
 
 
+/* Define if you have a working <afunix.h> header file. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AFUNIX_H
+#endif
+
+
 /* Define if AF_INET6 supported. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_AF_INET6
diff --git a/gcc/configure b/gcc/configure
index 40d40cb8daa..03f4d011ed6 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -10485,6 +10485,40 @@ $as_echo "#define HAVE_INTTYPES_H 1" >>confdefs.h
 
 fi
 
+# Use <afunix.h> only if it exists,
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for afunix.h" >&5
+$as_echo_n "checking for afunix.h... " >&6; }
+if ${gcc_cv_header_afunix_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <winsock2.h>
+#include <afunix.h>
+int
+main ()
+{
+SOCKADDR_UN addr;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  gcc_cv_header_afunix_h=yes
+else
+  gcc_cv_header_afunix_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_header_afunix_h" >&5
+$as_echo "$gcc_cv_header_afunix_h" >&6; }
+if test $gcc_cv_header_afunix_h = yes; then
+
+$as_echo "#define HAVE_AFUNIX_H 1" >>confdefs.h
+
+fi
+
 # Look for the ZSTD package.
 ZSTD_INCLUDE=
 ZSTD_LIB=
@@ -21939,7 +21973,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 21942 "configure"
+#line 21976 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -22045,7 +22079,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 22048 "configure"
+#line 22082 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 85272df5a24..15f18b01dd8 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1484,6 +1484,21 @@ if test $gcc_cv_header_inttypes_h = yes; then
        [Define if you have a working <inttypes.h> header file.])
 fi
 
+# Use <afunix.h> only if it exists,
+AC_MSG_CHECKING(for afunix.h)
+AC_CACHE_VAL(gcc_cv_header_afunix_h,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[[#include <winsock2.h>
+#include <afunix.h>]],
+  [[SOCKADDR_UN addr;]])],
+  [gcc_cv_header_afunix_h=yes],
+  [gcc_cv_header_afunix_h=no])])
+AC_MSG_RESULT($gcc_cv_header_afunix_h)
+if test $gcc_cv_header_afunix_h = yes; then
+  AC_DEFINE(HAVE_AFUNIX_H, 1,
+       [Define if you have a working <afunix.h> header file.])
+fi
+
 # Look for the ZSTD package.
 ZSTD_INCLUDE=
 ZSTD_LIB=
diff --git a/gcc/diagnostics/sarif-sink.cc b/gcc/diagnostics/sarif-sink.cc
index 78743df7f1d..8e8947aa026 100644
--- a/gcc/diagnostics/sarif-sink.cc
+++ b/gcc/diagnostics/sarif-sink.cc
@@ -18,15 +18,23 @@ You should have received a copy of the GNU General Public 
License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#include "config.h"
+
 #ifdef __MINGW32__
 #include <winsock2.h>
+#ifdef HAVE_AFUNIX_H
 #include <afunix.h>
 #else
+struct sockaddr_un {
+  ADDRESS_FAMILY sun_family;
+  char sun_path[108];
+};
+#endif
+#else
 #include <sys/un.h>
 #include <sys/socket.h>
 #endif
 
-#include "config.h"
 #define INCLUDE_LIST
 #define INCLUDE_MAP
 #define INCLUDE_STRING
-- 
2.43.0

Reply via email to