From 7c28b33194e3c9c67b09a0053efb51f9fc69eb83 Mon Sep 17 00:00:00 2001 From: David Reiss Date: Sat, 20 Sep 2008 00:14:01 +0000 Subject: [PATCH] contrib/fb303: Some changes to the build for the Scribe release git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@697294 13f79535-47bb-0310-9956-ffa450edef68 --- contrib/fb303/README | 4 + contrib/fb303/aclocal.m4 | 1 + contrib/fb303/aclocal/ax_boost_base.m4 | 198 ++++++++++++++++++ contrib/fb303/bootstrap.sh | 2 +- contrib/fb303/configure.ac | 9 +- contrib/fb303/cpp/Makefile.am | 4 +- contrib/fb303/py/fb303_scripts/__init__.py | 1 + .../fb303_scripts}/fb303_simple_mgmt.py | 24 ++- contrib/fb303/py/setup.py | 3 +- 9 files changed, 231 insertions(+), 15 deletions(-) create mode 100644 contrib/fb303/aclocal/ax_boost_base.m4 create mode 100644 contrib/fb303/py/fb303_scripts/__init__.py rename contrib/fb303/{scripts => py/fb303_scripts}/fb303_simple_mgmt.py (90%) mode change 100755 => 100644 diff --git a/contrib/fb303/README b/contrib/fb303/README index ee0d0b25..8ade560c 100644 --- a/contrib/fb303/README +++ b/contrib/fb303/README @@ -29,5 +29,9 @@ CANNOT use functionality that is NOT in fb303. Yes. fb303 is distributed under the Thrift Software License. See the LICENSE file for more details. +* Installation * +fb303 is configured/built/installed similar to Thrift. See the README +in the Thrift root directory for more information. + * Who wrote this README? * mcslee@facebook.com diff --git a/contrib/fb303/aclocal.m4 b/contrib/fb303/aclocal.m4 index d23c95ca..b1ec5070 100644 --- a/contrib/fb303/aclocal.m4 +++ b/contrib/fb303/aclocal.m4 @@ -848,4 +848,5 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([aclocal/ax_boost_base.m4]) m4_include([acinclude.m4]) diff --git a/contrib/fb303/aclocal/ax_boost_base.m4 b/contrib/fb303/aclocal/ax_boost_base.m4 new file mode 100644 index 00000000..e56bb738 --- /dev/null +++ b/contrib/fb303/aclocal/ax_boost_base.m4 @@ -0,0 +1,198 @@ +##### http://autoconf-archive.cryp.to/ax_boost_base.html +# +# SYNOPSIS +# +# AX_BOOST_BASE([MINIMUM-VERSION]) +# +# DESCRIPTION +# +# Test for the Boost C++ libraries of a particular version (or newer) +# +# If no path to the installed boost library is given the macro +# searchs under /usr, /usr/local, /opt and /opt/local and evaluates +# the $BOOST_ROOT environment variable. Further documentation is +# available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) +# +# And sets: +# +# HAVE_BOOST +# +# LAST MODIFICATION +# +# 2007-07-28 +# +# COPYLEFT +# +# Copyright (c) 2007 Thomas Porschberg +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty provided +# the copyright notice and this notice are preserved. + +AC_DEFUN([AX_BOOST_BASE], +[ +AC_ARG_WITH([boost], + AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + ], + [want_boost="yes"]) + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=ifelse([$1], ,1.20.0,$1) + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) + succeeded=no + + dnl first we check the system location for boost libraries + dnl this location ist chosen if boost libraries are installed with the --layout=system option + dnl or if you install boost with RPM + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + BOOST_CPPFLAGS="-I$ac_boost_path/include" + else + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + + + + dnl if we found no boost with system layout we search for boost libraries + dnl built and installed without the --layout=system option or for a staged(not installed) version + if test "x$succeeded" != "xyes"; then + _version=0 + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + fi + else + for ac_boost_path in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + BOOST_LDFLAGS="-L$best_path/lib" + + if test "x$BOOST_ROOT" != "x"; then + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" ; then + AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) + else + AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) + fi + else + AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_LDFLAGS) + AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +fi + +]) diff --git a/contrib/fb303/bootstrap.sh b/contrib/fb303/bootstrap.sh index cd282b1a..4bc2bb46 100755 --- a/contrib/fb303/bootstrap.sh +++ b/contrib/fb303/bootstrap.sh @@ -2,7 +2,7 @@ # To be safe include -I flag -aclocal +aclocal -I ./aclocal automake -a autoconf ./configure --config-cache $* diff --git a/contrib/fb303/configure.ac b/contrib/fb303/configure.ac index 924ea4ff..3e562b09 100644 --- a/contrib/fb303/configure.ac +++ b/contrib/fb303/configure.ac @@ -26,6 +26,11 @@ AC_PREFIX_DEFAULT([/usr/local]) # To change the current default you must change bootstrap.sh. FB_WITH_EXTERNAL_PATH([`pwd`]) +AC_ARG_VAR([PY_PREFIX], [Prefix for installing Python modules. + (Normal --prefix is ignored for Python because + Python has different conventions.) + Default = "/usr"]) +AS_IF([test "x$PY_PREFIX" = x], [PY_PREFIX="/usr"]) ########################################################################## # User Configurable @@ -46,7 +51,9 @@ FB_ENABLE_DEFAULT_STATIC # Example: sets $(thrift_home) variable with default path set to /usr/local. FB_WITH_PATH([thrift_home], [thriftpath], [/usr/local]) -FB_WITH_PATH([boost_home], [boostpath], [/usr/local/boost]) + +# Require boost 1.33.1 or later +AX_BOOST_BASE([1.33.1]) # Generates Makefile from Makefile.am. Modify when new subdirs are added. # Change Makefile.am also to add subdirectly. diff --git a/contrib/fb303/cpp/Makefile.am b/contrib/fb303/cpp/Makefile.am index 907cfc85..dc0955b5 100644 --- a/contrib/fb303/cpp/Makefile.am +++ b/contrib/fb303/cpp/Makefile.am @@ -5,7 +5,6 @@ # User specified path variables set in configure.ac. # thrift_home -# boost_home # THRIFT = $(thrift_home)/bin/thrift @@ -20,7 +19,8 @@ endif AM_CPPFLAGS = -I.. AM_CPPFLAGS += -Igen-cpp -AM_CPPFLAGS += -I$(thrift_home)/include/thrift -I$(boost_home)/include/boost-1_33_1 +AM_CPPFLAGS += -I$(thrift_home)/include/thrift +AM_CPPFLAGS += $(BOOST_CPPFLAGS) AM_CPPFLAGS += $(FB_CPPFLAGS) $(DEBUG_CPPFLAGS) # GENERATE BUILD RULES diff --git a/contrib/fb303/py/fb303_scripts/__init__.py b/contrib/fb303/py/fb303_scripts/__init__.py new file mode 100644 index 00000000..1b951c16 --- /dev/null +++ b/contrib/fb303/py/fb303_scripts/__init__.py @@ -0,0 +1 @@ +__all__ = ['fb303_simple_mgmt'] diff --git a/contrib/fb303/scripts/fb303_simple_mgmt.py b/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py old mode 100755 new mode 100644 similarity index 90% rename from contrib/fb303/scripts/fb303_simple_mgmt.py rename to contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py index bb2b62f0..7f9cc935 --- a/contrib/fb303/scripts/fb303_simple_mgmt.py +++ b/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py @@ -151,17 +151,21 @@ def fb_status_string(status_enum): return "WARNING" -def main(port, command): - status = service_ctrl(options.command, options.port) - sys.exit(status) +def main(): + + # parse command line options + parser = OptionParser() + commands=["stop","counters","status","reload","version","name","alive"] + parser.add_option("-c", "--command", dest="command", help="execute this API", + choices=commands, default="status") + parser.add_option("-p","--port",dest="port",help="the service's port", + default=9082) -# parse command line options -parser = OptionParser() -parser.add_option("-c", "--command", dest="command", help="execute this API", choices=["stop","counters","status","reload","version","name","alive"], - default="status") -parser.add_option("-p","--port",dest="port",help="the service's port", default=9082) + (options, args) = parser.parse_args() + status = service_ctrl(options.command, options.port) + sys.exit(status) -(options, args) = parser.parse_args() -main(options.port, options.command) +if __name__ == '__main__': + main() diff --git a/contrib/fb303/py/setup.py b/contrib/fb303/py/setup.py index 460ee589..68d9845f 100644 --- a/contrib/fb303/py/setup.py +++ b/contrib/fb303/py/setup.py @@ -2,6 +2,7 @@ from distutils.core import setup setup(name='fb303', version='1.0', - packages=['fb303'], + packages=['fb303', 'fb303_scripts'], ) + -- 2.17.1