[Buildroot] [PATCH 5/5] thrift: new package

Ryan Barnett rjbarnet at rockwellcollins.com
Sat Oct 26 03:12:09 UTC 2013


Gustavo,

Please see my comments below.

Gustavo Zacarias <gustavo at zacarias.com.ar> wrote on 10/25/2013 07:15:23 
AM:

> Signed-off-by: Gustavo Zacarias <gustavo at zacarias.com.ar>
> ---
>  package/Config.in                             |  1 +
>  package/thrift/Config.in                      | 22 +++++++++++
>  package/thrift/thrift-01-libevent-cross.patch | 16 ++++++++
>  package/thrift/thrift-02-autoreconf.patch     | 22 +++++++++++
>  package/thrift/thrift-03-zlib-cross.patch     | 16 ++++++++
>  package/thrift/thrift.mk                      | 54 
+++++++++++++++++++++++++++
>  6 files changed, 131 insertions(+)
>  create mode 100644 package/thrift/Config.in
>  create mode 100644 package/thrift/thrift-01-libevent-cross.patch
>  create mode 100644 package/thrift/thrift-02-autoreconf.patch
>  create mode 100644 package/thrift/thrift-03-zlib-cross.patch
>  create mode 100644 package/thrift/thrift.mk
> 
> diff --git a/package/Config.in b/package/Config.in
> index 16cb36d..319b7d5 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -639,6 +639,7 @@ source "package/openpgm/Config.in"
>  source "package/ortp/Config.in"
>  source "package/slirp/Config.in"
>  source "package/snmppp/Config.in"
> +source "package/thrift/Config.in"
>  source "package/usbredir/Config.in"
>  source "package/wvstreams/Config.in"
>  source "package/zeromq/Config.in"
> diff --git a/package/thrift/Config.in b/package/thrift/Config.in
> new file mode 100644
> index 0000000..38a8897
> --- /dev/null
> +++ b/package/thrift/Config.in
> @@ -0,0 +1,22 @@
> +config BR2_PACKAGE_THRIFT
> +   bool "thrift"
> +   depends on BR2_INSTALL_LIBSTDCPP
> +   depends on BR2_USE_WCHAR
> +   depends on BR2_LARGEFILE
> +   depends on BR2_TOOLCHAIN_HAS_THREADS
> +   select BR2_PACKAGE_BOOST
> +   select BR2_PACKAGE_LIBEVENT
> +   select BR2_PACKAGE_OPENSSL
> +   help
> +     The Apache Thrift software framework, for scalable cross-language
> +     services development, combines a software stack with a
> +     code generation engine to build services that work
> +     efficiently and seamlessly between C++, Java, Python, PHP, Ruby,
> +     Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk,
> +     OCaml and Delphi and other languages.
> +
> +     http://thrift.apache.org/
> +
> +comment "thrift needs a toolchain w/ C++, largefile, wchar, threads"
> +   depends on !BR2_LARGEFILE || !BR2_USE_WCHAR || \
> +      !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP
> diff --git a/package/thrift/thrift-01-libevent-cross.patch 
b/package/thrift/thrift-01-libevent-cross.patch
> new file mode 100644
> index 0000000..f07caa7
> --- /dev/null
> +++ b/package/thrift/thrift-01-libevent-cross.patch
> @@ -0,0 +1,16 @@
> +Make it cross-compile happy the hard way, there's no clean way.
> +
> +Signed-off-by: Gustavo Zacarias <gustavo at zacarias.com.ar>
> +
> +diff -Nura thrift-0.9.1.orig/aclocal/ax_lib_event.m4 
thrift-0.9.1/aclocal/ax_lib_event.m4
> +--- thrift-0.9.1.orig/aclocal/ax_lib_event.m4   2013-08-15 
11:04:29.000000000 -0300
> ++++ thrift-0.9.1/aclocal/ax_lib_event.m4   2013-10-07 
20:40:44.076435613 -0300
> +@@ -75,7 +75,7 @@
> +           AC_LANG_PUSH([C])
> +           dnl This can be changed to AC_LINK_IFELSE if you are 
cross-compiling,
> +           dnl but then the version cannot be checked.
> +-          AC_RUN_IFELSE([AC_LANG_PROGRAM([[
> ++          AC_LINK_IFELSE([AC_LANG_PROGRAM([[
> +           #include <sys/types.h>
> +           #include <event.h>
> +           ]], [[
> diff --git a/package/thrift/thrift-02-autoreconf.patch 
b/package/thrift/thrift-02-autoreconf.patch
> new file mode 100644
> index 0000000..d56212a
> --- /dev/null
> +++ b/package/thrift/thrift-02-autoreconf.patch
> @@ -0,0 +1,22 @@
> +Fillers to make autoreconf (automake) happy.
> +
> +Signed-off-by: Gustavo Zacarias <gustavo at zacarias.com.ar>
> +
> +diff -Nura thrift-0.9.1.orig/AUTHORS thrift-0.9.1/AUTHORS
> +--- thrift-0.9.1.orig/AUTHORS   1969-12-31 21:00:00.000000000 -0300
> ++++ thrift-0.9.1/AUTHORS   2013-10-07 20:45:15.745315148 -0300
> +@@ -0,0 +1,2 @@
> ++
> ++
> +diff -Nura thrift-0.9.1.orig/ChangeLog thrift-0.9.1/ChangeLog
> +--- thrift-0.9.1.orig/ChangeLog   1969-12-31 21:00:00.000000000 -0300
> ++++ thrift-0.9.1/ChangeLog   2013-10-07 20:45:23.078554836 -0300
> +@@ -0,0 +1,2 @@
> ++
> ++
> +diff -Nura thrift-0.9.1.orig/NEWS thrift-0.9.1/NEWS
> +--- thrift-0.9.1.orig/NEWS   1969-12-31 21:00:00.000000000 -0300
> ++++ thrift-0.9.1/NEWS   2013-10-07 20:45:20.351465699 -0300
> +@@ -0,0 +1,2 @@
> ++
> ++
> diff --git a/package/thrift/thrift-03-zlib-cross.patch 
b/package/thrift/thrift-03-zlib-cross.patch
> new file mode 100644
> index 0000000..3af39c4
> --- /dev/null
> +++ b/package/thrift/thrift-03-zlib-cross.patch
> @@ -0,0 +1,16 @@
> +Make zlib version detection cross-compile happy.
> +
> +Signed-off-by: Gustavo Zacarias <gustavo at zacarias.com.ar>
> +
> +diff -Nura thrift-0.9.1.orig/aclocal/ax_lib_zlib.m4 
thrift-0.9.1/aclocal/ax_lib_zlib.m4
> +--- thrift-0.9.1.orig/aclocal/ax_lib_zlib.m4   2013-08-15 
11:04:29.000000000 -0300
> ++++ thrift-0.9.1/aclocal/ax_lib_zlib.m4   2013-10-07 20:47:44.523177973 
-0300
> +@@ -73,7 +73,7 @@
> +           #   (defined in the library).
> +           AC_LANG_PUSH([C])
> +           dnl This can be changed to AC_LINK_IFELSE if you are 
cross-compiling.
> +-          AC_RUN_IFELSE([AC_LANG_PROGRAM([[
> ++          AC_LINK_IFELSE([AC_LANG_PROGRAM([[
> +           #include <zlib.h>
> +           #if ZLIB_VERNUM >= 0x$WANT_ZLIB_VERSION
> +           #else
> diff --git a/package/thrift/thrift.mk b/package/thrift/thrift.mk
> new file mode 100644
> index 0000000..53e1b97
> --- /dev/null
> +++ b/package/thrift/thrift.mk
> @@ -0,0 +1,54 @@
> 
+################################################################################
> +#
> +# thrift
> +#
> 
+################################################################################
> +
> +THRIFT_VERSION = 0.9.1
> +THRIFT_SITE = http://www.us.apache.org/dist/thrift/$(THRIFT_VERSION)
> +THRIFT_DEPENDENCIES = host-pkgconf host-thrift boost libevent openssl
> +HOST_THRIFT_DEPENDENCIES = host-boost host-libevent host-openssl 
host-pkgconf
> +THRIFT_CONF_OPT = --with-sysroot=$(STAGING_DIR) --with-tests=no \
> +   --with-boost=$(STAGING_DIR)
> +HOST_THRIFT_CONF_OPT = --with-sysroot=$(HOST_DIR) --with-tests=no
> +THRIFT_AUTORECONF = YES

Could you move the license to right below the site? It doesn't really 
matter but I guess I like to see version, site, license as the first 
things in a package. I guess there isn't any official standard to the way 
a package makefile should be in but I guess that is just my person 
preference. 

> +THRIFT_LICENSE = Apache 2.0
> +THRIFT_LICENSE_FILES = LICENSE
> +
> +ifeq ($(BR2_PREFER_STATIC_LIB),y)
> +# openssl uses zlib, so we need to explicitly link with it when static
> +THRIFT_CONF_ENV += LIBS=-lz

Shouldn't you add a dependancy on libz then?

THRIFT_DEPENDCIES += zlib

> +endif
> +
> +# Language selection
> +# The generator (host tool) works with all of them regardless
> +# This is just for the libraries / bindings
> +THRIFT_LANG_CONF_OPT += --without-csharp --without-java 
--without-erlang \
> +   --without-python --without-perl --without-php 
--without-php_extension \
> +   --without-ruby --without-haskell --without-go --without-d
> +HOST_THRIFT_CONF_OPT += $(THRIFT_LANG_CONF_OPT) --without-c_glib
> +THRIFT_CONF_OPT += $(THRIFT_LANG_CONF_OPT)
> +
> +# C bindings
> +ifeq ($(BR2_PACKAGE_LIBGLIB2),y)
> +THRIFT_DEPENDENCIES += libglib2
> +else
> +THRIFT_CONF_OPT += --without-c_glib
> +endif
> +
> +# De-hardcode THRIFT for cross compiling
> +define THRIFT_BUILD_CMDS
> +   for f in `find $(@D) -name Makefile -type f`; do \
> +      $(SED) "/^THRIFT =/d" $$f; \
> +   done
> +   $(SED) "s:top_builddir)/compiler/cpp/thrift:THRIFT):" 
$(@D)/tutorial/Makefile
> +   $(TARGET_MAKE_ENV) $(MAKE) THRIFT=$(HOST_DIR)/usr/bin/thrift -C 
$(@D)
> +endef
> +

I haven't tested this so I don't fully understand what exactly what you 
are doing here. I see that this is an autotools package but it doesn't 
appear to be building or installing using the autotools infrastructure. 
Could you please elaborate a little bit more of why exactly you can't use 
autotoools to build for this? I believe I understand what you are doing 
here but I guess I would like a few more details from you. 

Also it looks like thrift is a compiler, so wouldn't we want to have this 
available as a host tool because presumably there would be a need to to 
add custom user packages that utilize Thrift to compile their application. 
Again I haven't had time to read further what exactly thrift does but 
these are just the few things that are coming to my mind tonight.

I will try to investigate this a little bit more in the coming days (next 
week) but for now this are my initial reaction comments.

> +# Install runtime only
> +define THRIFT_INSTALL_TARGET_CMDS
> +   $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/lib DESTDIR=$(TARGET_DIR) 
install
> +endef
> +
> +$(eval $(autotools-package))
> +$(eval $(host-autotools-package))
> -- 
> 1.8.1.5

Thanks,
-Ryan




More information about the buildroot mailing list