On 2026-01-30 16:22, David Malcolm wrote:
On Fri, 2026-01-30 at 15:06 +0100, Torbjörn SVENSSON wrote:

Hi Torbjörn; sorry about the breakage.

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.

Sangamesh fixed the placement of config.h in that file yesterday in
r16-7139-gbc10a49c37501e; please can you rebase and retry your patch?

I've rebased my patch and it builds just fine.
However, the function maybe_open_sarif_sink_for_socket() does not behave 
properly on Windows.

No matter what I do, I always ends up with
cc1.exe: fatal error: unable to create socket: No error

I think this has due to that WSAStartup() might never called.

My ambition with my patch was never to get the socket code to work, it was 
simply to fix the build issue with older mingw versions, regardless if the 
feature is used or not.

Do you agree that we fix the build issue first, and then someone with adequate 
Windows experience can perhaps fix the socket issue?

Kind regards,
Torbjörn


Thanks
Dave


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


Reply via email to