1# Source of configuration for Kyoto Tycoon
2
3
4
5#================================================================
6# Generic Settings
7#================================================================
8
9# Package name
10AC_INIT(kyototycoon, 0.9.56)
11
12# Package information
13MYLIBVER=2
14MYLIBREV=19
15
16# Targets
17MYHEADERFILES="ktcommon.h ktutil.h ktsocket.h ktthserv.h kthttp.h ktrpc.h ktulog.h ktshlib.h"
18MYHEADERFILES="$MYHEADERFILES kttimeddb.h ktdbext.h ktremotedb.h ktplugserv.h ktplugdb.h"
19MYLIBRARYFILES="libkyototycoon.a"
20MYLIBOBJFILES="ktutil.o ktsocket.o ktthserv.o kthttp.o ktrpc.o ktulog.o ktshlib.o"
21MYLIBOBJFILES="$MYLIBOBJFILES kttimeddb.o ktdbext.o ktremotedb.o ktplugserv.o ktplugdb.o"
22MYSHLIBFILES="ktplugservmemc.so ktplugdbvoid.so"
23MYCOMMANDFILES="ktutiltest ktutilmgr ktutilserv kttimedtest kttimedmgr"
24MYCOMMANDFILES="$MYCOMMANDFILES ktserver ktremotetest ktremotemgr"
25MYMAN1FILES="ktutiltest.1 ktutilmgr.1 ktutilserv.1 kttimedtest.1 kttimedmgr.1"
26MYMAN1FILES="$MYMAN1FILES ktserver.1 ktremotetest.1 ktremotemgr.1"
27MYDOCUMENTFILES="COPYING ChangeLog doc kyototycoon.idl"
28MYPCFILES="kyototycoon.pc"
29
30# Building flags
31MYCFLAGS="-Wall -ansi -pedantic -fPIC -fsigned-char -g0 -O2"
32MYCXXFLAGS="-Wall -fPIC -fsigned-char -g0 -O2"
33MYCPPFLAGS="-I. -I\$(INCLUDEDIR) -I/usr/local/include"
34MYCPPFLAGS="$MYCPPFLAGS -DNDEBUG -D_GNU_SOURCE=1"
35MYCPPFLAGS="$MYCPPFLAGS -D_FILE_OFFSET_BITS=64 -D_REENTRANT -D__EXTENSIONS__"
36MYLDFLAGS="-L. -L\$(LIBDIR) -L/usr/local/lib"
37MYCMDLDFLAGS=""
38MYCMDLIBS=""
39MYLDLIBPATH=""
40MYLDLIBPATHENV="LD_LIBRARY_PATH"
41MYPOSTCMD="true"
42
43# Building paths
44PATH=".:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH"
45CPATH=".:/usr/local/include:$CPATH"
46LIBRARY_PATH=".:/usr/local/lib:$LIBRARY_PATH"
47LD_LIBRARY_PATH=".:/usr/local/lib:$LD_LIBRARY_PATH"
48PKG_CONFIG_PATH=".:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
49export PATH CPATH LIBRARY_PATH LD_LIBRARY_PATH PKG_CONFIG_PATH
50
51
52
53#================================================================
54# Options
55#================================================================
56
57# Internal variables
58enables=""
59is_static=""
60
61# Debug mode
62AC_ARG_ENABLE(debug,
63  AC_HELP_STRING([--enable-debug], [build for debugging]))
64if test "$enable_debug" = "yes"
65then
66  MYCFLAGS="-Wall -ansi -pedantic -fPIC -fsigned-char -g -O0"
67  MYCXXFLAGS="-Wall -fPIC -fsigned-char -g -O0"
68  MYCPPFLAGS="$MYCPPFLAGS -UNDEBUG -D_KCDEBUG"
69  is_static="yes"
70  enables="$enables (debug)"
71fi
72
73# Developping mode
74AC_ARG_ENABLE(devel,
75  AC_HELP_STRING([--enable-devel], [build for development]))
76if test "$enable_devel" = "yes"
77then
78  MYCFLAGS="-Wall -Wextra -Wno-unused-parameter"
79  MYCFLAGS="$MYCFLAGS -ansi -pedantic -fPIC -fsigned-char -O2 -fno-inline -pipe"
80  MYCXXFLAGS="-Wall -Wextra -Wno-unused-parameter -Wnon-virtual-dtor"
81  MYCXXFLAGS="$MYCXXFLAGS -fPIC -fsigned-char -g -O2 -fno-inline -pipe"
82  MYCPPFLAGS="$MYCPPFLAGS -UNDEBUG -D_KCDEBUG"
83  enables="$enables (devel)"
84fi
85
86# Disable optimization
87AC_ARG_ENABLE(opt,
88  AC_HELP_STRING([--disable-opt], [build without optimization]))
89if test "$enable_opt" = "no"
90then
91  MYCFLAGS="$MYCFLAGS -O0"
92  MYCXXFLAGS="$MYCXXFLAGS -O0"
93  enables="$enables (no-opt)"
94fi
95
96# Profiling mode
97AC_ARG_ENABLE(profile,
98  AC_HELP_STRING([--enable-profile], [build for profiling]))
99if test "$enable_profile" = "yes"
100then
101  MYCXXFLAGS="-Wall -fPIC -fsigned-char -g -pg -O2 -fno-inline -pipe"
102  enables="$enables (profile)"
103fi
104
105# Micro yield mode
106AC_ARG_ENABLE(uyield,
107  AC_HELP_STRING([--enable-uyield], [build for detecting race conditions]))
108if test "$enable_uyield" = "yes"
109then
110  MYCPPFLAGS="$MYCPPFLAGS -UNDEBUG -D_KCUYIELD"
111  enables="$enables (uyield)"
112fi
113
114# Static mode
115AC_ARG_ENABLE(static,
116  AC_HELP_STRING([--enable-static], [build by static linking]))
117if test "$enable_static" = "yes"
118then
119  is_static="yes"
120  enables="$enables (static)"
121fi
122
123# Disable shared object
124AC_ARG_ENABLE(shared,
125  AC_HELP_STRING([--disable-shared], [avoid to build shared libraries]))
126if test "$enable_shared" = "no"
127then
128  enables="$enables (no-shared)"
129fi
130
131# Disable specific event notifiers
132AC_ARG_ENABLE(event,
133  AC_HELP_STRING([--disable-event], [avoid to use system-specific event notifiers]))
134if test "$enable_event" = "no"
135then
136  MYCPPFLAGS="$MYCPPFLAGS -D_MYNOEVENT"
137  enables="$enables (no-event)"
138fi
139
140# Enable Lua extension
141AC_ARG_ENABLE(lua,
142  AC_HELP_STRING([--enable-lua], [build with Lua extension]))
143if test "$enable_lua" = "yes"
144then
145  luaver=`lua -e 'v = string.gsub(_VERSION, ".* ", ""); print(v)'`
146  MYCPPFLAGS="$MYCPPFLAGS -D_MYLUA"
147  MYCPPFLAGS="$MYCPPFLAGS -I/usr/include/lua$luaver -I/usr/local/include/lua$luaver"
148  MYCPPFLAGS="$MYCPPFLAGS -I/usr/include/lua -I/usr/local/include/lua"
149  MYLDFLAGS="$MYLDFLAGS -L/usr/lib/lua$luaver -L/usr/local/lib/lua$luaver"
150  MYLDFLAGS="$MYLDFLAGS -L/usr/lib/lua -L/usr/local/lib/lua"
151  LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/lua$luaver:/usr/local/lib/lua$luaver"
152  LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/lua:/usr/local/lib/lua"
153  LIBRARY_PATH="$LIBRARY_PATH:/usr/lib/lua$luaver:/usr/local/lib/lua$luaver"
154  LIBRARY_PATH="$LIBRARY_PATH:/usr/lib/lua:/usr/local/lib/lua"
155  CPATH="$CPATH:/usr/include/lua$luaver:/usr/local/include/lua$luaver"
156  CPATH="$CPATH:/usr/include/lua:/usr/local/include/lua"
157  enables="$enables (lua)"
158fi
159
160# Specify the installation path of Kyoto Cabinet
161AC_ARG_WITH(kc,
162  AC_HELP_STRING([--with-kc=DIR], [search DIR/include and DIR/lib for Kyoto Cabinet]))
163if test -n "$with_kc"
164then
165  MYCPPFLAGS="$MYCPPFLAGS -I$with_kc/include"
166  MYLDFLAGS="$MYLDFLAGS -L$with_kc/lib"
167  CPATH="$CPATH:$with_kc/include"
168  LIBRARY_PATH="$LIBRARY_PATH:$with_kc/lib"
169  LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$with_kc/lib"
170  PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$with_kc/lib/pkgconfig"
171fi
172
173# Specify the installation path of Lua
174AC_ARG_WITH(lua,
175  AC_HELP_STRING([--with-lua=DIR], [search DIR/include and DIR/lib for Lua]))
176if test -n "$with_lua"
177then
178  MYCPPFLAGS="$MYCPPFLAGS -I$with_lua/include"
179  MYLDFLAGS="$MYLDFLAGS -L$with_lua/lib"
180  CPATH="$CPATH:$with_lua/include"
181  LIBRARY_PATH="$LIBRARY_PATH:$with_lua/lib"
182  LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$with_lua/lib"
183  PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$with_lua/lib/pkgconfig"
184fi
185
186# Messages
187printf '#================================================================\n'
188printf '# Configuring Kyoto Tycoon version %s%s.\n' "$PACKAGE_VERSION" "$enables"
189printf '#================================================================\n'
190
191
192
193#================================================================
194# Checking Commands and Libraries
195#================================================================
196
197# C and C++ compilers
198AC_PROG_CC
199AC_PROG_CXX
200AC_LANG(C++)
201
202# Reset variables
203if test "$GCC" != "yes"
204then
205  AC_MSG_WARN([another compiler except for GCC was detected])
206  MYCFLAGS=""
207  MYCXXFLAGS=""
208fi
209test -n "$CFLAGS" && MYCFLAGS="$CFLAGS $MYCFLAGS"
210test -n "$CXXFLAGS" && MYCXXFLAGS="$CXXFLAGS $MYCXXFLAGS"
211test -n "$CPPFLAGS" && MYCPPFLAGS="$CPPFLAGS $MYCPPFLAGS"
212test -n "$LDFLAGS" && MYLDFLAGS="$LDFLAGS $MYLDFLAGS"
213
214# System-depending optimization
215printf 'checking for 64-bit availability... '
216if printf 'main() {}' | $CC -xc -m64 -o config.tmp - >config.tmp 2>&1
217then
218  MYCFLAGS="-m64 $MYCFLAGS"
219  MYCXXFLAGS="-m64 $MYCXXFLAGS"
220  printf 'yes\n'
221else
222  printf 'no\n'
223fi
224if test "$enable_opt" != "no"
225then
226  printf 'checking for CPU optimization availability... '
227  if printf 'main() {}' | $CC -xc -march=native -o config.tmp - >config.tmp 2>&1
228  then
229    MYCFLAGS="-march=native $MYCFLAGS"
230    MYCXXFLAGS="-march=native $MYCXXFLAGS"
231    printf 'yes\n'
232  else
233    printf 'no\n'
234  fi
235fi
236printf 'checking for useless warnings... '
237if printf 'main() {}' | $CC -xc \
238  -Wno-unused-but-set-variable -Wno-unused-but-set-parameter -o config.tmp - >config.tmp 2>&1
239then
240  MYCFLAGS="$MYCFLAGS -Wno-unused-but-set-variable -Wno-unused-but-set-parameter"
241  MYCXXFLAGS="$MYCXXFLAGS -Wno-unused-but-set-variable -Wno-unused-but-set-parameter"
242  printf 'yes\n'
243else
244  printf 'no\n'
245fi
246
247# Underlying libraries
248AC_CHECK_LIB(c, main)
249AC_CHECK_LIB(m, main)
250AC_CHECK_LIB(pthread, main)
251AC_CHECK_LIB(rt, main)
252AC_CHECK_LIB(dl, main)
253AC_CHECK_LIB(nsl, main)
254AC_CHECK_LIB(socket, main)
255AC_CHECK_LIB(resolv, main)
256AC_CHECK_LIB(stdc++, main)
257AC_CHECK_LIB(regex, main)
258AC_CHECK_LIB(z, main)
259AC_CHECK_LIB(lzo2, main)
260AC_CHECK_LIB(lzma, main)
261AC_CHECK_LIB(kyotocabinet, main)
262AC_CHECK_LIB(kyotocabinet, main, MYCMDLIBS="$MYCMDLIBS -lkyotocabinet")
263if test "$enable_lua" = "yes"
264then
265  AC_CHECK_LIB(lua, main, MYCMDLIBS="$MYCMDLIBS -llua")
266  AC_CHECK_LIB(lua$luaver, main, MYCMDLIBS="$MYCMDLIBS -llua$luaver")
267fi
268AC_CHECK_LIB(kyototycoon, main, AC_MSG_WARN([old version of Kyoto Tycoon was detected]))
269MYLDLIBPATH="$LD_LIBRARY_PATH"
270
271# Necessary headers
272AC_CHECK_HEADER(stdlib.h, true, AC_MSG_ERROR([stdlib.h is required]))
273AC_CHECK_HEADER(stdint.h, true, AC_MSG_ERROR([stdint.h is required]))
274AC_CHECK_HEADER(unistd.h, true, AC_MSG_ERROR([unistd.h is required]))
275AC_CHECK_HEADER(sys/socket.h, true, AC_MSG_ERROR([sys/socket.h is required]))
276AC_CHECK_HEADER(kccommon.h, true, AC_MSG_ERROR([kccommon.h is required]))
277if test "$enable_lua" = "yes"
278then
279  AC_CHECK_HEADER(lua.h, true, AC_MSG_ERROR([lua.h is required]))
280fi
281
282# Static linking
283if test "$is_static" = "yes"
284then
285  MYCMDLDFLAGS="$MYCMDLDFLAGS -static"
286  MYCMDLIBS="$MYCMDLIBS $LIBS"
287fi
288
289# As-needed linking
290if uname | grep Linux >config.tmp
291then
292  MYLDFLAGS="$MYLDFLAGS -Wl,-rpath-link,.:/usr/local/lib:$MYLDLIBPATH"
293  MYLDFLAGS="$MYLDFLAGS -Wl,--as-needed"
294else
295  MYCMDLIBS="$MYCMDLIBS $LIBS"
296fi
297
298# Checking the version of Kyoto Cabinet with pkg-config
299if type pkg-config >config.tmp 2>&1
300then
301  printf 'checking Kyoto Cabinet by pkg-config... '
302  if pkg-config --atleast-version=1.2.65 kyotocabinet
303  then
304    printf 'yes\n'
305  else
306    printf 'no\n'
307    AC_MSG_ERROR([required version of Kyoto Cabinet was not detected])
308  fi
309fi
310
311# Shared libraries
312if test "$enable_shared" != "no" && test "$enable_profile" != "yes"
313then
314  if uname | grep Darwin >config.tmp
315  then
316    MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.$MYLIBVER.$MYLIBREV.0.dylib"
317    MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.$MYLIBVER.dylib"
318    MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.dylib"
319    MYLDLIBPATHENV="DYLD_LIBRARY_PATH"
320  else
321    MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.so.$MYLIBVER.$MYLIBREV.0"
322    MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.so.$MYLIBVER"
323    MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.so"
324  fi
325fi
326if uname | grep Darwin >config.tmp
327then
328  MYSHLIBFILES="ktplugservmemc.dylib"
329fi
330
331# Work around of bugs of some environments
332if uname | grep Darwin >config.tmp
333then
334  MYCFLAGS="$MYCFLAGS -Os"
335  MYCXXFLAGS="$MYCXXFLAGS -Os"
336fi
337
338
339
340#================================================================
341# Generic Settings
342#================================================================
343
344# Export variables
345AC_SUBST(MYLIBVER)
346AC_SUBST(MYLIBREV)
347AC_SUBST(MYFORMATVER)
348AC_SUBST(MYHEADERFILES)
349AC_SUBST(MYLIBRARYFILES)
350AC_SUBST(MYLIBOBJFILES)
351AC_SUBST(MYSHLIBFILES)
352AC_SUBST(MYCOMMANDFILES)
353AC_SUBST(MYMAN1FILES)
354AC_SUBST(MYDOCUMENTFILES)
355AC_SUBST(MYPCFILES)
356AC_SUBST(MYCFLAGS)
357AC_SUBST(MYCXXFLAGS)
358AC_SUBST(MYCPPFLAGS)
359AC_SUBST(MYLDFLAGS)
360AC_SUBST(MYCMDLDFLAGS)
361AC_SUBST(MYCMDLIBS)
362AC_SUBST(MYLDLIBPATH)
363AC_SUBST(MYLDLIBPATHENV)
364AC_SUBST(MYPOSTCMD)
365
366# Targets
367AC_OUTPUT(Makefile kyototycoon.pc)
368
369# Messages
370printf '#================================================================\n'
371printf '# Ready to make.\n'
372printf '#================================================================\n'
373
374
375
376# END OF FILE
377