emacs-devel
[Top][All Lists]
Advanced

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

Re: Emacs build fails on Windows mingw64


From: Bruno Haible
Subject: Re: Emacs build fails on Windows mingw64
Date: Mon, 25 Oct 2021 00:52:45 +0200

Andy Moreton wrote:
> > Andy suggested a simple fix that I quoted here:
> >
> > https://lists.gnu.org/r/emacs-devel/2021-10/msg01698.html
> >
> > We could apply that patch just to ntlib.c and just in emacs-28 (do not merge
> > to master) as Andy says that works for him;
> 
> Yes, that minimal fix bootstraps on emacs-28 and master with 64bit mingw64.

Thanks for the confirmation that the lack of definitions of
_GL_ATTRIBUTE_MALLOC and _GL_ATTRIBUTE_DEALLOC_FREE was indeed the problem.

Although Paul is right in saying that every file that uses Gnulib needs to
<config.h>, we make compromises regarding this requirement for the *.in.h
files. The commit
https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=354f27fea9bd4ecb53980de6bd374434a204afc5
from 2021-08-22 "Make generated .in.h files as standalone as possible"
added definitions of _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEALLOC_FREE,
_GL_ATTRIBUTE_MALLOC to stdlib.h, and assumed that these definitions would
also be visible in string.h, since string.h did a '#include <stdlib.h>'.

The commit
https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=a4a2d039a9117266ed8cb1977241e7c34b368993
from 2021-09-07 then removed this '#include <stdlib.h>' from string.in.h.
As a compensation, it added the declaration of free/rpl_free. But it needs
also the macros _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEALLOC_FREE,
_GL_ATTRIBUTE_MALLOC — when <config.h> is not pre-included.

The issue was also reported to me in private mail by Jan Engelhardt,
regarding the 'cdecl' package, on 2021-09-28, but I didn't have time
to react then; sorry about that.

This patch should fix it.


2021-10-24  Bruno Haible  <bruno@clisp.org>

        string: Avoid syntax error re strdup in string.in.h (regr. 2021-09-07).
        Reported by Jan Engelhardt <jengelh@inai.de>
        and by Arash Esbati <arash@gnu.org> via Andy Moreton in
        <https://lists.gnu.org/archive/html/bug-gnulib/2021-10/msg00058.html>.
        * lib/string.in.h (_GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEALLOC_FREE,
        _GL_ATTRIBUTE_MALLOC): Add fallback declarations, like in
        lib/stdlib.in.h.
        * lib/wchar.in.h (_GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEALLOC_FREE,
        _GL_ATTRIBUTE_MALLOC): Likewise.

diff --git a/lib/string.in.h b/lib/string.in.h
index 8d77ae380..afe735086 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -67,6 +67,35 @@
 # include <strings.h>
 #endif
 
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+   that can be freed by passing them as the Ith argument to the
+   function F.  */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+#  define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+#  define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+   can be freed via 'free'; it can be used only after declaring 'free'.  */
+/* Applies to: functions.  Cannot be used on inline functions.  */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+   allocated memory.  */
+/* Applies to: functions.  */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+#  define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+#  define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
 /* The __attribute__ feature is available in gcc versions 2.5 and later.
    The attribute __pure__ was added in gcc 2.96.  */
 #ifndef _GL_ATTRIBUTE_PURE
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
index f13379ad8..20315dd7b 100644
--- a/lib/wchar.in.h
+++ b/lib/wchar.in.h
@@ -84,6 +84,35 @@
 #ifndef _@GUARD_PREFIX@_WCHAR_H
 #define _@GUARD_PREFIX@_WCHAR_H
 
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+   that can be freed by passing them as the Ith argument to the
+   function F.  */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+#  define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+#  define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+   can be freed via 'free'; it can be used only after declaring 'free'.  */
+/* Applies to: functions.  Cannot be used on inline functions.  */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+   allocated memory.  */
+/* Applies to: functions.  */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+#  define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+#  define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
 /* The __attribute__ feature is available in gcc versions 2.5 and later.
    The attribute __pure__ was added in gcc 2.96.  */
 #ifndef _GL_ATTRIBUTE_PURE






reply via email to

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