Browse Source

ZOOKEEPER-1077: C client lib doesn't build on Solaris (Chris Nauroth via rgs)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/trunk@1679951 13f79535-47bb-0310-9956-ffa450edef68
Raúl Gutiérrez Segalés 10 years ago
parent
commit
663236c926
7 changed files with 44 additions and 11 deletions
  1. 2 0
      CHANGES.txt
  2. 20 6
      src/c/Makefile.am
  3. 10 0
      src/c/configure.ac
  4. 3 2
      src/c/src/zk_log.c
  5. 7 2
      src/c/src/zookeeper.c
  6. 1 1
      src/c/tests/LibCMocks.cc
  7. 1 0
      src/c/tests/wrappers.opt

+ 2 - 0
CHANGES.txt

@@ -99,6 +99,8 @@ BUGFIXES:
   ZOOKEEPER-2190 In StandaloneDisabledTest, testReconfig() shouldn't take
   leaving servers as joining servers (Hongchao Deng via rgs)
 
+  ZOOKEEPER-1077: C client lib doesn't build on Solaris (Chris Nauroth via rgs)
+
 IMPROVEMENTS:
   ZOOKEEPER-1660 Documentation for Dynamic Reconfiguration (Reed Wanderman-Milne via shralex)  
 

+ 20 - 6
src/c/Makefile.am

@@ -2,11 +2,15 @@
 include $(top_srcdir)/aminclude.am
 
 AUTOMAKE_OPTIONS = serial-tests
-AM_CPPFLAGS = -I${srcdir}/include -I${srcdir}/tests -I${srcdir}/generated
+if SOLARIS
+  SOLARIS_CPPFLAGS = -D_POSIX_PTHREAD_SEMANTICS
+  SOLARIS_LIB_LDFLAGS = -lnsl -lsocket
+endif
+AM_CPPFLAGS = -I${srcdir}/include -I${srcdir}/tests -I${srcdir}/generated $(SOLARIS_CPPFLAGS)
 AM_CFLAGS = -Wall -Werror -Wdeclaration-after-statement
 AM_CXXFLAGS = -Wall $(USEIPV6)
 
-LIB_LDFLAGS = -no-undefined -version-info 2
+LIB_LDFLAGS = -no-undefined -version-info 2 $(SOLARIS_LIB_LDFLAGS)
 
 pkginclude_HEADERS = include/zookeeper.h include/zookeeper_version.h include/zookeeper_log.h include/proto.h include/recordio.h generated/zookeeper.jute.h
 EXTRA_DIST=LICENSE
@@ -98,23 +102,33 @@ TEST_SOURCES = \
 	tests/TestReadOnlyClient.cc \
 	$(NULL)
 
-SYMBOL_WRAPPERS=$(shell cat ${srcdir}/tests/wrappers.opt)
+if SOLARIS
+  SHELL_SYMBOL_WRAPPERS = cat ${srcdir}/tests/wrappers.opt
+  SYMBOL_WRAPPERS=$(SHELL_SYMBOL_WRAPPERS:sh)
+else
+  SYMBOL_WRAPPERS=$(shell cat ${srcdir}/tests/wrappers.opt)
+endif
 
 check_PROGRAMS = zktest-st
 TESTS_ENVIRONMENT = ZKROOT=${srcdir}/../.. \
                     CLASSPATH=$$CLASSPATH:$$CLOVER_HOME/lib/clover.jar
 nodist_zktest_st_SOURCES = $(TEST_SOURCES)
 zktest_st_LDADD = libzkst.la libhashtable.la $(CPPUNIT_LIBS)
-zktest_st_CXXFLAGS = -DUSE_STATIC_LIB $(CPPUNIT_CFLAGS) $(USEIPV6)
-zktest_st_LDFLAGS = -static-libtool-libs $(SYMBOL_WRAPPERS)
+zktest_st_CXXFLAGS = -DUSE_STATIC_LIB $(CPPUNIT_CFLAGS) $(USEIPV6) $(SOLARIS_CPPFLAGS)
+zktest_st_LDFLAGS = -static-libtool-libs $(SYMBOL_WRAPPERS) $(SOLARIS_LIB_LDFLAGS)
 
 if WANT_SYNCAPI
   check_PROGRAMS += zktest-mt
   nodist_zktest_mt_SOURCES = $(TEST_SOURCES) tests/PthreadMocks.cc
   zktest_mt_LDADD = libzkmt.la libhashtable.la -lpthread $(CPPUNIT_LIBS)
   zktest_mt_CXXFLAGS = -DUSE_STATIC_LIB -DTHREADED $(CPPUNIT_CFLAGS) $(USEIPV6)
+if SOLARIS
+  SHELL_SYMBOL_WRAPPERS_MT = cat ${srcdir}/tests/wrappers-mt.opt
+  SYMBOL_WRAPPERS_MT=$(SYMBOL_WRAPPERS) $(SHELL_SYMBOL_WRAPPERS_MT:sh)
+else
   SYMBOL_WRAPPERS_MT=$(SYMBOL_WRAPPERS) $(shell cat ${srcdir}/tests/wrappers-mt.opt)
-  zktest_mt_LDFLAGS = -static-libtool-libs $(SYMBOL_WRAPPERS_MT)
+endif
+  zktest_mt_LDFLAGS = -static-libtool-libs $(SYMBOL_WRAPPERS_MT) $(SOLARIS_LIB_LDFLAGS)
 endif
 
 TESTS = $(check_PROGRAMS)

+ 10 - 0
src/c/configure.ac

@@ -154,4 +154,14 @@ LIBS="$saved_LIBS"
 AC_CHECK_FUNCS([getcwd gethostbyname gethostname getlogin getpwuid_r gettimeofday getuid memmove memset poll socket strchr strdup strerror strtol])
 
 AC_CONFIG_FILES([Makefile])
+AC_CANONICAL_HOST
+AM_CONDITIONAL([SOLARIS],[
+  case "$host_os" in
+  *solaris*)
+    true
+    ;;
+  *)
+    false
+    ;;
+  esac ])
 AC_OUTPUT

+ 3 - 2
src/c/src/zk_log.c

@@ -155,8 +155,9 @@ void log_message(log_callback_fn callback, ZooLogLevel curLevel,
 
 #ifndef THREADED
 
+    // pid_t is long on Solaris
     ofs = snprintf(buf, FORMAT_LOG_BUF_SIZE,
-                   "%s:%d:%s@%s@%d: ", time, pid,
+                   "%s:%ld:%s@%s@%d: ", time, (long)pid,
                    dbgLevelStr[curLevel], funcName, line);
 #else
 
@@ -167,7 +168,7 @@ void log_message(log_callback_fn callback, ZooLogLevel curLevel,
     #endif
 
     ofs = snprintf(buf, FORMAT_LOG_BUF_SIZE-1,
-                   "%s:%d(0x%lx):%s@%s@%d: ", time, pid, tid,
+                   "%s:%ld(0x%lx):%s@%s@%d: ", time, (long)pid, tid,
                    dbgLevelStr[curLevel], funcName, line);
 #endif
 

+ 7 - 2
src/c/src/zookeeper.c

@@ -235,11 +235,16 @@ typedef int sendsize_t;
 #define SEND_FLAGS  0
 #else
 #ifdef __APPLE__
-#define MSG_NOSIGNAL SO_NOSIGPIPE
+#define SEND_FLAGS SO_NOSIGPIPE
+#endif
+#ifdef __linux__
+#define SEND_FLAGS MSG_NOSIGNAL
+#endif
+#ifndef SEND_FLAGS
+#define SEND_FLAGS 0
 #endif
 typedef int socket_t;
 typedef ssize_t sendsize_t;
-#define SEND_FLAGS  MSG_NOSIGNAL
 #endif
 
 static void zookeeper_set_sock_nodelay(zhandle_t *, socket_t);

+ 1 - 1
src/c/tests/LibCMocks.cc

@@ -148,7 +148,7 @@ Mock_calloc* Mock_calloc::mock_=0;
 // realloc
 
 #ifndef USING_DUMA
-void* realloc(void* p, size_t s){
+DECLARE_WRAPPER(void*,realloc,(void* p, size_t s)){
     if(!Mock_realloc::mock_)
         return LIBC_SYMBOLS.realloc(p,s);
     return Mock_realloc::mock_->call(p,s);

+ 1 - 0
src/c/tests/wrappers.opt

@@ -4,3 +4,4 @@
 -Wl,--wrap -Wl,get_xid
 -Wl,--wrap -Wl,deliverWatchers
 -Wl,--wrap -Wl,activateWatcher
+-Wl,--wrap -Wl,realloc