
Patch from:

  https://bugzilla.mozilla.org/attachment.cgi?id=206765&action=view
  (https://bugzilla.mozilla.org/show_bug.cgi?id=261649)

Merged in 20051224.  Passes testsuite (make -C pr/tests).

cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/nsprpub

Please note that for some odd reason this patch breaks BeOS.

Index: nsprpub/configure.in
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/configure.in,v
retrieving revision 1.83.2.123
retrieving revision 1.210
diff -u -r1.83.2.123 -r1.210
--- nsprpub/configure.in	22 Dec 2005 22:45:32 -0000	1.83.2.123
+++ nsprpub/configure.in	24 Dec 2005 08:25:22 -0000	1.210
@@ -1336,7 +1336,7 @@
 	esac
     ;;
 
-*-linux*)
+*-linux*|*-gnu*|*-k*bsd*-gnu)
     if test -z "$USE_NSPR_THREADS"; then
         USE_PTHREADS=1
         IMPL_STRATEGY=_PTH
@@ -1347,7 +1347,11 @@
     AC_DEFINE(_SVID_SOURCE)
     AC_DEFINE(_LARGEFILE64_SOURCE)
     AC_DEFINE(HAVE_FCNTL_FILE_LOCKING)
-    AC_DEFINE(LINUX)
+    case "${target_os}" in
+    linux*)
+        AC_DEFINE(LINUX)
+        ;;
+    esac
     CFLAGS="$CFLAGS -ansi -Wall"
     CXXFLAGS="$CXXFLAGS -ansi -Wall"
     MDCPUCFG_H=_linux.cfg
@@ -2442,7 +2446,7 @@
             _PTHREAD_LDFLAGS=-pthread
         fi
         ;;
-    *-linux*)
+    *-linux*|*-gnu*|*-k*bsd*-gnu)
         AC_DEFINE(_REENTRANT)
         ;;
     esac
@@ -2526,7 +2530,7 @@
         fi
     fi
     ;;
-*-linux*)
+*-linux*|*-gnu*|*-k*bsd*-gnu)
     if test -n "$USE_NSPR_THREADS"; then
         AC_DEFINE(_PR_LOCAL_THREADS_ONLY)
     fi
Index: nsprpub/config/nsinstall.c
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/config/nsinstall.c,v
retrieving revision 3.17.2.3
retrieving revision 3.21
diff -u -r3.17.2.3 -r3.21
--- nsprpub/config/nsinstall.c	28 Apr 2004 00:33:11 -0000	3.17.2.3
+++ nsprpub/config/nsinstall.c	24 Dec 2005 15:03:29 -0000	3.21
@@ -98,7 +98,7 @@
 }
 #endif /* NEXTSTEP */
 
-#ifdef LINUX
+#if defined(LINUX) || defined(__GNU__) || defined(__GLIBC__) 
 #include <getopt.h>
 #endif
 
Index: nsprpub/pr/include/md/_linux.cfg
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/include/md/_linux.cfg,v
retrieving revision 3.12.4.8
retrieving revision 3.19
diff -u -r3.12.4.8 -r3.19
--- nsprpub/pr/include/md/_linux.cfg	15 Aug 2005 17:53:33 -0000	3.12.4.8
+++ nsprpub/pr/include/md/_linux.cfg	24 Dec 2005 08:25:22 -0000	3.19
@@ -35,6 +35,11 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
+/*
+ * This file is used by not only Linux but also other glibc systems
+ * such as GNU/Hurd and GNU/k*BSD.
+ */
+
 #ifndef nspr_cpucfg___
 #define nspr_cpucfg___
 
@@ -42,7 +47,7 @@
 #define XP_UNIX
 #endif
 
-#ifndef LINUX
+#if !defined(LINUX) && defined(__linux__)
 #define LINUX
 #endif
 
Index: nsprpub/pr/include/md/_pth.h
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/include/md/_pth.h,v
retrieving revision 3.19.2.13
retrieving revision 3.32
diff -u -r3.19.2.13 -r3.32
--- nsprpub/pr/include/md/_pth.h	15 Aug 2005 17:53:33 -0000	3.19.2.13
+++ nsprpub/pr/include/md/_pth.h	24 Dec 2005 15:03:30 -0000	3.32
@@ -143,10 +143,15 @@
 	(!memcmp(&(t), &pt_zero_tid, sizeof(pthread_t)))
 #define _PT_PTHREAD_COPY_THR_HANDLE(st, dt)   (dt) = (st)
 #elif defined(IRIX) || defined(OSF1) || defined(AIX) || defined(SOLARIS) \
-	|| defined(HPUX) || defined(LINUX) || defined(FREEBSD) \
+	|| defined(LINUX) || defined(__GNU__) || defined(__GLIBC__) \
+	|| defined(HPUX) || defined(FREEBSD) \
 	|| defined(NETBSD) || defined(OPENBSD) || defined(BSDI) \
 	|| defined(VMS) || defined(NTO) || defined(DARWIN) \
 	|| defined(UNIXWARE) || defined(RISCOS)
+#ifdef __GNU__
+/* Hurd pthreads don't have an invalid value for pthread_t. -- rmh */
+#error Using Hurd pthreads
+#endif
 #define _PT_PTHREAD_INVALIDATE_THR_HANDLE(t)  (t) = 0
 #define _PT_PTHREAD_THR_HANDLE_IS_INVALID(t)  (t) == 0
 #define _PT_PTHREAD_COPY_THR_HANDLE(st, dt)   (dt) = (st)
@@ -195,7 +200,8 @@
 /*
  * These platforms don't have sigtimedwait()
  */
-#if (defined(AIX) && !defined(AIX4_3_PLUS)) || defined(LINUX) \
+#if (defined(AIX) && !defined(AIX4_3_PLUS)) \
+	|| defined(LINUX) || defined(__GNU__)|| defined(__GLIBC__) \
 	|| defined(FREEBSD) || defined(NETBSD) || defined(OPENBSD) \
 	|| defined(BSDI) || defined(VMS) || defined(UNIXWARE) \
 	|| defined(DARWIN)
@@ -235,7 +241,8 @@
 #define PT_PRIO_MAX            sched_get_priority_max(SCHED_OTHER)
 #endif /* defined(_PR_DCETHREADS) */
 
-#elif defined(LINUX) || defined(FREEBSD)
+#elif defined(LINUX) || defined(__GNU__) || defined(__GLIBC__) \
+	|| defined(FREEBSD)
 #define PT_PRIO_MIN            sched_get_priority_min(SCHED_OTHER)
 #define PT_PRIO_MAX            sched_get_priority_max(SCHED_OTHER)
 #elif defined(NTO)
@@ -291,7 +298,8 @@
 		onemillisec.tv_nsec = 1000000L;			\
         nanosleep(&onemillisec,NULL);			\
     PR_END_MACRO
-#elif defined(HPUX) || defined(LINUX) || defined(SOLARIS) \
+#elif defined(HPUX) || defined(SOLARIS) \
+	|| defined(LINUX) || defined(__GNU__) || defined(__GLIBC__) \
 	|| defined(FREEBSD) || defined(NETBSD) || defined(OPENBSD) \
 	|| defined(BSDI) || defined(NTO) || defined(DARWIN) \
 	|| defined(UNIXWARE) || defined(RISCOS)
Index: nsprpub/pr/include/md/_unixos.h
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/include/md/_unixos.h,v
retrieving revision 3.31.4.4
retrieving revision 3.36
diff -u -r3.31.4.4 -r3.36
--- nsprpub/pr/include/md/_unixos.h	17 Jan 2005 22:13:36 -0000	3.31.4.4
+++ nsprpub/pr/include/md/_unixos.h	24 Dec 2005 08:25:23 -0000	3.36
@@ -46,7 +46,8 @@
  * Linux: FD_SETSIZE is defined in /usr/include/sys/select.h and should
  * not be redefined.
  */
-#if !defined(LINUX) && !defined(DARWIN) && !defined(NEXTSTEP)
+#if !defined(LINUX) && !defined(__GNU__) && !defined(__GLIBC__) \
+    && !defined(DARWIN) && !defined(NEXTSTEP)
 #ifndef FD_SETSIZE
 #define FD_SETSIZE  4096
 #endif
Index: nsprpub/pr/include/md/prosdep.h
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/include/md/prosdep.h,v
retrieving revision 3.13.4.3
retrieving revision 3.17
diff -u -r3.13.4.3 -r3.17
--- nsprpub/pr/include/md/prosdep.h	15 Aug 2005 17:53:33 -0000	3.13.4.3
+++ nsprpub/pr/include/md/prosdep.h	24 Dec 2005 08:25:23 -0000	3.17
@@ -90,7 +90,7 @@
 #elif defined(IRIX)
 #include "md/_irix.h"
 
-#elif defined(LINUX)
+#elif defined(LINUX) || defined(__GNU__) || defined(__GLIBC__)
 #include "md/_linux.h"
 
 #elif defined(OSF1)
Index: nsprpub/pr/src/linking/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/src/linking/Makefile.in,v
retrieving revision 1.10.2.5
retrieving revision 1.17
diff -u -r1.10.2.5 -r1.17
--- nsprpub/pr/src/linking/Makefile.in	26 Oct 2005 19:05:10 -0000	1.10.2.5
+++ nsprpub/pr/src/linking/Makefile.in	24 Dec 2005 15:03:30 -0000	1.17
@@ -63,7 +63,7 @@
 INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private
 
 # For Dl_info and dladdr.
-ifeq ($(OS_TARGET),Linux)
+ifeq (,$(filter-out Linux GNU GNU_%,$(OS_TARGET)))
 DEFINES    += -D_GNU_SOURCE
 endif
 
Index: nsprpub/pr/src/linking/prlink.c
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/src/linking/prlink.c,v
retrieving revision 3.51.2.28
retrieving revision 3.84
diff -u -r3.51.2.28 -r3.84
--- nsprpub/pr/src/linking/prlink.c	7 Nov 2005 22:07:32 -0000	3.51.2.28
+++ nsprpub/pr/src/linking/prlink.c	24 Dec 2005 15:03:30 -0000	3.84
@@ -1388,7 +1388,8 @@
 PR_IMPLEMENT(char *)
 PR_GetLibraryFilePathname(const char *name, PRFuncPtr addr)
 {
-#if defined(SOLARIS) || defined(LINUX) || defined(FREEBSD)
+#if defined(SOLARIS) || defined(FREEBSD) \
+        || defined(LINUX) || defined(__GNU__) || defined(__GLIBC__)
     Dl_info dli;
     char *result;
 
Index: nsprpub/pr/src/md/prosdep.c
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/src/md/prosdep.c,v
retrieving revision 3.9.4.2
retrieving revision 3.12
diff -u -r3.9.4.2 -r3.12
--- nsprpub/pr/src/md/prosdep.c	28 Apr 2004 00:33:56 -0000	3.9.4.2
+++ nsprpub/pr/src/md/prosdep.c	24 Dec 2005 08:25:29 -0000	3.12
@@ -63,7 +63,8 @@
 
     /* Get page size */
 #ifdef XP_UNIX
-#if defined SUNOS4 || defined LINUX || defined BSDI || defined AIX \
+#if defined SUNOS4 || defined BSDI || defined AIX \
+        || defined LINUX || defined __GNU__ || defined __GLIBC__ \
         || defined FREEBSD || defined NETBSD || defined OPENBSD \
         || defined DARWIN || defined NEXTSTEP
     _pr_pageSize = getpagesize();
Index: nsprpub/pr/src/md/unix/unix.c
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/src/md/unix/unix.c,v
retrieving revision 3.43.2.8
retrieving revision 3.52
diff -u -r3.43.2.8 -r3.52
--- nsprpub/pr/src/md/unix/unix.c	15 Aug 2005 17:53:43 -0000	3.43.2.8
+++ nsprpub/pr/src/md/unix/unix.c	24 Dec 2005 08:25:29 -0000	3.52
@@ -65,7 +65,7 @@
  * PRInt32* pointer to a _PRSockLen_t* pointer.
  */
 #if defined(HAVE_SOCKLEN_T) \
-    || (defined(LINUX) && defined(__GLIBC__) && __GLIBC__ >= 2)
+    || (defined(__GLIBC__) && __GLIBC__ >= 2)
 #define _PRSockLen_t socklen_t
 #elif defined(IRIX) || defined(HPUX) || defined(OSF1) || defined(SOLARIS) \
     || defined(AIX4_1) || defined(LINUX) || defined(SONY) \
Index: nsprpub/pr/src/md/unix/uxproces.c
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/src/md/unix/uxproces.c,v
retrieving revision 3.14.2.5
retrieving revision 3.20
diff -u -r3.14.2.5 -r3.20
--- nsprpub/pr/src/md/unix/uxproces.c	15 Dec 2004 05:52:40 -0000	3.14.2.5
+++ nsprpub/pr/src/md/unix/uxproces.c	24 Dec 2005 08:25:29 -0000	3.20
@@ -92,7 +92,8 @@
  * that can share the virtual address space and file descriptors.
  */
 #if (defined(IRIX) && !defined(_PR_PTHREADS)) \
-        || (defined(LINUX) && defined(_PR_PTHREADS))
+        || ((defined(LINUX) || defined(__GNU__) || defined(__GLIBC__)) \
+        && defined(_PR_PTHREADS))
 #define _PR_SHARE_CLONES
 #endif
 
@@ -106,7 +107,8 @@
  */
 
 #if defined(_PR_GLOBAL_THREADS_ONLY) \
-	|| (defined(_PR_PTHREADS) && !defined(LINUX))
+	|| (defined(_PR_PTHREADS) \
+	&& !defined(LINUX) && !defined(__GNU__) && !defined(__GLIBC__))
 #define _PR_NATIVE_THREADS
 #endif
 
Index: nsprpub/pr/src/md/unix/uxrng.c
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/src/md/unix/uxrng.c,v
retrieving revision 1.11.4.5
retrieving revision 1.19
diff -u -r1.11.4.5 -r1.19
--- nsprpub/pr/src/md/unix/uxrng.c	15 Aug 2005 17:53:43 -0000	1.11.4.5
+++ nsprpub/pr/src/md/unix/uxrng.c	24 Dec 2005 08:25:29 -0000	1.19
@@ -138,7 +138,8 @@
     return 0;
 }
 
-#elif (defined(LINUX) || defined(FREEBSD) || defined(NETBSD) || defined(OPENBSD))
+#elif (defined(LINUX) || defined(FREEBSD) || defined(__FreeBSD_kernel__) \
+    || defined(NETBSD) || defined(__NetBSD_kernel__) || defined(OPENBSD))
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
Index: nsprpub/pr/src/misc/prnetdb.c
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/src/misc/prnetdb.c,v
retrieving revision 3.21.2.26
retrieving revision 3.48
diff -u -r3.21.2.26 -r3.48
--- nsprpub/pr/src/misc/prnetdb.c	15 Aug 2005 17:53:52 -0000	3.21.2.26
+++ nsprpub/pr/src/misc/prnetdb.c	24 Dec 2005 08:25:30 -0000	3.48
@@ -108,7 +108,7 @@
 #define _PR_HAVE_GETPROTO_R_INT
 #endif
 
-#if (defined(LINUX) && defined(__GLIBC__) && __GLIBC__ >= 2)
+#if (defined(__GLIBC__) && __GLIBC__ >= 2)
 #define _PR_HAVE_GETPROTO_R
 #define _PR_HAVE_5_ARG_GETPROTO_R
 #endif
Index: nsprpub/pr/src/pthreads/ptio.c
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/src/pthreads/ptio.c,v
retrieving revision 3.71.2.23
retrieving revision 3.103
diff -u -r3.71.2.23 -r3.103
--- nsprpub/pr/src/pthreads/ptio.c	7 Nov 2005 22:23:25 -0000	3.71.2.23
+++ nsprpub/pr/src/pthreads/ptio.c	24 Dec 2005 08:25:30 -0000	3.103
@@ -205,7 +205,8 @@
 #define _PRSelectFdSetArg_t void *
 #elif defined(IRIX) || (defined(AIX) && !defined(AIX4_1)) \
     || defined(OSF1) || defined(SOLARIS) \
-    || defined(HPUX10_30) || defined(HPUX11) || defined(LINUX) \
+    || defined(HPUX10_30) || defined(HPUX11) \
+    || defined(LINUX) || defined(__GNU__) || defined(__GLIBC__) \
     || defined(FREEBSD) || defined(NETBSD) || defined(OPENBSD) \
     || defined(BSDI) || defined(VMS) || defined(NTO) || defined(DARWIN) \
     || defined(UNIXWARE) || defined(RISCOS)
@@ -289,7 +290,7 @@
  * most current systems.
  */
 #if defined(HAVE_SOCKLEN_T) \
-    || (defined(LINUX) && defined(__GLIBC__) && __GLIBC__ >= 2)
+    || (defined(__GLIBC__) && __GLIBC__ >= 2)
 typedef socklen_t pt_SockLen;
 #elif (defined(AIX) && !defined(AIX4_1)) \
     || defined(VMS)
@@ -3230,7 +3231,8 @@
 };
 
 #if defined(HPUX) || defined(OSF1) || defined(SOLARIS) || defined (IRIX) \
-    || defined(AIX) || defined(LINUX) || defined(FREEBSD) || defined(NETBSD) \
+    || defined(LINUX) || defined(__GNU__) || defined(__GLIBC__) \
+    || defined(AIX) || defined(FREEBSD) || defined(NETBSD) \
     || defined(OPENBSD) || defined(BSDI) || defined(VMS) || defined(NTO) \
     || defined(DARWIN) || defined(UNIXWARE) || defined(RISCOS)
 #define _PR_FCNTL_FLAGS O_NONBLOCK
@@ -4727,7 +4729,8 @@
 
 #include <sys/types.h>
 #include <sys/time.h>
-#if !defined(SUNOS4) && !defined(HPUX) && !defined(LINUX)
+#if !defined(SUNOS4) && !defined(HPUX) \
+    && !defined(LINUX) && !defined(__GNU__) && !defined(__GLIBC__)
 #include <sys/select.h>
 #endif
 
Index: nsprpub/pr/tests/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/nsprpub/pr/tests/Makefile.in,v
retrieving revision 1.34.2.13
retrieving revision 1.49
diff -u -r1.34.2.13 -r1.49
--- nsprpub/pr/tests/Makefile.in	28 Apr 2004 00:34:16 -0000	1.34.2.13
+++ nsprpub/pr/tests/Makefile.in	24 Dec 2005 15:03:31 -0000	1.49
@@ -376,14 +376,10 @@
     EXTRA_LIBS = -lsocket -lnsl -lgen -lresolv
 endif
 
-ifeq ($(OS_ARCH), Linux)
-    ifeq ($(OS_RELEASE), 1.2)
-        EXTRA_LIBS = -ldl
-    else
-        LDOPTS += -Xlinker -rpath $(ABSOLUTE_LIB_DIR)
-        ifeq ($(USE_PTHREADS),1)
-            EXTRA_LIBS = -lpthread
-        endif
+ifeq (,$(filter-out Linux GNU GNU_%,$(OS_ARCH)))
+    LDOPTS += -Xlinker -rpath $(ABSOLUTE_LIB_DIR)
+    ifeq ($(USE_PTHREADS),1)
+        EXTRA_LIBS = -lpthread
     endif
 endif
 
