help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: clang fails to compile emacs in Microsoft Windows


From: Óscar Fuentes
Subject: Re: clang fails to compile emacs in Microsoft Windows
Date: Fri, 12 May 2023 17:47:25 +0200
User-agent: Gnus/5.13 (Gnus v5.13)

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Biswapriyo Nath <nathbappai@gmail.com>
>> Date: Fri, 12 May 2023 19:41:17 +0530
>> 
>> * compiler:
>> clang version 16.0.2
>> Target: x86_64-w64-windows-gnu
>> Thread model: posix
>> 
>> * compiler error:
>> 
>> ../../src/sysdep.c:472:13: error: call to undeclared function
>> 'waitpid'; ISO C99 and later do not support implicit function
>> declarations [-Wimplicit-function-declaration]
>> ../../src/sysdep.c:518:43: error: use of undeclared identifier 'WNOHANG'
>> 
>> * Probable reason:
>> 
>> AC_HEADER_SYS_WAIT fails to check sys/wait.h file. It tests with
>> wait() function which is undefined in nt/inc/sys/wait.h file. Here is
>> the error message from config.log
>> 
>> configure:11452: checking for sys/wait.h that is POSIX.1 compatible
>> configure:11479: x86_64-w64-mingw32-cc -I ../nt/inc -c -g3 -O2
>> -gdwarf-2 -mtune=generic  -D__USE_MINGW_ANSI_STDIO=1 conftest.c >&5
>> conftest.c:70:3: error: call to undeclared function 'wait'; ISO C99
>> and later do not support implicit function declarations
>> [-Wimplicit-function-declaration]
>> 
>> I can provide further information if required. Thank you.
>
> Thanks, but Clang is not supported for building Emacs on MS-Windows.
> We only support MinGW GCC.  Unless someone steps up and takes upon
> themselves the job of supporting the Clang build, this will remain so.
> Supporting the MS-Windows build is hard and thankless job as it is;
> adding another compiler on top of that is just too much.
>
> Sorry.

I think that the problem reported by the OP was introduced recently
(and, by the looks of it, it is problematic not just because of Clang,
but as a C construct, because it seems to rely on an implicit function
declaration. Yes, I've seen the thread on gcc-devel, so no need to
explain things further).

Emacs 28.2 compiles with Clang on Windows with this simple patch:

diff -aur emacs-28.2-orig/configure.ac emacs-28.2/configure.ac
--- emacs-28.2-orig/configure.ac        2022-09-07 06:24:51.000000000 +0800
+++ emacs-28.2/configure.ac     2022-10-09 20:40:07.436552500 +0800
@@ -147,7 +147,7 @@
       fi
       cc_target=`$cc -v 2>&1 | sed -n 's/Target: //p'`
       case "$cc_target" in
-          *-*) host=$cc_target
+          *-*) host=$target_alias
              ;;
           "") AC_MSG_ERROR([Impossible to obtain $cc compiler target.
 Please explicitly provide --host.])
@@ -5765,8 +5765,8 @@
   mingw32)
    ## Is it any better under MinGW64 to relocate emacs into higher addresses?
    case "$canonical" in
-     x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 
-Wl,-heap,0x00100000 -Wl,-image-base,0x400000000 -Wl,-entry,__start 
-Wl,-Map,./temacs.map" ;;
-     *) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 
-Wl,-image-base,0x01000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
+     x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 
-Wl,-image-base,0x400000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
+     *) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 
-Wl,-image-base,0x01000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
    esac
    ## If they want unexec, disable Windows ASLR for the Emacs binary
    if test "$with_dumping" = "unexec"; then



and this one for UCRT in general:



--- emacs-28.1/nt/cmdproxy.c.orig       2022-06-23 19:24:10.845481100 +0200
+++ emacs-28.1/nt/cmdproxy.c    2022-06-23 19:24:19.271132900 +0200
@@ -35,6 +35,10 @@
 #include <string.h>  /* strlen */
 #include <ctype.h>   /* isspace, isalpha */
 
+#ifdef _UCRT
+#define _snprintf snprintf
+#endif
+
 /* We don't want to include stdio.h because we are already duplicating
    lots of it here */
 extern int _snprintf (char *buffer, size_t count, const char *format, ...);
--- emacs-28.1/src/sysdep.c.orig        2022-06-23 20:59:02.252891700 +0200
+++ emacs-28.1/src/sysdep.c     2022-06-23 21:05:31.998322600 +0200
@@ -2693,7 +2693,9 @@
   if (close_stream (stdout) != 0)
     {
+#ifndef _UCRT // XXX: close_stream(stdout) fails for some reason
       emacs_perror ("Write error to standard output");
       _exit (EXIT_FAILURE);
+#endif
     }
 
   /* Do not close stderr if addresses are being sanitized, as the
@@ -2702,7 +2704,11 @@
   if (err | (ADDRESS_SANITIZER
             ? fflush (stderr) != 0 || ferror (stderr)
             : close_stream (stderr) != 0))
+#ifndef _UCRT // XXX: close_stream(stderr) fails for some reason
     _exit (EXIT_FAILURE);
+#else
+    ;
+#endif
 }
 
 #ifndef DOS_NT


Those patches are kept in the MSYS2/Mingw-packages repository and we
provide clang-built Emacs 28.x binary packages.

I think that the OP was not requesting support from the Emacs
maintainers specifically, that's why he posted under -help and not under
-devel or -bugs.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]