This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
3.0.1 PATCH: Fix java/net compilation failures on Tru64 UNIX
- To: java-patches at gcc dot gnu dot org
- Subject: 3.0.1 PATCH: Fix java/net compilation failures on Tru64 UNIX
- From: Rainer Orth <ro at TechFak dot Uni-Bielefeld dot DE>
- Date: Fri, 27 Jul 2001 19:52:22 +0200 (MEST)
- Cc: Antonio Ake <ake at ecn dot purdue dot edu>
This patch should fix the libjava compilation failures on reported on Tru64
UNIX V4.0F (patch kit 2 only) and V5.0 (PRs libgcj/3694, libgcj/3696,
solution based on discussions there). This (with two companion patches,
see
http://gcc.gnu.org/ml/java-patches/2001-q3/msg00164.html)
allowed me to successfully build libjava on both alpha-dec-osf4.0f and
alpha-dec-osf5.1. If Antonio can verify that it works for him on V5.0,
libjava should be in good state on Tru64 UNIX :-)
Ok for branch and mainline?
Rainer
-----------------------------------------------------------------------------
Rainer Orth, Faculty of Technology, Bielefeld University
Email: ro@TechFak.Uni-Bielefeld.DE
Fri Jul 27 16:33:45 2001 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* include/posix.h (_POSIX_PII_SOCKET): Define.
* java/net/natPlainSocketImpl.cc (_JV_accept): New function, avoids
Tru64 UNIX accept macro.
(java::net::PlainSocketImpl::accept): Use it.
Fixes PRs libgcj/3694, libgcj/3696.
* configure.in (HAVE_STRUCT_IPV6_MREQ): New test.
* acconfig.h (HAVE_STRUCT_IPV6_MREQ): Provide template.
* configure: Regenerate.
* java/net/natPlainDatagramSocketImpl.cc (union McastReq): Use it.
(mcastGrp): Likewise.
Fixes PR libgcj/3694.
Index: libjava/acconfig.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/acconfig.h,v
retrieving revision 1.19
diff -u -p -r1.19 acconfig.h
--- acconfig.h 2000/04/02 15:34:17 1.19
+++ acconfig.h 2001/07/27 16:09:14
@@ -65,6 +65,9 @@
/* Define if struct ip_mreq is defined in netinet/in.h. */
#undef HAVE_STRUCT_IP_MREQ
+/* Define if struct ipv6_mreq is defined in netinet/in.h. */
+#undef HAVE_STRUCT_IPV6_MREQ
+
/* Define it socklen_t typedef is in sys/socket.h. */
#undef HAVE_SOCKLEN_T
Index: libjava/configure.in
===================================================================
RCS file: /cvs/gcc/gcc/libjava/configure.in,v
retrieving revision 1.73.2.14
diff -u -p -r1.73.2.14 configure.in
--- configure.in 2001/07/18 16:56:40 1.73.2.14
+++ configure.in 2001/07/27 16:09:16
@@ -700,6 +700,12 @@ AC_TRY_COMPILE([#include <netinet/in.h>]
AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)])
+AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
+AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
+ [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
+ AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)])
+
AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
[AC_DEFINE(HAVE_INET6)
@@ -707,7 +713,8 @@ AC_TRY_COMPILE([#include <netinet/in.h>]
[AC_MSG_RESULT(no)])
AC_MSG_CHECKING([for socklen_t in sys/socket.h])
-AC_TRY_COMPILE([#include <sys/types.h>
+AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
+#include <sys/types.h>
#include <sys/socket.h>], [socklen_t x = 5;],
[AC_DEFINE(HAVE_SOCKLEN_T)
AC_MSG_RESULT(yes)],
Index: libjava/include/config.h.in
===================================================================
RCS file: /cvs/gcc/gcc/libjava/include/config.h.in,v
retrieving revision 1.27.4.2
diff -u -p -r1.27.4.2 config.h.in
--- config.h.in 2001/07/18 16:56:42 1.27.4.2
+++ config.h.in 2001/07/27 16:09:17
@@ -83,6 +83,9 @@
/* Define if struct ip_mreq is defined in netinet/in.h. */
#undef HAVE_STRUCT_IP_MREQ
+/* Define if struct ipv6_mreq is defined in netinet/in.h. */
+#undef HAVE_STRUCT_IPV6_MREQ
+
/* Define it socklen_t typedef is in sys/socket.h. */
#undef HAVE_SOCKLEN_T
Index: libjava/include/posix.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/include/posix.h,v
retrieving revision 1.1
diff -u -p -r1.1 posix.h
--- posix.h 2000/08/02 21:54:04 1.1
+++ posix.h 2001/07/27 16:09:17
@@ -8,6 +8,11 @@ This software is copyrighted work licens
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
+/* Required on Tru64 UNIX V4/V5 so <sys/socket.h> defines prototypes of
+ socket functions with socklen_t instead of size_t. This must be defined
+ early so <standards.h> defines the correct version of __PIIX. */
+#define _POSIX_PII_SOCKET
+
#include <time.h>
#include <sys/types.h>
Index: libjava/java/net/natPlainDatagramSocketImpl.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/net/natPlainDatagramSocketImpl.cc,v
retrieving revision 1.26.4.2
diff -u -p -r1.26.4.2 natPlainDatagramSocketImpl.cc
--- natPlainDatagramSocketImpl.cc 2001/07/18 20:38:15 1.26.4.2
+++ natPlainDatagramSocketImpl.cc 2001/07/27 16:09:17
@@ -158,7 +158,7 @@ union McastReq
#if HAVE_STRUCT_IP_MREQ
struct ip_mreq mreq;
#endif
-#ifdef HAVE_INET6
+#if HAVE_STRUCT_IPV6_MREQ
struct ipv6_mreq mreq6;
#endif
};
@@ -423,7 +423,7 @@ java::net::PlainDatagramSocketImpl::mcas
ptr = (const char *) &u.mreq;
}
#endif
-#ifdef HAVE_INET6
+#if HAVE_STRUCT_IPV6_MREQ
else if (len == 16)
{
level = IPPROTO_IPV6;
Index: libjava/java/net/natPlainSocketImpl.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/net/natPlainSocketImpl.cc,v
retrieving revision 1.23.4.1
diff -u -p -r1.23.4.1 natPlainSocketImpl.cc
--- natPlainSocketImpl.cc 2001/05/24 03:07:51 1.23.4.1
+++ natPlainSocketImpl.cc 2001/07/27 16:09:17
@@ -55,6 +55,17 @@ _Jv_connect (int fd, struct sockaddr *ad
#undef connect
#endif
+// Same problem with accept on Tru64 UNIX with _POSIX_PII_SOCKET
+static inline int
+_Jv_accept (int fd, struct sockaddr *addr, socklen_t *addrlen)
+{
+ return ::accept (fd, addr, addrlen);
+}
+
+#ifdef accept
+#undef accept
+#endif
+
#include <gcj/cni.h>
#include <gcj/javaprims.h>
#include <java/io/IOException.h>
@@ -283,7 +294,7 @@ java::net::PlainSocketImpl::accept (java
JvNewStringUTF("Accept timed out"));
}
- new_socket = ::accept (fnum, (sockaddr*) &u, &addrlen);
+ new_socket = _Jv_accept (fnum, (sockaddr*) &u, &addrlen);
if (new_socket < 0)
goto error;
jbyteArray raddr;