[sorry for the re-post, the first one went out without a Subject:
header
because my fingers got ahead of me...]
Hi there,
I'm building libevent (SVN HEAD) with Sun C 5.8:
$ cc -V
cc: Sun C 5.8 Patch 121015-03 2006/10/18
usage: cc [ options] files. Use 'cc -flags' for details
$ uname -srvmp
SunOS 5.10 Generic_118822-30 sun4u sparc
I've run into a handful of minor portability issues:
_____________________________________________________________________
___
0) Minor glitch in autogen.sh:
--- autogen.sh (revision 305)
+++ autogen.sh (working copy)
@@ -1,6 +1,6 @@
#!/bin/sh
LIBTOOLIZE=libtoolize
-if [ "$(uname)" == "Darwin" ] ; then
+if [ "$(uname)" = "Darwin" ] ; then
LIBTOOLIZE=glibtoolize
fi
aclocal && \
_____________________________________________________________________
___
1) As Shanti already pointed out in
http://monkeymail.org/archives/libevent-users/2006-December/
000439.html,
two files use __inline. I believe this is non-standard (a GCC-
ism) and
chokes the Sun compiler. Other files already use the more standard
"inline":
[EMAIL PROTECTED]:~/levent/trunk/libevent> grep inline *
buffer.c:static inline void
evdns.c:static inline int
event_tagging.c:static int __inline
http.c:static __inline void
rtsig.c:static inline int
rtsig.c:static inline int
rtsig.c:static inline int
rtsig.c:static inline int
Could you please commit something like the following?
Index: http.c
===================================================================
--- http.c (revision 305)
+++ http.c (working copy)
@@ -1512,7 +1512,7 @@
/* Requires that headers and response code are already set up */
-static __inline void
+static inline void
evhttp_send(struct evhttp_request *req, struct evbuffer *databuf)
{
struct evhttp_connection *evcon = req->evcon;
Index: event_tagging.c
===================================================================
--- event_tagging.c (revision 305)
+++ event_tagging.c (working copy)
@@ -149,7 +149,7 @@
EVBUFFER_LENGTH(_buf));
}
-static int __inline
+static int inline
decode_int_internal(u_int32_t *pnumber, struct evbuffer *evbuf,
int dodrain)
{
u_int32_t number = 0;
_____________________________________________________________________
___
2) __func__ is not detected correctly by configure:
$ ./configure
[...]
checking whether our compiler supports __func__... no
checking whether our compiler supports __FUNCTION__... no
[...]
from config.log:
| int
| main ()
| {
| void foo() { const char *cp = __func__; }
| ;
| return 0;
| }
[...]
"conftest.c", line 63: syntax error before or at: {
"conftest.c", line 64: warning: syntax error: empty declaration
"conftest.c", line 65: syntax error before or at: return
"conftest.c", line 65: warning: syntax error: empty declaration
I would suggest:
--- configure.in (revision 305)
+++ configure.in (working copy)
@@ -355,12 +355,12 @@
AC_MSG_CHECKING([whether our compiler supports __func__])
AC_TRY_COMPILE([],
- [void foo() { const char *cp = __func__; }],
+ [const char *cp = __func__;],
AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no])
AC_MSG_CHECKING([whether our compiler supports __FUNCTION__])
AC_TRY_COMPILE([],
- [void foo() { const char *cp = __FUNCTION__; }],
+ [const char *cp = __FUNCTION__;],
AC_MSG_RESULT([yes])
AC_DEFINE(__func__, __FUNCTION__,
[Define to appropriate substitue if compiler doesnt have
__func__]),
Yielding:
$ ./configure
[...]
checking whether our compiler supports __func__... yes
(from previous discussions with the GNUPG maintainers, my
understanding
is that __func__ is standard C99 while __FUNCTION__ is a GCC-ism)
_____________________________________________________________________
___
3) event.h uses u_int8_t and friends instead of
uint8_t and friends
None of the Solaris system headers define the u_* variants.
Should all instances of u_* in event.h be changed to u* ?
_____________________________________________________________________
___
4) http.c uses MIN() without declaring it as evdns.c does:
[EMAIL PROTECTED]:~/levent/trunk/libevent> gmake http.o
cc -DHAVE_CONFIG_H -I. -I. -I. -Icompat -g -c http.c
"http.c", line 871: warning: implicit function declaration: MIN
Fix:
--- http.c (revision 305)
+++ http.c (working copy)
@@ -73,6 +73,9 @@
#undef timeout_pending
#undef timeout_initialized
+#undef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))
+
#include "event.h"
#include "evhttp.h"
#include "log.h"
_____________________________________________________________________
___
5) As Shanti pointed out in the aforementioned mailing list post, the
build breaks on libevent/sample/event-test:
[EMAIL PROTECTED]:~/levent/trunk/libevent/sample> gmake
/bin/bash ../libtool --tag=CC --mode=link cc -I../compat -o
event-test event-test.o ../libevent.la -lsocket
cc -I../compat -o .libs/event-test event-test.o ../.libs/
libevent.so -lsocket -R/usr/local/lib
Undefined first referenced
symbol in file
inet_aton ../.libs/libevent.so
ld: fatal: Symbol referencing errors. No output written to .libs/
event-test
Solaris needs -lresolv as well as -lsocket.
I would suggest:
--- configure.in (revision 305)
+++ configure.in (working copy)
@@ -36,6 +36,7 @@
dnl Checks for libraries.
AC_CHECK_LIB(socket, socket)
+AC_CHECK_LIB(resolv, inet_aton)
dnl Checks for header files.
AC_HEADER_STDC
--
Emil Mikulic, UNIX System Administrator | Ext: 55202
Technical Services Group | PGP: 8E4C5D35
Computer Science, RMIT University | Room 10.10.17