# Source of configuration for Kyoto Tycoon #================================================================ # Generic Settings #================================================================ # Package name AC_INIT(kyototycoon, 0.9.56) # Package information MYLIBVER=2 MYLIBREV=19 # Targets MYHEADERFILES="ktcommon.h ktutil.h ktsocket.h ktthserv.h kthttp.h ktrpc.h ktulog.h ktshlib.h" MYHEADERFILES="$MYHEADERFILES kttimeddb.h ktdbext.h ktremotedb.h ktplugserv.h ktplugdb.h" MYLIBRARYFILES="libkyototycoon.a" MYLIBOBJFILES="ktutil.o ktsocket.o ktthserv.o kthttp.o ktrpc.o ktulog.o ktshlib.o" MYLIBOBJFILES="$MYLIBOBJFILES kttimeddb.o ktdbext.o ktremotedb.o ktplugserv.o ktplugdb.o" MYSHLIBFILES="ktplugservmemc.so ktplugdbvoid.so" MYCOMMANDFILES="ktutiltest ktutilmgr ktutilserv kttimedtest kttimedmgr" MYCOMMANDFILES="$MYCOMMANDFILES ktserver ktremotetest ktremotemgr" MYMAN1FILES="ktutiltest.1 ktutilmgr.1 ktutilserv.1 kttimedtest.1 kttimedmgr.1" MYMAN1FILES="$MYMAN1FILES ktserver.1 ktremotetest.1 ktremotemgr.1" MYDOCUMENTFILES="COPYING ChangeLog doc kyototycoon.idl" MYPCFILES="kyototycoon.pc" # Building flags MYCFLAGS="-Wall -ansi -pedantic -fPIC -fsigned-char -g0 -O2" MYCXXFLAGS="-Wall -fPIC -fsigned-char -g0 -O2" MYCPPFLAGS="-I. -I\$(INCLUDEDIR) -I/usr/local/include" MYCPPFLAGS="$MYCPPFLAGS -DNDEBUG -D_GNU_SOURCE=1" MYCPPFLAGS="$MYCPPFLAGS -D_FILE_OFFSET_BITS=64 -D_REENTRANT -D__EXTENSIONS__" MYLDFLAGS="-L. -L\$(LIBDIR) -L/usr/local/lib" MYCMDLDFLAGS="" MYCMDLIBS="" MYLDLIBPATH="" MYLDLIBPATHENV="LD_LIBRARY_PATH" MYPOSTCMD="true" # Building paths PATH=".:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH" CPATH=".:/usr/local/include:$CPATH" LIBRARY_PATH=".:/usr/local/lib:$LIBRARY_PATH" LD_LIBRARY_PATH=".:/usr/local/lib:$LD_LIBRARY_PATH" PKG_CONFIG_PATH=".:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" export PATH CPATH LIBRARY_PATH LD_LIBRARY_PATH PKG_CONFIG_PATH #================================================================ # Options #================================================================ # Internal variables enables="" is_static="" # Debug mode AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [build for debugging])) if test "$enable_debug" = "yes" then MYCFLAGS="-Wall -ansi -pedantic -fPIC -fsigned-char -g -O0" MYCXXFLAGS="-Wall -fPIC -fsigned-char -g -O0" MYCPPFLAGS="$MYCPPFLAGS -UNDEBUG -D_KCDEBUG" is_static="yes" enables="$enables (debug)" fi # Developping mode AC_ARG_ENABLE(devel, AC_HELP_STRING([--enable-devel], [build for development])) if test "$enable_devel" = "yes" then MYCFLAGS="-Wall -Wextra -Wno-unused-parameter" MYCFLAGS="$MYCFLAGS -ansi -pedantic -fPIC -fsigned-char -O2 -fno-inline -pipe" MYCXXFLAGS="-Wall -Wextra -Wno-unused-parameter -Wnon-virtual-dtor" MYCXXFLAGS="$MYCXXFLAGS -fPIC -fsigned-char -g -O2 -fno-inline -pipe" MYCPPFLAGS="$MYCPPFLAGS -UNDEBUG -D_KCDEBUG" enables="$enables (devel)" fi # Disable optimization AC_ARG_ENABLE(opt, AC_HELP_STRING([--disable-opt], [build without optimization])) if test "$enable_opt" = "no" then MYCFLAGS="$MYCFLAGS -O0" MYCXXFLAGS="$MYCXXFLAGS -O0" enables="$enables (no-opt)" fi # Profiling mode AC_ARG_ENABLE(profile, AC_HELP_STRING([--enable-profile], [build for profiling])) if test "$enable_profile" = "yes" then MYCXXFLAGS="-Wall -fPIC -fsigned-char -g -pg -O2 -fno-inline -pipe" enables="$enables (profile)" fi # Micro yield mode AC_ARG_ENABLE(uyield, AC_HELP_STRING([--enable-uyield], [build for detecting race conditions])) if test "$enable_uyield" = "yes" then MYCPPFLAGS="$MYCPPFLAGS -UNDEBUG -D_KCUYIELD" enables="$enables (uyield)" fi # Static mode AC_ARG_ENABLE(static, AC_HELP_STRING([--enable-static], [build by static linking])) if test "$enable_static" = "yes" then is_static="yes" enables="$enables (static)" fi # Disable shared object AC_ARG_ENABLE(shared, AC_HELP_STRING([--disable-shared], [avoid to build shared libraries])) if test "$enable_shared" = "no" then enables="$enables (no-shared)" fi # Disable specific event notifiers AC_ARG_ENABLE(event, AC_HELP_STRING([--disable-event], [avoid to use system-specific event notifiers])) if test "$enable_event" = "no" then MYCPPFLAGS="$MYCPPFLAGS -D_MYNOEVENT" enables="$enables (no-event)" fi # Enable Lua extension AC_ARG_ENABLE(lua, AC_HELP_STRING([--enable-lua], [build with Lua extension])) if test "$enable_lua" = "yes" then luaver=`lua -e 'v = string.gsub(_VERSION, ".* ", ""); print(v)'` MYCPPFLAGS="$MYCPPFLAGS -D_MYLUA" MYCPPFLAGS="$MYCPPFLAGS -I/usr/include/lua$luaver -I/usr/local/include/lua$luaver" MYCPPFLAGS="$MYCPPFLAGS -I/usr/include/lua -I/usr/local/include/lua" MYLDFLAGS="$MYLDFLAGS -L/usr/lib/lua$luaver -L/usr/local/lib/lua$luaver" MYLDFLAGS="$MYLDFLAGS -L/usr/lib/lua -L/usr/local/lib/lua" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/lua$luaver:/usr/local/lib/lua$luaver" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/lua:/usr/local/lib/lua" LIBRARY_PATH="$LIBRARY_PATH:/usr/lib/lua$luaver:/usr/local/lib/lua$luaver" LIBRARY_PATH="$LIBRARY_PATH:/usr/lib/lua:/usr/local/lib/lua" CPATH="$CPATH:/usr/include/lua$luaver:/usr/local/include/lua$luaver" CPATH="$CPATH:/usr/include/lua:/usr/local/include/lua" enables="$enables (lua)" fi # Specify the installation path of Kyoto Cabinet AC_ARG_WITH(kc, AC_HELP_STRING([--with-kc=DIR], [search DIR/include and DIR/lib for Kyoto Cabinet])) if test -n "$with_kc" then MYCPPFLAGS="$MYCPPFLAGS -I$with_kc/include" MYLDFLAGS="$MYLDFLAGS -L$with_kc/lib" CPATH="$CPATH:$with_kc/include" LIBRARY_PATH="$LIBRARY_PATH:$with_kc/lib" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$with_kc/lib" PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$with_kc/lib/pkgconfig" fi # Specify the installation path of Lua AC_ARG_WITH(lua, AC_HELP_STRING([--with-lua=DIR], [search DIR/include and DIR/lib for Lua])) if test -n "$with_lua" then MYCPPFLAGS="$MYCPPFLAGS -I$with_lua/include" MYLDFLAGS="$MYLDFLAGS -L$with_lua/lib" CPATH="$CPATH:$with_lua/include" LIBRARY_PATH="$LIBRARY_PATH:$with_lua/lib" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$with_lua/lib" PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$with_lua/lib/pkgconfig" fi # Messages printf '#================================================================\n' printf '# Configuring Kyoto Tycoon version %s%s.\n' "$PACKAGE_VERSION" "$enables" printf '#================================================================\n' #================================================================ # Checking Commands and Libraries #================================================================ # C and C++ compilers AC_PROG_CC AC_PROG_CXX AC_LANG(C++) # Reset variables if test "$GCC" != "yes" then AC_MSG_WARN([another compiler except for GCC was detected]) MYCFLAGS="" MYCXXFLAGS="" fi test -n "$CFLAGS" && MYCFLAGS="$CFLAGS $MYCFLAGS" test -n "$CXXFLAGS" && MYCXXFLAGS="$CXXFLAGS $MYCXXFLAGS" test -n "$CPPFLAGS" && MYCPPFLAGS="$CPPFLAGS $MYCPPFLAGS" test -n "$LDFLAGS" && MYLDFLAGS="$LDFLAGS $MYLDFLAGS" # System-depending optimization printf 'checking for 64-bit availability... ' if printf 'main() {}' | $CC -xc -m64 -o config.tmp - >config.tmp 2>&1 then MYCFLAGS="-m64 $MYCFLAGS" MYCXXFLAGS="-m64 $MYCXXFLAGS" printf 'yes\n' else printf 'no\n' fi if test "$enable_opt" != "no" then printf 'checking for CPU optimization availability... ' if printf 'main() {}' | $CC -xc -march=native -o config.tmp - >config.tmp 2>&1 then MYCFLAGS="-march=native $MYCFLAGS" MYCXXFLAGS="-march=native $MYCXXFLAGS" printf 'yes\n' else printf 'no\n' fi fi printf 'checking for useless warnings... ' if printf 'main() {}' | $CC -xc \ -Wno-unused-but-set-variable -Wno-unused-but-set-parameter -o config.tmp - >config.tmp 2>&1 then MYCFLAGS="$MYCFLAGS -Wno-unused-but-set-variable -Wno-unused-but-set-parameter" MYCXXFLAGS="$MYCXXFLAGS -Wno-unused-but-set-variable -Wno-unused-but-set-parameter" printf 'yes\n' else printf 'no\n' fi # Underlying libraries AC_CHECK_LIB(c, main) AC_CHECK_LIB(m, main) AC_CHECK_LIB(pthread, main) AC_CHECK_LIB(rt, main) AC_CHECK_LIB(dl, main) AC_CHECK_LIB(nsl, main) AC_CHECK_LIB(socket, main) AC_CHECK_LIB(resolv, main) AC_CHECK_LIB(stdc++, main) AC_CHECK_LIB(regex, main) AC_CHECK_LIB(z, main) AC_CHECK_LIB(lzo2, main) AC_CHECK_LIB(lzma, main) AC_CHECK_LIB(kyotocabinet, main) AC_CHECK_LIB(kyotocabinet, main, MYCMDLIBS="$MYCMDLIBS -lkyotocabinet") if test "$enable_lua" = "yes" then AC_CHECK_LIB(lua, main, MYCMDLIBS="$MYCMDLIBS -llua") AC_CHECK_LIB(lua$luaver, main, MYCMDLIBS="$MYCMDLIBS -llua$luaver") fi AC_CHECK_LIB(kyototycoon, main, AC_MSG_WARN([old version of Kyoto Tycoon was detected])) MYLDLIBPATH="$LD_LIBRARY_PATH" # Necessary headers AC_CHECK_HEADER(stdlib.h, true, AC_MSG_ERROR([stdlib.h is required])) AC_CHECK_HEADER(stdint.h, true, AC_MSG_ERROR([stdint.h is required])) AC_CHECK_HEADER(unistd.h, true, AC_MSG_ERROR([unistd.h is required])) AC_CHECK_HEADER(sys/socket.h, true, AC_MSG_ERROR([sys/socket.h is required])) AC_CHECK_HEADER(kccommon.h, true, AC_MSG_ERROR([kccommon.h is required])) if test "$enable_lua" = "yes" then AC_CHECK_HEADER(lua.h, true, AC_MSG_ERROR([lua.h is required])) fi # Static linking if test "$is_static" = "yes" then MYCMDLDFLAGS="$MYCMDLDFLAGS -static" MYCMDLIBS="$MYCMDLIBS $LIBS" fi # As-needed linking if uname | grep Linux >config.tmp then MYLDFLAGS="$MYLDFLAGS -Wl,-rpath-link,.:/usr/local/lib:$MYLDLIBPATH" MYLDFLAGS="$MYLDFLAGS -Wl,--as-needed" else MYCMDLIBS="$MYCMDLIBS $LIBS" fi # Checking the version of Kyoto Cabinet with pkg-config if type pkg-config >config.tmp 2>&1 then printf 'checking Kyoto Cabinet by pkg-config... ' if pkg-config --atleast-version=1.2.65 kyotocabinet then printf 'yes\n' else printf 'no\n' AC_MSG_ERROR([required version of Kyoto Cabinet was not detected]) fi fi # Shared libraries if test "$enable_shared" != "no" && test "$enable_profile" != "yes" then if uname | grep Darwin >config.tmp then MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.$MYLIBVER.$MYLIBREV.0.dylib" MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.$MYLIBVER.dylib" MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.dylib" MYLDLIBPATHENV="DYLD_LIBRARY_PATH" else MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.so.$MYLIBVER.$MYLIBREV.0" MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.so.$MYLIBVER" MYLIBRARYFILES="$MYLIBRARYFILES libkyototycoon.so" fi fi if uname | grep Darwin >config.tmp then MYSHLIBFILES="ktplugservmemc.dylib" fi # Work around of bugs of some environments if uname | grep Darwin >config.tmp then MYCFLAGS="$MYCFLAGS -Os" MYCXXFLAGS="$MYCXXFLAGS -Os" fi #================================================================ # Generic Settings #================================================================ # Export variables AC_SUBST(MYLIBVER) AC_SUBST(MYLIBREV) AC_SUBST(MYFORMATVER) AC_SUBST(MYHEADERFILES) AC_SUBST(MYLIBRARYFILES) AC_SUBST(MYLIBOBJFILES) AC_SUBST(MYSHLIBFILES) AC_SUBST(MYCOMMANDFILES) AC_SUBST(MYMAN1FILES) AC_SUBST(MYDOCUMENTFILES) AC_SUBST(MYPCFILES) AC_SUBST(MYCFLAGS) AC_SUBST(MYCXXFLAGS) AC_SUBST(MYCPPFLAGS) AC_SUBST(MYLDFLAGS) AC_SUBST(MYCMDLDFLAGS) AC_SUBST(MYCMDLIBS) AC_SUBST(MYLDLIBPATH) AC_SUBST(MYLDLIBPATHENV) AC_SUBST(MYPOSTCMD) # Targets AC_OUTPUT(Makefile kyototycoon.pc) # Messages printf '#================================================================\n' printf '# Ready to make.\n' printf '#================================================================\n' # END OF FILE