unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Master is broken
@ 2015-10-10  8:47 Eli Zaretskii
  2015-10-10 10:44 ` Andy Moreton
  2015-10-10 10:46 ` Eli Zaretskii
  0 siblings, 2 replies; 15+ messages in thread
From: Eli Zaretskii @ 2015-10-10  8:47 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

As of commit bb7c182, master is broken, at least for non-optimized
builds:

    CCLD     temacs
  keymap.o: In function `Fset_keymap_parent':
  /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:344: undefined reference to `CHECK_IMPURE'
  keymap.o: In function `store_in_keymap':
  /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:753: undefined reference to `PURE_P'
  /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:801: undefined reference to `CHECK_IMPURE'
  /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:854: undefined reference to `CHECK_IMPURE'
  /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:898: undefined reference to `CHECK_IMPURE'
  data.o: In function `Fsetcar':
  /srv/data/home/e/eliz/git/emacs/trunk/src/data.c:563: undefined reference to `CHECK_IMPURE'
  data.o: In function `Fsetcdr':
  /srv/data/home/e/eliz/git/emacs/trunk/src/data.c:573: undefined reference to `CHECK_IMPURE'
  data.o:/srv/data/home/e/eliz/git/emacs/trunk/src/data.c:2218: more undefined references to `CHECK_IMPURE' follow
  collect2: error: ld returned 1 exit status
  make[1]: *** [temacs] Error 1

I'm not really sure what's going on here, all this INLINE stuff is too
complicated.  These 2 inline functions are clearly visible in the
preprocessed source, and still the linker barfs.  The only way I could
make it link successfully was by including puresize.h in emacs.c as
well, but then temacs crashed during loadup.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10  8:47 Master is broken Eli Zaretskii
@ 2015-10-10 10:44 ` Andy Moreton
  2015-10-10 10:54   ` Eli Zaretskii
  2015-10-10 10:46 ` Eli Zaretskii
  1 sibling, 1 reply; 15+ messages in thread
From: Andy Moreton @ 2015-10-10 10:44 UTC (permalink / raw)
  To: emacs-devel

On Sat 10 Oct 2015, Eli Zaretskii wrote:

> As of commit bb7c182, master is broken, at least for non-optimized
> builds:
>
>     CCLD     temacs
>   keymap.o: In function `Fset_keymap_parent':
>   /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:344: undefined reference to `CHECK_IMPURE'
>   keymap.o: In function `store_in_keymap':
>   /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:753: undefined reference to `PURE_P'
>   /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:801: undefined reference to `CHECK_IMPURE'
>   /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:854: undefined reference to `CHECK_IMPURE'
>   /srv/data/home/e/eliz/git/emacs/trunk/src/keymap.c:898: undefined reference to `CHECK_IMPURE'
>   data.o: In function `Fsetcar':
>   /srv/data/home/e/eliz/git/emacs/trunk/src/data.c:563: undefined reference to `CHECK_IMPURE'
>   data.o: In function `Fsetcdr':
>   /srv/data/home/e/eliz/git/emacs/trunk/src/data.c:573: undefined reference to `CHECK_IMPURE'
>   data.o:/srv/data/home/e/eliz/git/emacs/trunk/src/data.c:2218: more undefined references to `CHECK_IMPURE' follow
>   collect2: error: ld returned 1 exit status
>   make[1]: *** [temacs] Error 1
>
> I'm not really sure what's going on here, all this INLINE stuff is too
> complicated.  These 2 inline functions are clearly visible in the
> preprocessed source, and still the linker barfs.  The only way I could
> make it link successfully was by including puresize.h in emacs.c as
> well, but then temacs crashed during loadup.

The comments in the definition of INLINE explain how this is supposed to
work. I see the same errors with mingw64: the patch below fixed
bootstrap for me.

    AndyM

diff --git a/src/emacs.c b/src/emacs.c
index 5a6999d9b1df..3eff5a720eac 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -82,6 +82,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "syntax.h"
 #include "sysselect.h"
 #include "systime.h"
+#include "puresize.h"
 
 #include "gnutls.h"
 
diff --git a/src/puresize.h b/src/puresize.h
index d0926c652135..945471e6044c 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -16,6 +16,11 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#ifndef EMACS_PURESIZE_H
+#define EMACS_PURESIZE_H
+
+INLINE_HEADER_BEGIN
+
 /* Define PURESIZE, the number of bytes of pure Lisp code to leave space for.
 
    At one point, this was defined in config.h, meaning that changing
@@ -88,3 +93,8 @@ CHECK_IMPURE (Lisp_Object obj, void *ptr)
   if (PURE_P (ptr))
     pure_write_error (obj);
 }
+
+INLINE_HEADER_END
+
+#endif /* EMACS_PURESIZE_H */
+




^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10  8:47 Master is broken Eli Zaretskii
  2015-10-10 10:44 ` Andy Moreton
@ 2015-10-10 10:46 ` Eli Zaretskii
  2015-10-10 15:59   ` Andreas Schwab
  2015-10-10 16:46   ` Paul Eggert
  1 sibling, 2 replies; 15+ messages in thread
From: Eli Zaretskii @ 2015-10-10 10:46 UTC (permalink / raw)
  To: eggert, Andreas Schwab; +Cc: emacs-devel

> Date: Sat, 10 Oct 2015 11:47:38 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: emacs-devel@gnu.org
> 
>   data.o: In function `Fsetcdr':
>   /srv/data/home/e/eliz/git/emacs/trunk/src/data.c:573: undefined reference to `CHECK_IMPURE'
>   data.o:/srv/data/home/e/eliz/git/emacs/trunk/src/data.c:2218: more undefined references to `CHECK_IMPURE' follow
>   collect2: error: ld returned 1 exit status
>   make[1]: *** [temacs] Error 1
> 
> I'm not really sure what's going on here, all this INLINE stuff is too
> complicated.  These 2 inline functions are clearly visible in the
> preprocessed source, and still the linker barfs.  The only way I could
> make it link successfully was by including puresize.h in emacs.c as
> well, but then temacs crashed during loadup.

With the fix by Andreas in 8f41c30, including puresize.h in emacs.c
now seems to DTRT, so I committed that change.

Btw, Andreas, don't we need a similar change (i.e. use XPNTR in the
second argument of CHECK_IMPURE) in the other places where
CHECK_IMPURE is called as well?  If not, can you explain why XVECTOR
is incorrect there, but XCONS is correct?

Thanks.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 10:44 ` Andy Moreton
@ 2015-10-10 10:54   ` Eli Zaretskii
  2015-10-10 11:27     ` Andy Moreton
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2015-10-10 10:54 UTC (permalink / raw)
  To: Andy Moreton; +Cc: emacs-devel

> From: Andy Moreton <andrewjmoreton@gmail.com>
> Date: Sat, 10 Oct 2015 11:44:24 +0100
> 
> > I'm not really sure what's going on here, all this INLINE stuff is too
> > complicated.  These 2 inline functions are clearly visible in the
> > preprocessed source, and still the linker barfs.  The only way I could
> > make it link successfully was by including puresize.h in emacs.c as
> > well, but then temacs crashed during loadup.
> 
> The comments in the definition of INLINE explain how this is supposed to
> work.

They do?  Then I'm probably missing something, because I cannot find
where it says that emacs.c should include any header that uses INLINE.
(Do you mean the comments in conf_post.h?)  I arrived at that by using
"nm -A" on the various *.o files that use INLINE, looking for *.o
files that define those symbols.

> I see the same errors with mingw64: the patch below fixed
> bootstrap for me.

I installed the change in emacs.c recently.  The change in puresize.h
is not needed to fix the problem, neither on GNU/Linux nor in the
mingw32 build.  Are you saying that without the changes in puresize.h
you cannot compile/link the current master?  If so, please show the
error messages.

Thanks.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 10:54   ` Eli Zaretskii
@ 2015-10-10 11:27     ` Andy Moreton
  0 siblings, 0 replies; 15+ messages in thread
From: Andy Moreton @ 2015-10-10 11:27 UTC (permalink / raw)
  To: emacs-devel

On Sat 10 Oct 2015, Eli Zaretskii wrote:

>> From: Andy Moreton <andrewjmoreton@gmail.com>
>> Date: Sat, 10 Oct 2015 11:44:24 +0100
>> 
>> > I'm not really sure what's going on here, all this INLINE stuff is too
>> > complicated.  These 2 inline functions are clearly visible in the
>> > preprocessed source, and still the linker barfs.  The only way I could
>> > make it link successfully was by including puresize.h in emacs.c as
>> > well, but then temacs crashed during loadup.
>> 
>> The comments in the definition of INLINE explain how this is supposed to
>> work.
>
> They do?  Then I'm probably missing something, because I cannot find
> where it says that emacs.c should include any header that uses INLINE.
> (Do you mean the comments in conf_post.h?)  I arrived at that by using
> "nm -A" on the various *.o files that use INLINE, looking for *.o
> files that define those symbols.

Yes, the comments in conf_post.h, which I assume come from a gnulib
module. That shows that one file should contain '#define INLINE
EXTERN_INLINE' to ensure that one translation unit contains a
non-inlined definition of each function declared INLINE.

>> I see the same errors with mingw64: the patch below fixed
>> bootstrap for me.
>
> I installed the change in emacs.c recently.  The change in puresize.h
> is not needed to fix the problem, neither on GNU/Linux nor in the
> mingw32 build.  Are you saying that without the changes in puresize.h
> you cannot compile/link the current master?  If so, please show the
> error messages.

Bootstrap of commit f655d09fd5b4 works for me, so the other changes appear
not to be needed. Paul Eggert will know what the correct fix should be.

    AndyM




^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 10:46 ` Eli Zaretskii
@ 2015-10-10 15:59   ` Andreas Schwab
  2015-10-10 16:19     ` Eli Zaretskii
  2015-10-10 16:46   ` Paul Eggert
  1 sibling, 1 reply; 15+ messages in thread
From: Andreas Schwab @ 2015-10-10 15:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: eggert, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> Btw, Andreas, don't we need a similar change (i.e. use XPNTR in the
> second argument of CHECK_IMPURE) in the other places where
> CHECK_IMPURE is called as well?  If not, can you explain why XVECTOR
> is incorrect there, but XCONS is correct?

A CONSP is always a CONSP.  But an ARRAYP is a VECTORP or a STRINGP or a
CHAR_TABLE_P or a BOOL_VECTOR_P.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 15:59   ` Andreas Schwab
@ 2015-10-10 16:19     ` Eli Zaretskii
  0 siblings, 0 replies; 15+ messages in thread
From: Eli Zaretskii @ 2015-10-10 16:19 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: eggert, emacs-devel

> From: Andreas Schwab <schwab@suse.de>
> Cc: eggert@cs.ucla.edu,  emacs-devel@gnu.org
> Date: Sat, 10 Oct 2015 17:59:57 +0200
> 
> A CONSP is always a CONSP.  But an ARRAYP is a VECTORP or a STRINGP or a
> CHAR_TABLE_P or a BOOL_VECTOR_P.

Light goes on.  Thanks.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 10:46 ` Eli Zaretskii
  2015-10-10 15:59   ` Andreas Schwab
@ 2015-10-10 16:46   ` Paul Eggert
  2015-10-10 17:06     ` Eli Zaretskii
  1 sibling, 1 reply; 15+ messages in thread
From: Paul Eggert @ 2015-10-10 16:46 UTC (permalink / raw)
  To: Eli Zaretskii, Andreas Schwab; +Cc: emacs-devel

Eli Zaretskii wrote:
> With the fix by Andreas in 8f41c30, including puresize.h in emacs.c
> now seems to DTRT, so I committed that change.

Thanks.  The problem did not occur with my build because the function was 
inlined everywhere it was used.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 16:46   ` Paul Eggert
@ 2015-10-10 17:06     ` Eli Zaretskii
  2015-10-10 17:12       ` Eli Zaretskii
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2015-10-10 17:06 UTC (permalink / raw)
  To: Paul Eggert; +Cc: schwab, emacs-devel

> Cc: emacs-devel@gnu.org
> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Sat, 10 Oct 2015 09:46:58 -0700
> 
> Eli Zaretskii wrote:
> > With the fix by Andreas in 8f41c30, including puresize.h in emacs.c
> > now seems to DTRT, so I committed that change.
> 
> Thanks.  The problem did not occur with my build because the function was 
> inlined everywhere it was used.

Is it true that any header that defines INLINE functions should be
included by emacs.c (and if it is used in lib-src programs, also in
their source file that defines INLINE to EXTERN_INLINE)?  If so, I'd
like to add this to the commentary in conf_post.h.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 17:06     ` Eli Zaretskii
@ 2015-10-10 17:12       ` Eli Zaretskii
  2015-10-10 19:01         ` Paul Eggert
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2015-10-10 17:12 UTC (permalink / raw)
  To: eggert; +Cc: schwab, emacs-devel

> Date: Sat, 10 Oct 2015 20:06:25 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: schwab@suse.de, emacs-devel@gnu.org
> 
> Is it true that any header that defines INLINE functions should be
> included by emacs.c (and if it is used in lib-src programs, also in
> their source file that defines INLINE to EXTERN_INLINE)?

Also, when exactly are INLINE_HEADER_BEGIN/END required?  puresize.h
doesn't have it, and still compiles; other headers which use INLINE do
have INLINE_HEADER_BEGIN/END.  What factor determines whether they are
absolutely required?

Thanks.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 17:12       ` Eli Zaretskii
@ 2015-10-10 19:01         ` Paul Eggert
  2015-10-10 19:05           ` Eli Zaretskii
  2015-10-11  0:13           ` Juanma Barranquero
  0 siblings, 2 replies; 15+ messages in thread
From: Paul Eggert @ 2015-10-10 19:01 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: schwab, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 681 bytes --]

Eli Zaretskii wrote:
> Also, when exactly are INLINE_HEADER_BEGIN/END required?  puresize.h
> doesn't have it, and still compiles; other headers which use INLINE do
> have INLINE_HEADER_BEGIN/END.  What factor determines whether they are
> absolutely required?

They're always needed, if you want to build with --enable-gcc-warnings and use 
GCC older than 5.1.  I hope we can drop them once we assume that people who want 
picky warnings are using GCC 5.1 or later.  I forgot to add them to puresize.h 
since I use GCC 5.2; nobody else has needed them yet, I guess, since nobody with 
older compilers uses --enable-gcc-warnings.  I fixed this with the attached 
additional patch.

[-- Attachment #2: 0001-Fix-enable-gcc-warnings-problem-with-older-GCC.patch --]
[-- Type: text/plain, Size: 1778 bytes --]

From 1b0ab7d132f4b6956b2061a550e533833b0bdc68 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sat, 10 Oct 2015 11:56:20 -0700
Subject: [PATCH] Fix --enable-gcc-warnings problem with older GCC

* src/puresize.h: Add INLINE_HEADER_BEGIN, INLINE_HEADER_END.
This is for building with --enable-gcc-warnings with
GCC 4.6 through 5.0.
---
 src/conf_post.h | 5 +++++
 src/puresize.h  | 4 ++++
 2 files changed, 9 insertions(+)

diff --git a/src/conf_post.h b/src/conf_post.h
index 785e5d7..2c3eee5 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -316,6 +316,11 @@ extern int emacs_setenv_TZ (char const *);
 
    before including config.h or any other .h file.
    Other .c files should not define INLINE.
+   For Emacs, this is done by having emacs.c first '#define INLINE
+   EXTERN_INLINE' and then include every .h file that uses INLINE.
+
+   The INLINE_HEADER_BEGIN and INLINE_HEADER_END suppress bogus
+   warnings in some GCC versions; see ../m4/extern-inline.m4.
 
    C99 compilers compile functions like 'incr' as C99-style extern
    inline functions.  Buggy GCC implementations do something similar with
diff --git a/src/puresize.h b/src/puresize.h
index d0926c6..c61b31f 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -16,6 +16,8 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
+INLINE_HEADER_BEGIN
+
 /* Define PURESIZE, the number of bytes of pure Lisp code to leave space for.
 
    At one point, this was defined in config.h, meaning that changing
@@ -88,3 +90,5 @@ CHECK_IMPURE (Lisp_Object obj, void *ptr)
   if (PURE_P (ptr))
     pure_write_error (obj);
 }
+
+INLINE_HEADER_END
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 19:01         ` Paul Eggert
@ 2015-10-10 19:05           ` Eli Zaretskii
  2015-10-10 19:31             ` Paul Eggert
  2015-10-11  0:13           ` Juanma Barranquero
  1 sibling, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2015-10-10 19:05 UTC (permalink / raw)
  To: Paul Eggert; +Cc: schwab, emacs-devel

> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Sat, 10 Oct 2015 12:01:29 -0700
> Cc: schwab@suse.de, emacs-devel@gnu.org
> 
> Eli Zaretskii wrote:
> > Also, when exactly are INLINE_HEADER_BEGIN/END required?  puresize.h
> > doesn't have it, and still compiles; other headers which use INLINE do
> > have INLINE_HEADER_BEGIN/END.  What factor determines whether they are
> > absolutely required?
> 
> They're always needed, if you want to build with --enable-gcc-warnings and use 
> GCC older than 5.1.  I hope we can drop them once we assume that people who want 
> picky warnings are using GCC 5.1 or later.  I forgot to add them to puresize.h 
> since I use GCC 5.2; nobody else has needed them yet, I guess, since nobody with 
> older compilers uses --enable-gcc-warnings.  I fixed this with the attached 
> additional patch.

Thanks.

Don't we need to make puresize.h idempotent now?



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 19:05           ` Eli Zaretskii
@ 2015-10-10 19:31             ` Paul Eggert
  0 siblings, 0 replies; 15+ messages in thread
From: Paul Eggert @ 2015-10-10 19:31 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: schwab, emacs-devel

Eli Zaretskii wrote:
> Don't we need to make puresize.h idempotent now?

That's not required, since puresize.h is never included more than once.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-10 19:01         ` Paul Eggert
  2015-10-10 19:05           ` Eli Zaretskii
@ 2015-10-11  0:13           ` Juanma Barranquero
  2015-10-11  0:32             ` Paul Eggert
  1 sibling, 1 reply; 15+ messages in thread
From: Juanma Barranquero @ 2015-10-11  0:13 UTC (permalink / raw)
  To: Paul Eggert; +Cc: schwab, Eli Zaretskii, Emacs developers

[-- Attachment #1: Type: text/plain, Size: 265 bytes --]

On Sat, Oct 10, 2015 at 9:01 PM, Paul Eggert <eggert@cs.ucla.edu> wrote:

> nobody else has needed them yet, I guess, since nobody with older
compilers
> uses --enable-gcc-warnings.

Depend on what you mean by "older". I build with 4.8.1 and
--enable-gcc-warnings.

[-- Attachment #2: Type: text/html, Size: 400 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: Master is broken
  2015-10-11  0:13           ` Juanma Barranquero
@ 2015-10-11  0:32             ` Paul Eggert
  0 siblings, 0 replies; 15+ messages in thread
From: Paul Eggert @ 2015-10-11  0:32 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: schwab, Eli Zaretskii, Emacs developers

Juanma Barranquero wrote:
> I build with 4.8.1 and --enable-gcc-warnings.

I was doing the same until a couple of years ago.  This combination should still 
work.  That being said, it's not important for --enable-gcc-warnings to support 
older GCCs, and I don't plan to spend much time supporting them.  Another thing: 
I don't bother with --enable-gcc-warnings on platforms other than x86-64, as 
there are just too many false alarms.



^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2015-10-11  0:32 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-10  8:47 Master is broken Eli Zaretskii
2015-10-10 10:44 ` Andy Moreton
2015-10-10 10:54   ` Eli Zaretskii
2015-10-10 11:27     ` Andy Moreton
2015-10-10 10:46 ` Eli Zaretskii
2015-10-10 15:59   ` Andreas Schwab
2015-10-10 16:19     ` Eli Zaretskii
2015-10-10 16:46   ` Paul Eggert
2015-10-10 17:06     ` Eli Zaretskii
2015-10-10 17:12       ` Eli Zaretskii
2015-10-10 19:01         ` Paul Eggert
2015-10-10 19:05           ` Eli Zaretskii
2015-10-10 19:31             ` Paul Eggert
2015-10-11  0:13           ` Juanma Barranquero
2015-10-11  0:32             ` Paul Eggert

Code repositories for project(s) associated with this public inbox

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

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).