1# need this for Doxygen integration
2include $(top_srcdir)/aminclude.am
3
4AUTOMAKE_OPTIONS = serial-tests
5
6if SOLARIS
7  SOLARIS_CPPFLAGS = -D_POSIX_PTHREAD_SEMANTICS
8  SOLARIS_LIB_LDFLAGS = -lnsl -lsocket
9endif
10
11if WANT_OPENSSL
12  OPENSSL_CPPFLAGS = -DHAVE_OPENSSL_H
13  OPENSSL_LIB_LDFLAGS = -lssl -lcrypto
14endif
15
16if WANT_SASL
17  SASL_CPPFLAGS = -DHAVE_CYRUS_SASL_H
18  SASL_LIB_LDFLAGS = -lsasl2
19  SASL_SRC = src/zk_sasl.c
20endif
21
22AM_CPPFLAGS = -I${srcdir}/include -I${srcdir}/tests -I${srcdir}/generated $(SOLARIS_CPPFLAGS) $(OPENSSL_CPPFLAGS) $(SASL_CPPFLAGS)
23AM_CFLAGS = -Wall  -Wdeclaration-after-statement
24AM_CXXFLAGS = -Wall $(USEIPV6)
25LIB_LDFLAGS = -no-undefined -version-info 2 $(SOLARIS_LIB_LDFLAGS) $(OPENSSL_LIB_LDFLAGS) $(SASL_LIB_LDFLAGS)
26
27# Additional flags for coverage testing (if enabled)
28if ENABLEGCOV
29  AM_CFLAGS += -fprofile-arcs -ftest-coverage
30  AM_LDFLAGS = -lgcov
31endif
32
33pkginclude_HEADERS = include/zookeeper.h include/zookeeper_version.h include/zookeeper_log.h include/proto.h include/recordio.h generated/zookeeper.jute.h
34EXTRA_DIST=LICENSE
35
36HASHTABLE_SRC = src/hashtable/hashtable_itr.h src/hashtable/hashtable_itr.c \
37    src/hashtable/hashtable_private.h src/hashtable/hashtable.h src/hashtable/hashtable.c
38
39noinst_LTLIBRARIES = libhashtable.la
40libhashtable_la_SOURCES = $(HASHTABLE_SRC)
41
42COMMON_SRC = src/zookeeper.c include/zookeeper.h include/zookeeper_version.h include/zookeeper_log.h\
43    src/recordio.c include/recordio.h include/proto.h \
44    src/zk_adaptor.h generated/zookeeper.jute.c \
45    src/zk_log.c src/zk_hashtable.h src/zk_hashtable.c \
46    src/addrvec.h src/addrvec.c $(SASL_SRC)
47
48# These are the symbols (classes, mostly) we want to export from our library.
49EXPORT_SYMBOLS = '(zoo_|zookeeper_|zhandle|Z|format_log_message|log_message|logLevel|deallocate_|allocate_|zerror|is_unrecoverable)'
50noinst_LTLIBRARIES += libzkst.la
51libzkst_la_SOURCES =$(COMMON_SRC) src/st_adaptor.c
52libzkst_la_LIBADD = -lm $(CLOCK_GETTIME_LIBS)
53
54lib_LTLIBRARIES = libzookeeper_st.la
55libzookeeper_st_la_SOURCES =
56libzookeeper_st_la_LIBADD=libzkst.la libhashtable.la
57libzookeeper_st_la_DEPENDENCIES=libzkst.la libhashtable.la
58libzookeeper_st_la_LDFLAGS = $(LIB_LDFLAGS) -export-symbols-regex $(EXPORT_SYMBOLS)
59
60if WANT_SYNCAPI
61noinst_LTLIBRARIES += libzkmt.la
62libzkmt_la_SOURCES =$(COMMON_SRC) src/mt_adaptor.c
63libzkmt_la_CFLAGS = $(AM_CFLAGS) -DTHREADED
64libzkmt_la_LIBADD = -lm $(CLOCK_GETTIME_LIBS)
65
66lib_LTLIBRARIES += libzookeeper_mt.la
67libzookeeper_mt_la_SOURCES =
68libzookeeper_mt_la_LIBADD=libzkmt.la libhashtable.la -lpthread
69libzookeeper_mt_la_DEPENDENCIES=libzkmt.la libhashtable.la
70libzookeeper_mt_la_LDFLAGS = $(LIB_LDFLAGS) -export-symbols-regex $(EXPORT_SYMBOLS)
71endif
72
73bin_PROGRAMS = cli_st
74
75cli_st_SOURCES = src/cli.c
76cli_st_LDADD = libzookeeper_st.la $(SASL_LIB_LDFLAGS)
77
78if WANT_SYNCAPI
79bin_PROGRAMS += cli_mt load_gen
80
81cli_mt_SOURCES = src/cli.c
82cli_mt_LDADD = libzookeeper_mt.la $(SASL_LIB_LDFLAGS)
83cli_mt_CFLAGS = $(AM_CFLAGS) -DTHREADED
84
85load_gen_SOURCES = src/load_gen.c
86load_gen_LDADD = libzookeeper_mt.la
87load_gen_CFLAGS = $(AM_CFLAGS) -DTHREADED
88
89endif
90
91#########################################################################
92# build and run unit tests
93
94EXTRA_DIST+=$(wildcard ${srcdir}/tests/*.cc) $(wildcard ${srcdir}/tests/*.h) \
95    ${srcdir}/tests/wrappers.opt ${srcdir}/tests/wrappers-mt.opt
96
97# These tests are ordered in a logical manner such that each builds upon basic
98# functionality tested in prior tests. e.g. the most basic functionality is
99# tested in TestZookeeperInit and TestZookeeperClose and as such should be tested
100# first as a foundation with more complex test suites to follow.
101TEST_SOURCES = \
102	tests/TestDriver.cc \
103	tests/LibCMocks.cc \
104	tests/LibCSymTable.cc \
105	tests/MocksBase.cc \
106	tests/ZKMocks.cc \
107	tests/Util.cc \
108	tests/ThreadingUtil.cc \
109	tests/TestZookeeperInit.cc \
110	tests/TestZookeeperClose.cc \
111	tests/TestReconfig.cc \
112	tests/TestReconfigServer.cc \
113	tests/TestClientRetry.cc \
114	tests/TestOperations.cc \
115	tests/TestMulti.cc \
116	tests/TestWatchers.cc \
117	tests/TestClient.cc \
118	tests/ZooKeeperQuorumServer.cc \
119	tests/ZooKeeperQuorumServer.h \
120	tests/TestReadOnlyClient.cc \
121	tests/TestLogClientEnv.cc \
122        tests/TestSASLAuth.cc \
123	$(NULL)
124
125if SOLARIS
126  SHELL_SYMBOL_WRAPPERS = cat ${srcdir}/tests/wrappers.opt
127  SYMBOL_WRAPPERS=$(SHELL_SYMBOL_WRAPPERS:sh)
128else
129  SYMBOL_WRAPPERS=$(shell cat ${srcdir}/tests/wrappers.opt)
130endif
131
132check_PROGRAMS = zktest-st
133TESTS_ENVIRONMENT = ZKROOT=${srcdir}/../.. \
134                    CLASSPATH=$$CLASSPATH:$$CLOVER_HOME/lib/clover*.jar
135nodist_zktest_st_SOURCES = $(TEST_SOURCES)
136zktest_st_LDADD = libzkst.la libhashtable.la $(CPPUNIT_LIBS) $(OPENSSL_LIB_LDFLAGS) $(SASL_LIB_LDFLAGS) -ldl
137zktest_st_CXXFLAGS = $(AM_CXXFLAGS) -DUSE_STATIC_LIB $(CPPUNIT_CFLAGS) $(SOLARIS_CPPFLAGS)
138zktest_st_LDFLAGS = -shared $(SYMBOL_WRAPPERS) $(SOLARIS_LIB_LDFLAGS)
139
140if WANT_SYNCAPI
141  check_PROGRAMS += zktest-mt
142  nodist_zktest_mt_SOURCES = $(TEST_SOURCES) tests/PthreadMocks.cc
143  zktest_mt_LDADD = libzkmt.la libhashtable.la -lpthread $(CPPUNIT_LIBS) $(OPENSSL_LIB_LDFLAGS) $(SASL_LIB_LDFLAGS) -ldl
144  zktest_mt_CXXFLAGS = $(AM_CXXFLAGS) -DUSE_STATIC_LIB -DTHREADED $(CPPUNIT_CFLAGS) $(USEIPV6)
145if SOLARIS
146  SHELL_SYMBOL_WRAPPERS_MT = cat ${srcdir}/tests/wrappers-mt.opt
147  SYMBOL_WRAPPERS_MT=$(SYMBOL_WRAPPERS) $(SHELL_SYMBOL_WRAPPERS_MT:sh)
148else
149  SYMBOL_WRAPPERS_MT=$(SYMBOL_WRAPPERS) $(shell cat ${srcdir}/tests/wrappers-mt.opt)
150endif
151  zktest_mt_LDFLAGS = -shared $(SYMBOL_WRAPPERS_MT) $(SOLARIS_LIB_LDFLAGS)
152endif
153
154TESTS = $(check_PROGRAMS)
155
156clean-local: clean-check
157	$(RM) $(DX_CLEANFILES)
158
159clean-check:
160	$(RM) $(nodist_zktest_st_OBJECTS) $(nodist_zktest_mt_OBJECTS)
161