Subject: Re: emacs-24.0.92 problem on MirBSD 10
From: Paul Eggert <[email-masked]>
To: [email-masked]
Cc: "Nelson H. F. Beebe" <[email-masked]>
Date: Fri, 02 Dec 2011 21:44:56 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

[Following up on bug-gnu-emacs, so that this gets a Bug#.]

In <http://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00065.html>
on 12/02/11 18:01, Nelson H. F. Beebe wrote:

> 599c599
> < #define HAVE_PTHREAD_SIGMASK 1
> ---
> /* #define HAVE_PTHREAD_SIGMASK 1 */

Thanks for the bug report.  Why was this HAVE_PTHREAD_SIGMASK
patch needed?  Your email doesn't say.  MirBSD has
pthread_sigmask, according to
<https://www.mirbsd.org/htman/i386/man3/pthread_sigmask.htm>,
so pthread_sigmask should work.

> This resulted in link failure becaue gmalloc.c assumes that
> pthread_atfork() is available when HAVE_PTHREAD is defined, 
> but it is not in the MirBSD /usr/lib/libpthread.a library:

Thanks.  Does the following patch fix things for you?  If you
don't have the autotools installed you can simulate it by
substituting "pthread_atfork" for every instance of "pthread_self"
in the file "configure".

=== modified file 'ChangeLog'
--- ChangeLog	2011-12-03 04:06:45 +0000
+++ ChangeLog	2011-12-03 05:37:32 +0000
@@ -1,5 +1,10 @@
 2011-12-03  Paul Eggert  <[email-masked]>
 
+	* configure.in (HAVE_PTHREAD): Check for pthread_atfork
+	if linking to gmalloc.c.  This should prevents a build failure on
+	MirBSD 10 reported by Nelson H. F. Beebe in
+	<http://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00065.html>.
+
 	* .bzrignore: Add config.cache.
 
 2011-11-27  Jan Djärv  <[email-masked]>

=== modified file 'configure.in'
--- configure.in	2011-11-30 16:23:05 +0000
+++ configure.in	2011-12-03 05:18:33 +0000
@@ -1717,7 +1717,15 @@
 LIB_PTHREAD=
 AC_CHECK_HEADERS(pthread.h)
 if test "$ac_cv_header_pthread_h"; then
-  AC_CHECK_LIB(pthread, pthread_self, HAVE_PTHREAD=yes)
+  dnl gmalloc.c uses pthread_atfork, which is not available on older-style
+  dnl hosts such as MirBSD 10, so test for pthread_atfork instead of merely
+  dnl testing for pthread_self if Emacs uses gmalloc.c.
+  if test "$GMALLOC_OBJ" = gmalloc.o; then
+    emacs_pthread_function=pthread_atfork
+  else
+    emacs_pthread_function=pthread_self
+  fi
+  AC_CHECK_LIB(pthread, $emacs_pthread_function, HAVE_PTHREAD=yes)
 fi
 if test "$HAVE_PTHREAD" = yes; then
   case "${canonical}" in