Emil,
 Thanks very much for your patches.
We have finally built libevent successfully on Solaris 10 using Sun Studio 11 compiler (downloadable for free) and here are the changes that had to be made :

1) Edit http.c and event_tagging.c to change '__inline' to 'inline' as mentioned previously

2) Edit event.h to add the following :

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

3) I did not make any changes to configure.in (couldn't get your suggested changes to work).
     Instead, call configure as follows :
./configure CFLAGS= "-fast -xipo -xtarget=generic" LDFLAGS="- lnsl -lresolv"


1) and 2) above needs to be fixed in the generic source tree. It would also be great if test/regress.gen.* were supplied, so that one doesn't require python to be installed.

Shanti


On Jan 2, 2007, at 6:25 PM, Emil Mikulic wrote:

[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

_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkey.org/mailman/listinfo/libevent-users

Reply via email to