all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Óscar Fuentes" <ofv@wanadoo.es>
To: help-gnu-emacs@gnu.org
Subject: Re: clang fails to compile emacs in Microsoft Windows
Date: Fri, 12 May 2023 17:47:25 +0200	[thread overview]
Message-ID: <87mt29blgy.fsf@telefonica.net> (raw)
In-Reply-To: 83v8gxbnd8.fsf@gnu.org

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
 }
 \f
 #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	other threads:[~2023-05-12 15:47 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-12 14:11 clang fails to compile emacs in Microsoft Windows Biswapriyo Nath
2023-05-12 15:06 ` Eli Zaretskii
2023-05-12 15:47   ` Óscar Fuentes [this message]
2023-05-12 15:59     ` Biswapriyo Nath
2023-05-12 16:03       ` Biswapriyo Nath
2023-05-12 16:13       ` Eli Zaretskii
2023-05-12 16:10     ` Eli Zaretskii
2023-05-12 20:07       ` Óscar Fuentes
2023-05-12 20:10         ` Biswapriyo Nath
2023-05-13  6:00           ` Eli Zaretskii
2023-05-13  7:21             ` Biswapriyo Nath
2023-05-13  5:53         ` Eli Zaretskii
2023-05-13 12:39           ` Óscar Fuentes
2023-05-13 12:46             ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mt29blgy.fsf@telefonica.net \
    --to=ofv@wanadoo.es \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.