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.
next prev parent 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
List information: https://www.gnu.org/software/emacs/
* 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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).