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