You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by rl...@apache.org on 2016/05/18 02:50:34 UTC
[21/51] [abbrv] [partial] incubator-hawq git commit: HAWQ-735. Import
thrift-0.9.3 into depends/thirdparty/thrift folder
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/compiler/cpp/src/thrifty.yy
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/compiler/cpp/src/thrifty.yy b/depends/thirdparty/thrift/compiler/cpp/src/thrifty.yy
new file mode 100644
index 0000000..61d4231
--- /dev/null
+++ b/depends/thirdparty/thrift/compiler/cpp/src/thrifty.yy
@@ -0,0 +1,1312 @@
+%{
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Thrift parser.
+ *
+ * This parser is used on a thrift definition file.
+ *
+ */
+
+#define __STDC_LIMIT_MACROS
+#define __STDC_FORMAT_MACROS
+#include <stdio.h>
+#ifndef _MSC_VER
+#include <inttypes.h>
+#else
+#include <stdint.h>
+#endif
+#include <limits.h>
+#ifdef _MSC_VER
+#include "windows/config.h"
+#endif
+#include "main.h"
+#include "globals.h"
+#include "parse/t_program.h"
+#include "parse/t_scope.h"
+
+#ifdef _MSC_VER
+//warning C4065: switch statement contains 'default' but no 'case' labels
+#pragma warning(disable:4065)
+#endif
+
+/**
+ * This global variable is used for automatic numbering of field indices etc.
+ * when parsing the members of a struct. Field values are automatically
+ * assigned starting from -1 and working their way down.
+ */
+int y_field_val = -1;
+/**
+ * This global variable is used for automatic numbering of enum values.
+ * y_enum_val is the last value assigned; the next auto-assigned value will be
+ * y_enum_val+1, and then it continues working upwards. Explicitly specified
+ * enum values reset y_enum_val to that value.
+ */
+int32_t y_enum_val = -1;
+int g_arglist = 0;
+const int struct_is_struct = 0;
+const int struct_is_union = 1;
+
+%}
+
+/**
+ * This structure is used by the parser to hold the data types associated with
+ * various parse nodes.
+ */
+%union {
+ char* id;
+ int64_t iconst;
+ double dconst;
+ bool tbool;
+ t_doc* tdoc;
+ t_type* ttype;
+ t_base_type* tbase;
+ t_typedef* ttypedef;
+ t_enum* tenum;
+ t_enum_value* tenumv;
+ t_const* tconst;
+ t_const_value* tconstv;
+ t_struct* tstruct;
+ t_service* tservice;
+ t_function* tfunction;
+ t_field* tfield;
+ char* dtext;
+ t_field::e_req ereq;
+ t_annotation* tannot;
+ t_field_id tfieldid;
+}
+
+/**
+ * Strings identifier
+ */
+%token<id> tok_identifier
+%token<id> tok_literal
+%token<dtext> tok_doctext
+%token<id> tok_st_identifier
+
+/**
+ * Constant values
+ */
+%token<iconst> tok_int_constant
+%token<dconst> tok_dub_constant
+
+/**
+ * Header keywords
+ */
+%token tok_include
+%token tok_namespace
+%token tok_cpp_namespace
+%token tok_cpp_include
+%token tok_cpp_type
+%token tok_php_namespace
+%token tok_py_module
+%token tok_perl_package
+%token tok_java_package
+%token tok_xsd_all
+%token tok_xsd_optional
+%token tok_xsd_nillable
+%token tok_xsd_namespace
+%token tok_xsd_attrs
+%token tok_ruby_namespace
+%token tok_smalltalk_category
+%token tok_smalltalk_prefix
+%token tok_cocoa_prefix
+%token tok_csharp_namespace
+%token tok_delphi_namespace
+
+/**
+ * Base datatype keywords
+ */
+%token tok_void
+%token tok_bool
+%token tok_byte
+%token tok_string
+%token tok_binary
+%token tok_slist
+%token tok_senum
+%token tok_i16
+%token tok_i32
+%token tok_i64
+%token tok_double
+
+/**
+ * Complex type keywords
+ */
+%token tok_map
+%token tok_list
+%token tok_set
+
+/**
+ * Function modifiers
+ */
+%token tok_oneway
+
+/**
+ * Thrift language keywords
+ */
+%token tok_typedef
+%token tok_struct
+%token tok_xception
+%token tok_throws
+%token tok_extends
+%token tok_service
+%token tok_enum
+%token tok_const
+%token tok_required
+%token tok_optional
+%token tok_union
+%token tok_reference
+
+/**
+ * Grammar nodes
+ */
+
+%type<ttype> BaseType
+%type<ttype> SimpleBaseType
+%type<ttype> ContainerType
+%type<ttype> SimpleContainerType
+%type<ttype> MapType
+%type<ttype> SetType
+%type<ttype> ListType
+
+%type<tdoc> Definition
+%type<ttype> TypeDefinition
+
+%type<ttypedef> Typedef
+
+%type<ttype> TypeAnnotations
+%type<ttype> TypeAnnotationList
+%type<tannot> TypeAnnotation
+%type<id> TypeAnnotationValue
+
+%type<tfield> Field
+%type<tfieldid> FieldIdentifier
+%type<ereq> FieldRequiredness
+%type<ttype> FieldType
+%type<tconstv> FieldValue
+%type<tstruct> FieldList
+%type<tbool> FieldReference
+
+%type<tenum> Enum
+%type<tenum> EnumDefList
+%type<tenumv> EnumDef
+%type<tenumv> EnumValue
+
+%type<ttypedef> Senum
+%type<tbase> SenumDefList
+%type<id> SenumDef
+
+%type<tconst> Const
+%type<tconstv> ConstValue
+%type<tconstv> ConstList
+%type<tconstv> ConstListContents
+%type<tconstv> ConstMap
+%type<tconstv> ConstMapContents
+
+%type<iconst> StructHead
+%type<tstruct> Struct
+%type<tstruct> Xception
+%type<tservice> Service
+
+%type<tfunction> Function
+%type<ttype> FunctionType
+%type<tservice> FunctionList
+
+%type<tstruct> Throws
+%type<tservice> Extends
+%type<tbool> Oneway
+%type<tbool> XsdAll
+%type<tbool> XsdOptional
+%type<tbool> XsdNillable
+%type<tstruct> XsdAttributes
+%type<id> CppType
+
+%type<dtext> CaptureDocText
+
+%%
+
+/**
+ * Thrift Grammar Implementation.
+ *
+ * For the most part this source file works its way top down from what you
+ * might expect to find in a typical .thrift file, i.e. type definitions and
+ * namespaces up top followed by service definitions using those types.
+ */
+
+Program:
+ HeaderList DefinitionList
+ {
+ pdebug("Program -> Headers DefinitionList");
+ if((g_program_doctext_candidate != NULL) && (g_program_doctext_status != ALREADY_PROCESSED))
+ {
+ g_program->set_doc(g_program_doctext_candidate);
+ g_program_doctext_status = ALREADY_PROCESSED;
+ }
+ clear_doctext();
+ }
+
+CaptureDocText:
+ {
+ if (g_parse_mode == PROGRAM) {
+ $$ = g_doctext;
+ g_doctext = NULL;
+ } else {
+ $$ = NULL;
+ }
+ }
+
+/* TODO(dreiss): Try to DestroyDocText in all sorts or random places. */
+DestroyDocText:
+ {
+ if (g_parse_mode == PROGRAM) {
+ clear_doctext();
+ }
+ }
+
+/* We have to DestroyDocText here, otherwise it catches the doctext
+ on the first real element. */
+HeaderList:
+ HeaderList DestroyDocText Header
+ {
+ pdebug("HeaderList -> HeaderList Header");
+ }
+|
+ {
+ pdebug("HeaderList -> ");
+ }
+
+Header:
+ Include
+ {
+ pdebug("Header -> Include");
+ }
+| tok_namespace tok_identifier tok_identifier
+ {
+ pdebug("Header -> tok_namespace tok_identifier tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace($2, $3);
+ }
+ }
+| tok_namespace '*' tok_identifier
+ {
+ pdebug("Header -> tok_namespace * tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("*", $3);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_cpp_namespace tok_identifier
+ {
+ pwarning(1, "'cpp_namespace' is deprecated. Use 'namespace cpp' instead");
+ pdebug("Header -> tok_cpp_namespace tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("cpp", $2);
+ }
+ }
+| tok_cpp_include tok_literal
+ {
+ pdebug("Header -> tok_cpp_include tok_literal");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->add_cpp_include($2);
+ }
+ }
+| tok_php_namespace tok_identifier
+ {
+ pwarning(1, "'php_namespace' is deprecated. Use 'namespace php' instead");
+ pdebug("Header -> tok_php_namespace tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("php", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_py_module tok_identifier
+ {
+ pwarning(1, "'py_module' is deprecated. Use 'namespace py' instead");
+ pdebug("Header -> tok_py_module tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("py", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_perl_package tok_identifier
+ {
+ pwarning(1, "'perl_package' is deprecated. Use 'namespace perl' instead");
+ pdebug("Header -> tok_perl_namespace tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("perl", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_ruby_namespace tok_identifier
+ {
+ pwarning(1, "'ruby_namespace' is deprecated. Use 'namespace rb' instead");
+ pdebug("Header -> tok_ruby_namespace tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("rb", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_smalltalk_category tok_st_identifier
+ {
+ pwarning(1, "'smalltalk_category' is deprecated. Use 'namespace smalltalk.category' instead");
+ pdebug("Header -> tok_smalltalk_category tok_st_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("smalltalk.category", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_smalltalk_prefix tok_identifier
+ {
+ pwarning(1, "'smalltalk_prefix' is deprecated. Use 'namespace smalltalk.prefix' instead");
+ pdebug("Header -> tok_smalltalk_prefix tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("smalltalk.prefix", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_java_package tok_identifier
+ {
+ pwarning(1, "'java_package' is deprecated. Use 'namespace java' instead");
+ pdebug("Header -> tok_java_package tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("java", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_cocoa_prefix tok_identifier
+ {
+ pwarning(1, "'cocoa_prefix' is deprecated. Use 'namespace cocoa' instead");
+ pdebug("Header -> tok_cocoa_prefix tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("cocoa", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_xsd_namespace tok_literal
+ {
+ pwarning(1, "'xsd_namespace' is deprecated. Use 'namespace xsd' instead");
+ pdebug("Header -> tok_xsd_namespace tok_literal");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("cocoa", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_csharp_namespace tok_identifier
+ {
+ pwarning(1, "'csharp_namespace' is deprecated. Use 'namespace csharp' instead");
+ pdebug("Header -> tok_csharp_namespace tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("csharp", $2);
+ }
+ }
+/* TODO(dreiss): Get rid of this once everyone is using the new hotness. */
+| tok_delphi_namespace tok_identifier
+ {
+ pwarning(1, "'delphi_namespace' is deprecated. Use 'namespace delphi' instead");
+ pdebug("Header -> tok_delphi_namespace tok_identifier");
+ declare_valid_program_doctext();
+ if (g_parse_mode == PROGRAM) {
+ g_program->set_namespace("delphi", $2);
+ }
+ }
+
+Include:
+ tok_include tok_literal
+ {
+ pdebug("Include -> tok_include tok_literal");
+ declare_valid_program_doctext();
+ if (g_parse_mode == INCLUDES) {
+ std::string path = include_file(std::string($2));
+ if (!path.empty()) {
+ g_program->add_include(path, std::string($2));
+ }
+ }
+ }
+
+DefinitionList:
+ DefinitionList CaptureDocText Definition
+ {
+ pdebug("DefinitionList -> DefinitionList Definition");
+ if ($2 != NULL && $3 != NULL) {
+ $3->set_doc($2);
+ }
+ }
+|
+ {
+ pdebug("DefinitionList -> ");
+ }
+
+Definition:
+ Const
+ {
+ pdebug("Definition -> Const");
+ if (g_parse_mode == PROGRAM) {
+ g_program->add_const($1);
+ }
+ $$ = $1;
+ }
+| TypeDefinition
+ {
+ pdebug("Definition -> TypeDefinition");
+ if (g_parse_mode == PROGRAM) {
+ g_scope->add_type($1->get_name(), $1);
+ if (g_parent_scope != NULL) {
+ g_parent_scope->add_type(g_parent_prefix + $1->get_name(), $1);
+ }
+ if (! g_program->is_unique_typename($1)) {
+ yyerror("Type \"%s\" is already defined.", $1->get_name().c_str());
+ exit(1);
+ }
+ }
+ $$ = $1;
+ }
+| Service
+ {
+ pdebug("Definition -> Service");
+ if (g_parse_mode == PROGRAM) {
+ g_scope->add_service($1->get_name(), $1);
+ if (g_parent_scope != NULL) {
+ g_parent_scope->add_service(g_parent_prefix + $1->get_name(), $1);
+ }
+ g_program->add_service($1);
+ if (! g_program->is_unique_typename($1)) {
+ yyerror("Type \"%s\" is already defined.", $1->get_name().c_str());
+ exit(1);
+ }
+ }
+ $$ = $1;
+ }
+
+TypeDefinition:
+ Typedef
+ {
+ pdebug("TypeDefinition -> Typedef");
+ if (g_parse_mode == PROGRAM) {
+ g_program->add_typedef($1);
+ }
+ }
+| Enum
+ {
+ pdebug("TypeDefinition -> Enum");
+ if (g_parse_mode == PROGRAM) {
+ g_program->add_enum($1);
+ }
+ }
+| Senum
+ {
+ pdebug("TypeDefinition -> Senum");
+ if (g_parse_mode == PROGRAM) {
+ g_program->add_typedef($1);
+ }
+ }
+| Struct
+ {
+ pdebug("TypeDefinition -> Struct");
+ if (g_parse_mode == PROGRAM) {
+ g_program->add_struct($1);
+ }
+ }
+| Xception
+ {
+ pdebug("TypeDefinition -> Xception");
+ if (g_parse_mode == PROGRAM) {
+ g_program->add_xception($1);
+ }
+ }
+
+CommaOrSemicolonOptional:
+ ','
+ {}
+| ';'
+ {}
+|
+ {}
+
+Typedef:
+ tok_typedef FieldType tok_identifier TypeAnnotations CommaOrSemicolonOptional
+ {
+ pdebug("TypeDef -> tok_typedef FieldType tok_identifier");
+ validate_simple_identifier( $3);
+ t_typedef *td = new t_typedef(g_program, $2, $3);
+ $$ = td;
+ if ($4 != NULL) {
+ $$->annotations_ = $4->annotations_;
+ delete $4;
+ }
+ }
+
+Enum:
+ tok_enum tok_identifier '{' EnumDefList '}' TypeAnnotations
+ {
+ pdebug("Enum -> tok_enum tok_identifier { EnumDefList }");
+ $$ = $4;
+ validate_simple_identifier( $2);
+ $$->set_name($2);
+ if ($6 != NULL) {
+ $$->annotations_ = $6->annotations_;
+ delete $6;
+ }
+
+ // make constants for all the enum values
+ if (g_parse_mode == PROGRAM) {
+ const std::vector<t_enum_value*>& enum_values = $$->get_constants();
+ std::vector<t_enum_value*>::const_iterator c_iter;
+ for (c_iter = enum_values.begin(); c_iter != enum_values.end(); ++c_iter) {
+ std::string const_name = $$->get_name() + "." + (*c_iter)->get_name();
+ t_const_value* const_val = new t_const_value((*c_iter)->get_value());
+ const_val->set_enum($$);
+ g_scope->add_constant(const_name, new t_const(g_type_i32, (*c_iter)->get_name(), const_val));
+ if (g_parent_scope != NULL) {
+ g_parent_scope->add_constant(g_parent_prefix + const_name, new t_const(g_type_i32, (*c_iter)->get_name(), const_val));
+ }
+ }
+ }
+ }
+
+EnumDefList:
+ EnumDefList EnumDef
+ {
+ pdebug("EnumDefList -> EnumDefList EnumDef");
+ $$ = $1;
+ $$->append($2);
+ }
+|
+ {
+ pdebug("EnumDefList -> ");
+ $$ = new t_enum(g_program);
+ y_enum_val = -1;
+ }
+
+EnumDef:
+ CaptureDocText EnumValue TypeAnnotations CommaOrSemicolonOptional
+ {
+ pdebug("EnumDef -> EnumValue");
+ $$ = $2;
+ if ($1 != NULL) {
+ $$->set_doc($1);
+ }
+ if ($3 != NULL) {
+ $$->annotations_ = $3->annotations_;
+ delete $3;
+ }
+ }
+
+EnumValue:
+ tok_identifier '=' tok_int_constant
+ {
+ pdebug("EnumValue -> tok_identifier = tok_int_constant");
+ if ($3 < INT32_MIN || $3 > INT32_MAX) {
+ // Note: this used to be just a warning. However, since thrift always
+ // treats enums as i32 values, I'm changing it to a fatal error.
+ // I doubt this will affect many people, but users who run into this
+ // will have to update their thrift files to manually specify the
+ // truncated i32 value that thrift has always been using anyway.
+ failure("64-bit value supplied for enum %s will be truncated.", $1);
+ }
+ y_enum_val = static_cast<int32_t>($3);
+ $$ = new t_enum_value($1, y_enum_val);
+ }
+ |
+ tok_identifier
+ {
+ pdebug("EnumValue -> tok_identifier");
+ validate_simple_identifier( $1);
+ if (y_enum_val == INT32_MAX) {
+ failure("enum value overflow at enum %s", $1);
+ }
+ ++y_enum_val;
+ $$ = new t_enum_value($1, y_enum_val);
+ }
+
+Senum:
+ tok_senum tok_identifier '{' SenumDefList '}' TypeAnnotations
+ {
+ pdebug("Senum -> tok_senum tok_identifier { SenumDefList }");
+ validate_simple_identifier( $2);
+ $$ = new t_typedef(g_program, $4, $2);
+ if ($6 != NULL) {
+ $$->annotations_ = $6->annotations_;
+ delete $6;
+ }
+ }
+
+SenumDefList:
+ SenumDefList SenumDef
+ {
+ pdebug("SenumDefList -> SenumDefList SenumDef");
+ $$ = $1;
+ $$->add_string_enum_val($2);
+ }
+|
+ {
+ pdebug("SenumDefList -> ");
+ $$ = new t_base_type("string", t_base_type::TYPE_STRING);
+ $$->set_string_enum(true);
+ }
+
+SenumDef:
+ tok_literal CommaOrSemicolonOptional
+ {
+ pdebug("SenumDef -> tok_literal");
+ $$ = $1;
+ }
+
+Const:
+ tok_const FieldType tok_identifier '=' ConstValue CommaOrSemicolonOptional
+ {
+ pdebug("Const -> tok_const FieldType tok_identifier = ConstValue");
+ if (g_parse_mode == PROGRAM) {
+ validate_simple_identifier( $3);
+ g_scope->resolve_const_value($5, $2);
+ $$ = new t_const($2, $3, $5);
+ validate_const_type($$);
+
+ g_scope->add_constant($3, $$);
+ if (g_parent_scope != NULL) {
+ g_parent_scope->add_constant(g_parent_prefix + $3, $$);
+ }
+ } else {
+ $$ = NULL;
+ }
+ }
+
+ConstValue:
+ tok_int_constant
+ {
+ pdebug("ConstValue => tok_int_constant");
+ $$ = new t_const_value();
+ $$->set_integer($1);
+ if (!g_allow_64bit_consts && ($1 < INT32_MIN || $1 > INT32_MAX)) {
+ pwarning(1, "64-bit constant \"%" PRIi64"\" may not work in all languages.\n", $1);
+ }
+ }
+| tok_dub_constant
+ {
+ pdebug("ConstValue => tok_dub_constant");
+ $$ = new t_const_value();
+ $$->set_double($1);
+ }
+| tok_literal
+ {
+ pdebug("ConstValue => tok_literal");
+ $$ = new t_const_value($1);
+ }
+| tok_identifier
+ {
+ pdebug("ConstValue => tok_identifier");
+ $$ = new t_const_value();
+ $$->set_identifier($1);
+ }
+| ConstList
+ {
+ pdebug("ConstValue => ConstList");
+ $$ = $1;
+ }
+| ConstMap
+ {
+ pdebug("ConstValue => ConstMap");
+ $$ = $1;
+ }
+
+ConstList:
+ '[' ConstListContents ']'
+ {
+ pdebug("ConstList => [ ConstListContents ]");
+ $$ = $2;
+ }
+
+ConstListContents:
+ ConstListContents ConstValue CommaOrSemicolonOptional
+ {
+ pdebug("ConstListContents => ConstListContents ConstValue CommaOrSemicolonOptional");
+ $$ = $1;
+ $$->add_list($2);
+ }
+|
+ {
+ pdebug("ConstListContents =>");
+ $$ = new t_const_value();
+ $$->set_list();
+ }
+
+ConstMap:
+ '{' ConstMapContents '}'
+ {
+ pdebug("ConstMap => { ConstMapContents }");
+ $$ = $2;
+ }
+
+ConstMapContents:
+ ConstMapContents ConstValue ':' ConstValue CommaOrSemicolonOptional
+ {
+ pdebug("ConstMapContents => ConstMapContents ConstValue CommaOrSemicolonOptional");
+ $$ = $1;
+ $$->add_map($2, $4);
+ }
+|
+ {
+ pdebug("ConstMapContents =>");
+ $$ = new t_const_value();
+ $$->set_map();
+ }
+
+StructHead:
+ tok_struct
+ {
+ $$ = struct_is_struct;
+ }
+| tok_union
+ {
+ $$ = struct_is_union;
+ }
+
+Struct:
+ StructHead tok_identifier XsdAll '{' FieldList '}' TypeAnnotations
+ {
+ pdebug("Struct -> tok_struct tok_identifier { FieldList }");
+ validate_simple_identifier( $2);
+ $5->set_xsd_all($3);
+ $5->set_union($1 == struct_is_union);
+ $$ = $5;
+ $$->set_name($2);
+ if ($7 != NULL) {
+ $$->annotations_ = $7->annotations_;
+ delete $7;
+ }
+ }
+
+XsdAll:
+ tok_xsd_all
+ {
+ $$ = true;
+ }
+|
+ {
+ $$ = false;
+ }
+
+XsdOptional:
+ tok_xsd_optional
+ {
+ $$ = true;
+ }
+|
+ {
+ $$ = false;
+ }
+
+XsdNillable:
+ tok_xsd_nillable
+ {
+ $$ = true;
+ }
+|
+ {
+ $$ = false;
+ }
+
+XsdAttributes:
+ tok_xsd_attrs '{' FieldList '}'
+ {
+ $$ = $3;
+ }
+|
+ {
+ $$ = NULL;
+ }
+
+Xception:
+ tok_xception tok_identifier '{' FieldList '}' TypeAnnotations
+ {
+ pdebug("Xception -> tok_xception tok_identifier { FieldList }");
+ validate_simple_identifier( $2);
+ $4->set_name($2);
+ $4->set_xception(true);
+ $$ = $4;
+ if ($6 != NULL) {
+ $$->annotations_ = $6->annotations_;
+ delete $6;
+ }
+ }
+
+Service:
+ tok_service tok_identifier Extends '{' FlagArgs FunctionList UnflagArgs '}' TypeAnnotations
+ {
+ pdebug("Service -> tok_service tok_identifier { FunctionList }");
+ validate_simple_identifier( $2);
+ $$ = $6;
+ $$->set_name($2);
+ $$->set_extends($3);
+ if ($9 != NULL) {
+ $$->annotations_ = $9->annotations_;
+ delete $9;
+ }
+ }
+
+FlagArgs:
+ {
+ g_arglist = 1;
+ }
+
+UnflagArgs:
+ {
+ g_arglist = 0;
+ }
+
+Extends:
+ tok_extends tok_identifier
+ {
+ pdebug("Extends -> tok_extends tok_identifier");
+ $$ = NULL;
+ if (g_parse_mode == PROGRAM) {
+ $$ = g_scope->get_service($2);
+ if ($$ == NULL) {
+ yyerror("Service \"%s\" has not been defined.", $2);
+ exit(1);
+ }
+ }
+ }
+|
+ {
+ $$ = NULL;
+ }
+
+FunctionList:
+ FunctionList Function
+ {
+ pdebug("FunctionList -> FunctionList Function");
+ $$ = $1;
+ $1->add_function($2);
+ }
+|
+ {
+ pdebug("FunctionList -> ");
+ $$ = new t_service(g_program);
+ }
+
+Function:
+ CaptureDocText Oneway FunctionType tok_identifier '(' FieldList ')' Throws TypeAnnotations CommaOrSemicolonOptional
+ {
+ validate_simple_identifier( $4);
+ $6->set_name(std::string($4) + "_args");
+ $$ = new t_function($3, $4, $6, $8, $2);
+ if ($1 != NULL) {
+ $$->set_doc($1);
+ }
+ if ($9 != NULL) {
+ $$->annotations_ = $9->annotations_;
+ delete $9;
+ }
+ }
+
+Oneway:
+ tok_oneway
+ {
+ $$ = true;
+ }
+|
+ {
+ $$ = false;
+ }
+
+Throws:
+ tok_throws '(' FieldList ')'
+ {
+ pdebug("Throws -> tok_throws ( FieldList )");
+ $$ = $3;
+ if (g_parse_mode == PROGRAM && !validate_throws($$)) {
+ yyerror("Throws clause may not contain non-exception types");
+ exit(1);
+ }
+ }
+|
+ {
+ $$ = new t_struct(g_program);
+ }
+
+FieldList:
+ FieldList Field
+ {
+ pdebug("FieldList -> FieldList , Field");
+ $$ = $1;
+ if (!($$->append($2))) {
+ yyerror("\"%d: %s\" - field identifier/name has already been used", $2->get_key(), $2->get_name().c_str());
+ exit(1);
+ }
+ }
+|
+ {
+ pdebug("FieldList -> ");
+ y_field_val = -1;
+ $$ = new t_struct(g_program);
+ }
+
+Field:
+ CaptureDocText FieldIdentifier FieldRequiredness FieldType FieldReference tok_identifier FieldValue XsdOptional XsdNillable XsdAttributes TypeAnnotations CommaOrSemicolonOptional
+ {
+ pdebug("tok_int_constant : Field -> FieldType tok_identifier");
+ if ($2.auto_assigned) {
+ pwarning(1, "No field key specified for %s, resulting protocol may have conflicts or not be backwards compatible!\n", $6);
+ if (g_strict >= 192) {
+ yyerror("Implicit field keys are deprecated and not allowed with -strict");
+ exit(1);
+ }
+ }
+ validate_simple_identifier($6);
+ $$ = new t_field($4, $6, $2.value);
+ $$->set_reference($5);
+ $$->set_req($3);
+ if ($7 != NULL) {
+ g_scope->resolve_const_value($7, $4);
+ validate_field_value($$, $7);
+ $$->set_value($7);
+ }
+ $$->set_xsd_optional($8);
+ $$->set_xsd_nillable($9);
+ if ($1 != NULL) {
+ $$->set_doc($1);
+ }
+ if ($10 != NULL) {
+ $$->set_xsd_attrs($10);
+ }
+ if ($11 != NULL) {
+ $$->annotations_ = $11->annotations_;
+ delete $11;
+ }
+ }
+
+FieldIdentifier:
+ tok_int_constant ':'
+ {
+ if ($1 <= 0) {
+ if (g_allow_neg_field_keys) {
+ /*
+ * g_allow_neg_field_keys exists to allow users to add explicitly
+ * specified key values to old .thrift files without breaking
+ * protocol compatibility.
+ */
+ if ($1 != y_field_val) {
+ /*
+ * warn if the user-specified negative value isn't what
+ * thrift would have auto-assigned.
+ */
+ pwarning(1, "Nonpositive field key (%" PRIi64") differs from what would be "
+ "auto-assigned by thrift (%d).\n", $1, y_field_val);
+ }
+ /*
+ * Leave $1 as-is, and update y_field_val to be one less than $1.
+ * The FieldList parsing will catch any duplicate key values.
+ */
+ y_field_val = static_cast<int32_t>($1 - 1);
+ $$.value = static_cast<int32_t>($1);
+ $$.auto_assigned = false;
+ } else {
+ pwarning(1, "Nonpositive value (%d) not allowed as a field key.\n",
+ $1);
+ $$.value = y_field_val--;
+ $$.auto_assigned = true;
+ }
+ } else {
+ $$.value = static_cast<int32_t>($1);
+ $$.auto_assigned = false;
+ }
+ }
+|
+ {
+ $$.value = y_field_val--;
+ $$.auto_assigned = true;
+ }
+
+FieldReference:
+ tok_reference
+ {
+ $$ = true;
+ }
+|
+ {
+ $$ = false;
+ }
+
+FieldRequiredness:
+ tok_required
+ {
+ $$ = t_field::T_REQUIRED;
+ }
+| tok_optional
+ {
+ if (g_arglist) {
+ if (g_parse_mode == PROGRAM) {
+ pwarning(1, "optional keyword is ignored in argument lists.\n");
+ }
+ $$ = t_field::T_OPT_IN_REQ_OUT;
+ } else {
+ $$ = t_field::T_OPTIONAL;
+ }
+ }
+|
+ {
+ $$ = t_field::T_OPT_IN_REQ_OUT;
+ }
+
+FieldValue:
+ '=' ConstValue
+ {
+ if (g_parse_mode == PROGRAM) {
+ $$ = $2;
+ } else {
+ $$ = NULL;
+ }
+ }
+|
+ {
+ $$ = NULL;
+ }
+
+FunctionType:
+ FieldType
+ {
+ pdebug("FunctionType -> FieldType");
+ $$ = $1;
+ }
+| tok_void
+ {
+ pdebug("FunctionType -> tok_void");
+ $$ = g_type_void;
+ }
+
+FieldType:
+ tok_identifier
+ {
+ pdebug("FieldType -> tok_identifier");
+ if (g_parse_mode == INCLUDES) {
+ // Ignore identifiers in include mode
+ $$ = NULL;
+ } else {
+ // Lookup the identifier in the current scope
+ $$ = g_scope->get_type($1);
+ if ($$ == NULL) {
+ /*
+ * Either this type isn't yet declared, or it's never
+ declared. Either way allow it and we'll figure it out
+ during generation.
+ */
+ $$ = new t_typedef(g_program, $1, true);
+ }
+ }
+ }
+| BaseType
+ {
+ pdebug("FieldType -> BaseType");
+ $$ = $1;
+ }
+| ContainerType
+ {
+ pdebug("FieldType -> ContainerType");
+ $$ = $1;
+ }
+
+BaseType: SimpleBaseType TypeAnnotations
+ {
+ pdebug("BaseType -> SimpleBaseType TypeAnnotations");
+ if ($2 != NULL) {
+ $$ = new t_base_type(*static_cast<t_base_type*>($1));
+ $$->annotations_ = $2->annotations_;
+ delete $2;
+ } else {
+ $$ = $1;
+ }
+ }
+
+SimpleBaseType:
+ tok_string
+ {
+ pdebug("BaseType -> tok_string");
+ $$ = g_type_string;
+ }
+| tok_binary
+ {
+ pdebug("BaseType -> tok_binary");
+ $$ = g_type_binary;
+ }
+| tok_slist
+ {
+ pdebug("BaseType -> tok_slist");
+ $$ = g_type_slist;
+ }
+| tok_bool
+ {
+ pdebug("BaseType -> tok_bool");
+ $$ = g_type_bool;
+ }
+| tok_byte
+ {
+ pdebug("BaseType -> tok_byte");
+ $$ = g_type_byte;
+ }
+| tok_i16
+ {
+ pdebug("BaseType -> tok_i16");
+ $$ = g_type_i16;
+ }
+| tok_i32
+ {
+ pdebug("BaseType -> tok_i32");
+ $$ = g_type_i32;
+ }
+| tok_i64
+ {
+ pdebug("BaseType -> tok_i64");
+ $$ = g_type_i64;
+ }
+| tok_double
+ {
+ pdebug("BaseType -> tok_double");
+ $$ = g_type_double;
+ }
+
+ContainerType: SimpleContainerType TypeAnnotations
+ {
+ pdebug("ContainerType -> SimpleContainerType TypeAnnotations");
+ $$ = $1;
+ if ($2 != NULL) {
+ $$->annotations_ = $2->annotations_;
+ delete $2;
+ }
+ }
+
+SimpleContainerType:
+ MapType
+ {
+ pdebug("SimpleContainerType -> MapType");
+ $$ = $1;
+ }
+| SetType
+ {
+ pdebug("SimpleContainerType -> SetType");
+ $$ = $1;
+ }
+| ListType
+ {
+ pdebug("SimpleContainerType -> ListType");
+ $$ = $1;
+ }
+
+MapType:
+ tok_map CppType '<' FieldType ',' FieldType '>'
+ {
+ pdebug("MapType -> tok_map <FieldType, FieldType>");
+ $$ = new t_map($4, $6);
+ if ($2 != NULL) {
+ ((t_container*)$$)->set_cpp_name(std::string($2));
+ }
+ }
+
+SetType:
+ tok_set CppType '<' FieldType '>'
+ {
+ pdebug("SetType -> tok_set<FieldType>");
+ $$ = new t_set($4);
+ if ($2 != NULL) {
+ ((t_container*)$$)->set_cpp_name(std::string($2));
+ }
+ }
+
+ListType:
+ tok_list '<' FieldType '>' CppType
+ {
+ pdebug("ListType -> tok_list<FieldType>");
+ check_for_list_of_bytes($3);
+ $$ = new t_list($3);
+ if ($5 != NULL) {
+ ((t_container*)$$)->set_cpp_name(std::string($5));
+ }
+ }
+
+CppType:
+ tok_cpp_type tok_literal
+ {
+ $$ = $2;
+ }
+|
+ {
+ $$ = NULL;
+ }
+
+TypeAnnotations:
+ '(' TypeAnnotationList ')'
+ {
+ pdebug("TypeAnnotations -> ( TypeAnnotationList )");
+ $$ = $2;
+ }
+|
+ {
+ $$ = NULL;
+ }
+
+TypeAnnotationList:
+ TypeAnnotationList TypeAnnotation
+ {
+ pdebug("TypeAnnotationList -> TypeAnnotationList , TypeAnnotation");
+ $$ = $1;
+ $$->annotations_[$2->key] = $2->val;
+ delete $2;
+ }
+|
+ {
+ /* Just use a dummy structure to hold the annotations. */
+ $$ = new t_struct(g_program);
+ }
+
+TypeAnnotation:
+ tok_identifier TypeAnnotationValue CommaOrSemicolonOptional
+ {
+ pdebug("TypeAnnotation -> TypeAnnotationValue");
+ $$ = new t_annotation;
+ $$->key = $1;
+ $$->val = $2;
+ }
+
+TypeAnnotationValue:
+ '=' tok_literal
+ {
+ pdebug("TypeAnnotationValue -> = tok_literal");
+ $$ = $2;
+ }
+|
+ {
+ pdebug("TypeAnnotationValue ->");
+ $$ = strdup("1");
+ }
+
+%%
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/compiler/cpp/src/windows/config.h
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/compiler/cpp/src/windows/config.h b/depends/thirdparty/thrift/compiler/cpp/src/windows/config.h
new file mode 100644
index 0000000..a600080
--- /dev/null
+++ b/depends/thirdparty/thrift/compiler/cpp/src/windows/config.h
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef _THRIFT_WINDOWS_CONFIG_H_
+#define _THRIFT_WINDOWS_CONFIG_H_ 1
+
+#if defined(_MSC_VER) && (_MSC_VER > 1200)
+#pragma once
+#endif // _MSC_VER
+
+#ifndef _WIN32
+#error "This is a Windows header only"
+#endif
+
+#include <io.h>
+#include <stdlib.h>
+#include <direct.h>
+
+#define strtoll(begin_ptr, end_ptr, length) _strtoi64(begin_ptr, end_ptr, length)
+
+#define PRIu64 "I64d"
+#define PRIi64 "I64d"
+
+// squelch deprecation warnings
+#pragma warning(disable : 4996)
+// squelch bool conversion performance warning
+#pragma warning(disable : 4800)
+
+#endif // _THRIFT_WINDOWS_CONFIG_H_
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/compiler/cpp/src/windows/version.h.in
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/compiler/cpp/src/windows/version.h.in b/depends/thirdparty/thrift/compiler/cpp/src/windows/version.h.in
new file mode 100644
index 0000000..00ebca6
--- /dev/null
+++ b/depends/thirdparty/thrift/compiler/cpp/src/windows/version.h.in
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef _THRIFT_WINDOWS_VERSION_H_
+#define _THRIFT_WINDOWS_VERSION_H_ 1
+
+#if defined(_MSC_VER) && (_MSC_VER > 1200)
+#pragma once
+#endif // _MSC_VER
+
+#ifndef _WIN32
+#error "This is a Windows header only"
+#endif
+
+#define THRIFT_VERSION "@PACKAGE_VERSION@"
+
+#endif // _THRIFT_WINDOWS_VERSION_H_
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/compiler/cpp/version.h.in
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/compiler/cpp/version.h.in b/depends/thirdparty/thrift/compiler/cpp/version.h.in
new file mode 100644
index 0000000..5770ec9
--- /dev/null
+++ b/depends/thirdparty/thrift/compiler/cpp/version.h.in
@@ -0,0 +1 @@
+#define THRIFT_VERSION "@PACKAGE_VERSION@"
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/composer.json
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/composer.json b/depends/thirdparty/thrift/composer.json
new file mode 100644
index 0000000..0f22b76
--- /dev/null
+++ b/depends/thirdparty/thrift/composer.json
@@ -0,0 +1,30 @@
+{
+ "name": "apache/thrift",
+ "description": "Apache Thrift RPC system",
+ "homepage": "http://thrift.apache.org/",
+ "type": "library",
+ "license": "Apache-2.0",
+ "authors": [
+ {
+ "name": "Apache Thrift Developers",
+ "email": "dev@thrift.apache.org",
+ "homepage": "http://thrift.apache.org"
+ }
+ ],
+ "support": {
+ "email": "dev@thrift.apache.org",
+ "issues": "https://issues.apache.org/jira/browse/THRIFT"
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "autoload": {
+ "psr-0": {"Thrift": "lib/php/lib/"}
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/configure.ac
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/configure.ac b/depends/thirdparty/thrift/configure.ac
new file mode 100755
index 0000000..18e3233
--- /dev/null
+++ b/depends/thirdparty/thrift/configure.ac
@@ -0,0 +1,891 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+AC_PREREQ(2.65)
+AC_CONFIG_MACRO_DIR([./aclocal])
+
+AC_INIT([thrift], [0.9.3])
+
+AC_CONFIG_AUX_DIR([.])
+
+AM_INIT_AUTOMAKE([1.13 subdir-objects tar-ustar])
+PKG_PROG_PKG_CONFIG
+
+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"])
+
+AC_ARG_VAR([JAVA_PREFIX], [Prefix for installing the Java lib jar.
+ (Normal --prefix is ignored for Java because
+ Java has different conventions.)
+ Default = "/usr/local/lib"])
+AS_IF([test "x$JAVA_PREFIX" = x], [JAVA_PREFIX="/usr/local/lib"])
+
+AC_ARG_VAR([RUBY_PREFIX], [Prefix for installing Ruby modules.
+ (Normal --prefix is ignored for Ruby because
+ Ruby has different conventions.)
+ Default = none, let ruby setup decide])
+
+AC_ARG_VAR([PHP_PREFIX], [Prefix for installing PHP modules.
+ (Normal --prefix is ignored for PHP because
+ PHP has different conventions.)
+ Default = "/usr/lib/php"])
+AS_IF([test "x$PHP_PREFIX" = x], [PHP_PREFIX="/usr/lib/php"])
+
+AC_ARG_VAR([PHP_CONFIG_PREFIX],
+ [Prefix for installing PHP extension module .ini file.
+ (Normal --prefix is ignored for PHP because PHP has
+ different conventions.)
+ Default = "/etc/php.d"])
+AS_IF([test "x$PHP_CONFIG_PREFIX" = x], [PHP_CONFIG_PREFIX="/etc/php.d"])
+
+AC_ARG_VAR([INSTALLDIRS], [When installing Perl modules, specifies which
+ of the sets of installation directories
+ to choose: perl, site or vendor.
+ Default = "vendor"])
+AS_IF([test "x$INSTALLDIRS" = x], [INSTALLDIRS="vendor"])
+
+AC_ARG_VAR([PERL_PREFIX], [Prefix for installing Perl modules.
+ (Normal --prefix is ignored for Perl because
+ Perl has different conventions.)
+ Ignored, when INSTALLDIRS set to site or vendor.
+ Default = "/usr/local/lib"])
+AS_IF([test "x$PERL_PREFIX" = x], [PERL_PREFIX="/usr/local"])
+
+AC_ARG_VAR([CABAL_CONFIGURE_FLAGS],
+ [Extra flags to pass to cabal: "cabal Setup.lhs configure $CABAL_CONFIGURE_FLAGS".
+ (Typically used to set --user or force --global.)])
+
+AC_SUBST(CABAL_CONFIGURE_FLAGS)
+
+AC_ARG_VAR([D_IMPORT_PREFIX], [Prefix for installing D modules.
+ [INCLUDEDIR/d2]])
+AS_IF([test "x$D_IMPORT_PREFIX" = x], [D_IMPORT_PREFIX="${includedir}/d2"])
+
+AC_ARG_VAR([DMD_LIBEVENT_FLAGS], [DMD flags for linking libevent (auto-detected if not set).])
+AC_ARG_VAR([DMD_OPENSSL_FLAGS], [DMD flags for linking OpenSSL (auto-detected if not set).])
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_CXX
+AC_PROG_INSTALL
+AC_PROG_LIBTOOL
+AC_PROG_MAKE_SET
+AC_PROG_BISON(2.5)
+AC_PROG_YACC
+AC_PROG_LEX
+AM_PROG_LEX
+AC_PROG_LN_S
+AC_PROG_MKDIR_P
+AC_PROG_AWK
+AC_PROG_RANLIB
+
+AC_LANG([C++])
+AX_CXX_COMPILE_STDCXX_11([noext], [optional])
+
+AM_EXTRA_RECURSIVE_TARGETS([style])
+AC_SUBST(CPPSTYLE_CMD, 'find . -type f \( -iname "*.h" -or -iname "*.cpp" -or -iname "*.cc" -or -iname "*.tcc" \) -printf "Reformatting: %h/%f\n" -exec clang-format -i {} \;')
+
+AC_ARG_ENABLE([libs],
+ AS_HELP_STRING([--enable-libs], [build the Apache Thrift libraries [default=yes]]),
+ [], enable_libs=yes
+)
+have_libs=yes
+if test "$enable_libs" = "no"; then
+ have_libs="no"
+ with_cpp="no"
+ with_c_glib="no"
+ with_java="no"
+ with_csharp="no"
+ with_python="no"
+ with_ruby="no"
+ with_haskell="no"
+ with_haxe="no"
+ with_perl="no"
+ with_php="no"
+ with_php_extension="no"
+ with_erlang="no"
+ with_go="no"
+ with_d="no"
+ with_nodejs="no"
+ with_lua="no"
+fi
+
+
+AX_THRIFT_LIB(cpp, [C++], yes)
+have_cpp=no
+if test "$with_cpp" = "yes"; then
+ AX_BOOST_BASE([1.53.0])
+ if test "x$succeeded" = "xyes" ; then
+ AC_SUBST([BOOST_LIB_DIR], [$(echo "$BOOST_LDFLAGS" | sed -e 's/^\-L//')])
+ AC_SUBST([BOOST_CHRONO_LDADD], [$(echo "$BOOST_LIB_DIR/libboost_chrono.a")])
+ AC_SUBST([BOOST_FILESYSTEM_LDADD], [$(echo "$BOOST_LIB_DIR/libboost_filesystem.a")])
+ AC_SUBST([BOOST_SYSTEM_LDADD], [$(echo "$BOOST_LIB_DIR/libboost_system.a")])
+ AC_SUBST([BOOST_TEST_LDADD], [$(echo "$BOOST_LIB_DIR/libboost_unit_test_framework.a")])
+ AC_SUBST([BOOST_THREAD_LDADD], [$(echo "$BOOST_LIB_DIR/libboost_thread.a")])
+ have_cpp="yes"
+ fi
+
+ AX_CHECK_OPENSSL()
+
+ AX_LIB_EVENT([1.0])
+ have_libevent=$success
+
+ AX_LIB_ZLIB([1.2.3])
+ have_zlib=$success
+
+ AX_THRIFT_LIB(qt4, [Qt], yes)
+ have_qt=no
+ if test "$with_qt4" = "yes"; then
+ PKG_CHECK_MODULES([QT], [QtCore >= 4.3, QtNetwork >= 4.3], have_qt=yes, have_qt=no)
+ fi
+ if test "$have_qt" = "yes"; then
+ AC_PATH_PROGS([QT_MOC], [moc-qt4 moc], "fail")
+ if test "$QT_MOC" = "fail"; then
+ have_qt=no
+ fi
+ fi
+
+ AX_THRIFT_LIB(qt5, [Qt5], yes)
+ have_qt5=no
+ qt_reduce_reloc=""
+ if test "$with_qt5" = "yes"; then
+ PKG_CHECK_MODULES([QT5], [Qt5Core >= 5.0, Qt5Network >= 5.0],
+ [have_qt5=yes;qt_reduce_reloc=`$PKG_CONFIG --variable=qt_config Qt5Core | grep "reduce_relocations"`],
+ [have_qt5=no])
+ fi
+ if test "$have_qt5" = "yes"; then
+ AC_PATH_PROGS([QT5_MOC], [moc-qt5 moc], "fail")
+ if test "$QT5_MOC" = "fail"; then
+ have_qt5=no
+ fi
+ fi
+fi
+AM_CONDITIONAL([WITH_CPP], [test "$have_cpp" = "yes"])
+AM_CONDITIONAL([AMX_HAVE_LIBEVENT], [test "$have_libevent" = "yes"])
+AM_CONDITIONAL([AMX_HAVE_ZLIB], [test "$have_zlib" = "yes"])
+AM_CONDITIONAL([AMX_HAVE_QT], [test "$have_qt" = "yes"])
+AM_CONDITIONAL([AMX_HAVE_QT5], [test "$have_qt5" = "yes"])
+AM_CONDITIONAL([QT5_REDUCE_RELOCATIONS], [test "x$qt_reduce_reloc" != "x"])
+
+AX_THRIFT_LIB(c_glib, [C (GLib)], yes)
+if test "$with_c_glib" = "yes"; then
+ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.0], have_glib2=yes, have_glib2=no)
+ PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.0], have_gobject2=yes, have_gobject2=no)
+ if test "$have_glib2" = "yes" -a "$have_gobject2" = "yes" ; then
+ have_c_glib="yes"
+ fi
+fi
+AM_CONDITIONAL(WITH_C_GLIB, [test "$have_glib2" = "yes" -a "$have_gobject2" = "yes"])
+
+AX_THRIFT_LIB(csharp, [C#], yes)
+if test "$with_csharp" = "yes"; then
+ PKG_CHECK_MODULES(MONO, mono >= 2.11.0, mono_2_11=yes, mono_2_11=no)
+ if test "$mono_2_11" == "yes"; then
+ AC_PATH_PROG([MCS], [mcs])
+ if test "x$MCS" != "x"; then
+ mono_mcs="yes"
+ fi
+ fi
+ PKG_CHECK_MODULES(MONO, mono >= 2.0.0, net_3_5=yes, net_3_5=no)
+ PKG_CHECK_MODULES(MONO, mono >= 1.2.4, have_mono=yes, have_mono=no)
+ if test "$have_mono" = "yes" ; then
+ have_csharp="yes"
+ fi
+fi
+AM_CONDITIONAL(WITH_MONO, [test "$have_csharp" = "yes"])
+AM_CONDITIONAL(NET_2_0, [test "$net_3_5" = "no"])
+AM_CONDITIONAL(MONO_MCS, [test "$mono_mcs" = "yes"])
+
+AX_THRIFT_LIB(java, [Java], yes)
+if test "$with_java" = "yes"; then
+ AX_JAVAC_AND_JAVA
+ AC_PATH_PROG([ANT], [ant])
+ AX_CHECK_ANT_VERSION($ANT, 1.7)
+ AC_SUBST(CLASSPATH)
+ AC_SUBST(ANT_FLAGS)
+ if test "x$JAVA" != "x" && test "x$JAVAC" != "x" && test "x$ANT" != "x" ; then
+ have_java="yes"
+ fi
+fi
+AM_CONDITIONAL([WITH_JAVA], [test "$have_java" = "yes"])
+
+AX_THRIFT_LIB(erlang, [Erlang], yes)
+if test "$with_erlang" = "yes"; then
+ AC_ERLANG_PATH_ERL
+ AC_ERLANG_PATH_ERLC
+ if test -n "$ERLC" ; then
+ AC_ERLANG_SUBST_LIB_DIR
+ # Install into the detected Erlang directory instead of $libdir/erlang/lib
+ ERLANG_INSTALL_LIB_DIR="$ERLANG_LIB_DIR"
+ AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+ fi
+ if test -n "$ERL" -a -n "$ERLC" ; then
+ have_erlang="yes"
+
+ # otp_release is simply a number (like "17") for OTP17+ while "R16..." for OTP16 or less.
+ # OTP version is currently only used for running tests.
+ if $ERL -eval 'erlang:display(erlang:system_info(otp_release)),halt().' -noshell | grep "^\"R" >/dev/null; then
+ erlang_otp16_or_less="yes"
+ fi
+ fi
+fi
+AM_CONDITIONAL(WITH_ERLANG, [test "$have_erlang" = "yes"])
+AM_CONDITIONAL(ERLANG_OTP16, [test "$erlang_otp16_or_less" = "yes"])
+
+AX_THRIFT_LIB(nodejs, [Nodejs], yes)
+have_nodejs=no
+if test "$with_nodejs" = "yes"; then
+ AC_PATH_PROGS([NODEJS], [nodejs node])
+ AC_PATH_PROG([NPM], [npm])
+ if test "x$NODEJS" != "x" -a "x$NPM" != "x"; then
+ have_nodejs="yes"
+ fi
+fi
+AM_CONDITIONAL(WITH_NODEJS, [test "$have_nodejs" = "yes"])
+AM_CONDITIONAL(HAVE_NPM, [test "x$NPM" != "x"])
+
+AX_THRIFT_LIB(lua, [Lua], yes)
+have_lua=no
+if test "$with_lua" = "yes"; then
+ AX_PROG_LUA(5.2,, have_lua="yes", have_lua="no")
+ if test "$have_lua" = "yes"; then
+ AX_LUA_HEADERS(, have_lua="no")
+ AX_LUA_LIBS(, have_lua="no")
+ fi
+fi
+AM_CONDITIONAL(WITH_LUA, [test "$have_lua" = "yes"])
+
+AX_THRIFT_LIB(python, [Python], yes)
+if test "$with_python" = "yes"; then
+ AC_PATH_PROG([TRIAL], [trial])
+ AM_PATH_PYTHON(2.4,, :)
+ if test -n "$TRIAL" && test "x$PYTHON" != "x" && test "x$PYTHON" != "x:" ; then
+ have_python="yes"
+ fi
+fi
+AM_CONDITIONAL(WITH_PYTHON, [test "$have_python" = "yes"])
+
+AX_THRIFT_LIB(perl, [Perl], yes)
+if test "$with_perl" = "yes"; then
+ AC_PATH_PROG([PERL], [perl])
+ if test -n "$PERL" ; then
+ AC_PROG_PERL_MODULES([Bit::Vector], success="yes", success="no")
+ have_perl_bit_vector="$success"
+ AC_PROG_PERL_MODULES([Class::Accessor], success="yes", success="no")
+ have_perl_class_accessor="$success"
+ fi
+ if test -n "$PERL" -a "$have_perl_bit_vector" = "yes" ; then
+ if test -n "$PERL" -a "$have_perl_class_accessor" = "yes" ; then
+ have_perl="yes"
+ fi
+ fi
+fi
+AM_CONDITIONAL(WITH_PERL, [test "$have_perl" = "yes"])
+
+AX_THRIFT_LIB(php, [PHP], yes)
+if test "$with_php" = "yes"; then
+ AC_PATH_PROG([PHP], [php])
+ if test -n "$PHP" ; then
+ have_php="yes"
+ fi
+fi
+AM_CONDITIONAL(WITH_PHP, [test "$have_php" = "yes"])
+
+AX_THRIFT_LIB(php_extension, [PHP_EXTENSION], yes)
+if test "$with_php_extension" = "yes"; then
+ if test -f "lib/php/src/ext/thrift_protocol/configure"; then
+ AC_PATH_PROG([PHP_CONFIG], [php-config])
+ if test -n "$PHP_CONFIG" ; then
+ AC_CONFIG_SUBDIRS([lib/php/src/ext/thrift_protocol])
+ have_php_extension="yes"
+ fi
+ fi
+fi
+AM_CONDITIONAL(WITH_PHP_EXTENSION, [test "$have_php_extension" = "yes"])
+
+AC_PATH_PROG([PHPUNIT], [phpunit])
+AM_CONDITIONAL(HAVE_PHPUNIT, [test "x$PHPUNIT" != "x"])
+
+AX_THRIFT_LIB(ruby, [Ruby], yes)
+have_ruby=no
+if test "$with_ruby" = "yes"; then
+ AC_PATH_PROG([RUBY], [ruby])
+ AC_PATH_PROG([BUNDLER], [bundle])
+ if test "x$RUBY" != "x" -a "x$BUNDLER" != "x"; then
+ have_ruby="yes"
+ fi
+fi
+AM_CONDITIONAL(WITH_RUBY, [test "$have_ruby" = "yes"])
+AM_CONDITIONAL(HAVE_BUNDLER, [test "x$BUNDLER" != "x"])
+
+AX_THRIFT_LIB(haskell, [Haskell], yes)
+have_haskell=no
+RUNHASKELL=true
+CABAL=true
+if test "$with_haskell" = "yes"; then
+ AC_PATH_PROG([CABAL], [cabal])
+ AC_PATH_PROG([RUNHASKELL], [runhaskell])
+ if test "x$CABAL" != "x" -a "x$RUNHASKELL" != "x"; then
+ have_haskell="yes"
+ else
+ RUNHASKELL=true
+ CABAL=true
+ fi
+fi
+AC_SUBST(CABAL)
+AC_SUBST(RUNHASKELL)
+AM_CONDITIONAL(WITH_HASKELL, [test "$have_haskell" = "yes"])
+
+AX_THRIFT_LIB(go, [Go], yes)
+if test "$with_go" = "yes"; then
+ AC_PATH_PROG([GO], [go])
+ if [[ -x "$GO" ]] ; then
+ AS_IF([test -n "$GO"],[
+ ax_go_version="1.4"
+
+ AC_MSG_CHECKING([for Go version])
+ golang_version=`$GO version 2>&1 | $SED -e 's/\(go \)\(version \)\(go\)\(@<:@0-9@:>@.@<:@0-9@:>@.@<:@0-9@:>@\)\(@<:@\*@:>@*\).*/\4/'`
+ AC_MSG_RESULT($golang_version)
+ AC_SUBST([golang_version],[$golang_version])
+ AX_COMPARE_VERSION([$ax_go_version],[le],[$golang_version],[
+ :
+ have_go="yes"
+ ],[
+ :
+ have_go="no"
+ ])
+ ],[
+ AC_MSG_WARN([could not find Go ])
+ have_go="no"
+ ])
+ fi
+fi
+AM_CONDITIONAL(WITH_GO, [test "$have_go" = "yes"])
+
+
+AX_THRIFT_LIB(haxe, [Haxe], yes)
+if test "$with_haxe" = "yes"; then
+ AC_PATH_PROG([HAXE], [haxe])
+ if [[ -x "$HAXE" ]] ; then
+ AX_PROG_HAXE_VERSION( [3.1.3], have_haxe="yes", have_haxe="no")
+ fi
+fi
+AM_CONDITIONAL(WITH_HAXE, [test "$have_haxe" = "yes"])
+
+
+AX_THRIFT_LIB(d, [D], yes)
+if test "$with_d" = "yes"; then
+ AX_DMD
+ AC_SUBST(DMD)
+ if test "x$DMD" != "x"; then
+ have_d="yes"
+ fi
+fi
+
+# Determine actual name of the generated D library for use in the command line
+# when compiling tests. This is needed because the -l<lib> syntax doesn't work
+# with OPTLINK (Windows).
+lib_prefix=lib
+lib_suffix=a
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ lib_prefix=""
+ lib_suffix=lib
+ ;;
+esac
+D_LIB_NAME="${lib_prefix}thriftd.${lib_suffix}"
+AC_SUBST(D_LIB_NAME)
+D_EVENT_LIB_NAME="${lib_prefix}thriftd-event.${lib_suffix}"
+AC_SUBST(D_EVENT_LIB_NAME)
+D_SSL_LIB_NAME="${lib_prefix}thriftd-ssl.${lib_suffix}"
+AC_SUBST(D_SSL_LIB_NAME)
+
+if test "$have_d" = "yes"; then
+ AX_CHECK_D_MODULE(deimos.event2.event)
+ have_deimos_event2=$success
+
+ with_d_event_tests="no"
+ if test "$have_deimos_event2" = "yes"; then
+ if test "x$DMD_LIBEVENT_FLAGS" = "x"; then
+ if test "$dmd_optlink" = "yes"; then
+ AC_MSG_WARN([D libevent interface found, but cannot auto-detect \
+linker flags for OPTLINK. Please set DMD_LIBEVENT_FLAGS manually.])
+ else
+ AX_LIB_EVENT([2.0])
+ if test "$success" = "yes"; then
+ DMD_LIBEVENT_FLAGS=$(echo "$LIBEVENT_LDFLAGS $LIBEVENT_LIBS" | \
+ sed -e 's/^ *//g;s/ *$//g;s/^\(.\)/-L\1/g;s/ */ -L/g')
+ with_d_event_tests="yes"
+ else
+ AC_MSG_WARN([D libevent interface present, but libevent library not found.])
+ fi
+ fi
+ else
+ with_d_event_tests="yes"
+ fi
+ fi
+
+ AX_CHECK_D_MODULE(deimos.openssl.ssl)
+ have_deimos_openssl=$success
+
+ with_d_ssl_tests="no"
+ if test "$have_deimos_openssl" = "yes"; then
+ if test "x$DMD_OPENSSL_FLAGS" = "x"; then
+ if test "$dmd_optlink" = "yes"; then
+ AC_MSG_WARN([D OpenSSL interface found, but cannot auto-detect \
+linker flags for OPTLINK. Please set DMD_OPENSSL_FLAGS manually.])
+ else
+ AX_CHECK_OPENSSL([with_d_ssl_tests="yes"])
+ if test "$with_d_ssl_tests" = "yes"; then
+ DMD_OPENSSL_FLAGS=$(echo "$OPENSSL_LDFLAGS $OPENSSL_LIBS" | \
+ sed -e 's/^ *//g;s/ *$//g;s/^\(.\)/-L\1/g;s/ */ -L/g')
+ else
+ AC_MSG_WARN([D OpenSSL interface present, but OpenSSL library not found.])
+ fi
+ fi
+ else
+ with_d_ssl_tests="yes"
+ fi
+ fi
+fi
+
+AM_CONDITIONAL(WITH_D, [test "$have_d" = "yes"])
+AM_CONDITIONAL(DMD_OPTLINK, [test "$dmd_optlink" = "yes"])
+AC_SUBST(DMD_OF_DIRSEP, "$dmd_of_dirsep")
+AM_CONDITIONAL(HAVE_DEIMOS_EVENT2, [test "$have_deimos_event2" = "yes"])
+AM_CONDITIONAL(WITH_D_EVENT_TESTS, [test "$with_d_event_tests" = "yes"])
+AC_SUBST(DMD_LIBEVENT_FLAGS)
+AM_CONDITIONAL(HAVE_DEIMOS_OPENSSL, [test "$have_deimos_openssl" = "yes"])
+AM_CONDITIONAL(WITH_D_SSL_TESTS, [test "$with_d_ssl_tests" = "yes"])
+AC_SUBST(DMD_OPENSSL_FLAGS)
+
+AC_ARG_ENABLE([tests],
+ AS_HELP_STRING([--enable-tests], [build tests [default=yes]]),
+ [], enable_tests=yes
+)
+have_tests=yes
+if test "$enable_tests" = "no"; then
+ have_tests="no"
+fi
+AM_CONDITIONAL(WITH_TESTS, [test "$have_tests" = "yes"])
+
+AC_ARG_ENABLE([tutorial],
+ AS_HELP_STRING([--enable-tutorial], [build tutorial [default=yes]]),
+ [], enable_tutorial=yes
+)
+have_tutorial=yes
+if test "$enable_tutorial" = "no"; then
+ have_tutorial="no"
+fi
+AM_CONDITIONAL(WITH_TUTORIAL, [test "$have_tutorial" = "yes"])
+
+AM_CONDITIONAL(MINGW, false)
+case "${host_os}" in
+*mingw*)
+ mingw32_support="yes"
+ AC_CHECK_HEADER(windows.h)
+ AM_CONDITIONAL(MINGW, true)
+ ;;
+*)
+ AC_ISC_POSIX
+ ;;
+esac
+
+AC_C_CONST
+AC_C_INLINE
+AC_C_VOLATILE
+
+AC_HEADER_STDBOOL
+AC_HEADER_STDC
+AC_HEADER_TIME
+AC_HEADER_SYS_WAIT
+AC_TYPE_SIGNAL
+AC_CHECK_HEADERS([arpa/inet.h])
+AC_CHECK_HEADERS([sys/param.h])
+AC_CHECK_HEADERS([fcntl.h])
+AC_CHECK_HEADERS([inttypes.h])
+AC_CHECK_HEADERS([limits.h])
+AC_CHECK_HEADERS([netdb.h])
+AC_CHECK_HEADERS([netinet/in.h])
+AC_CHECK_HEADERS([pthread.h])
+AC_CHECK_HEADERS([stddef.h])
+AC_CHECK_HEADERS([stdlib.h])
+AC_CHECK_HEADERS([sys/socket.h])
+AC_CHECK_HEADERS([sys/time.h])
+AC_CHECK_HEADERS([sys/un.h])
+AC_CHECK_HEADERS([sys/poll.h])
+AC_CHECK_HEADERS([sys/resource.h])
+AC_CHECK_HEADERS([unistd.h])
+AC_CHECK_HEADERS([libintl.h])
+AC_CHECK_HEADERS([malloc.h])
+AC_CHECK_HEADERS([openssl/ssl.h])
+AC_CHECK_HEADERS([openssl/rand.h])
+AC_CHECK_HEADERS([openssl/x509v3.h])
+AC_CHECK_HEADERS([sched.h])
+AC_CHECK_HEADERS([wchar.h])
+
+AC_CHECK_LIB(pthread, pthread_create)
+dnl NOTE(dreiss): I haven't been able to find any really solid docs
+dnl on what librt is and how it fits into various Unix systems.
+dnl My best guess is that it is where glibc stashes its implementation
+dnl of the POSIX Real-Time Extensions. This seems necessary on Linux,
+dnl and we haven't yet found a system where this is a problem.
+AC_CHECK_LIB(rt, clock_gettime)
+AC_CHECK_LIB(socket, setsockopt)
+
+if test "$have_cpp" = "yes" ; then
+# mingw toolchain used to build "Thrift Compiler for Windows"
+# does not support libcrypto, so we just check if we building the cpp library
+AC_CHECK_LIB(crypto,
+ BN_init,
+ [AC_CHECK_LIB(ssl,
+ SSL_ctrl,
+ [LIBS="-lssl -lcrypto $LIBS"],
+ [AC_MSG_ERROR(["Error: libssl required"])],
+ -lcrypto
+ )],
+ [AC_MSG_ERROR(["Error: libcrypto required."])]
+)
+fi
+
+AC_TYPE_INT16_T
+AC_TYPE_INT32_T
+AC_TYPE_INT64_T
+AC_TYPE_INT8_T
+AC_TYPE_MODE_T
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UINT16_T
+AC_TYPE_UINT32_T
+AC_TYPE_UINT64_T
+AC_TYPE_UINT8_T
+AC_CHECK_TYPES([ptrdiff_t], [], [exit 1])
+
+AC_STRUCT_TM
+
+dnl NOTE(dreiss): AI_ADDRCONFIG is not defined on OpenBSD.
+AC_CHECK_DECL([AI_ADDRCONFIG], [],
+ [AC_DEFINE([AI_ADDRCONFIG], 0,
+ [Define if the AI_ADDRCONFIG symbol is unavailable])],
+ [
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netdb.h>
+])
+
+AC_FUNC_ALLOCA
+AC_FUNC_FORK
+AC_FUNC_MALLOC
+AC_FUNC_MEMCMP
+AC_FUNC_REALLOC
+AC_FUNC_SELECT_ARGTYPES
+AC_FUNC_STAT
+AC_FUNC_STRERROR_R
+AC_FUNC_STRFTIME
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([strtoul])
+AC_CHECK_FUNCS([bzero])
+AC_CHECK_FUNCS([ftruncate])
+AC_CHECK_FUNCS([gethostbyname])
+AC_CHECK_FUNCS([gethostbyname_r])
+AC_CHECK_FUNCS([gettimeofday])
+AC_CHECK_FUNCS([memmove])
+AC_CHECK_FUNCS([memset])
+AC_CHECK_FUNCS([mkdir])
+AC_CHECK_FUNCS([realpath])
+AC_CHECK_FUNCS([select])
+AC_CHECK_FUNCS([setlocale])
+AC_CHECK_FUNCS([socket])
+AC_CHECK_FUNCS([strchr])
+AC_CHECK_FUNCS([strdup])
+AC_CHECK_FUNCS([strerror])
+AC_CHECK_FUNCS([strstr])
+AC_CHECK_FUNCS([strtol])
+AC_CHECK_FUNCS([sqrt])
+dnl The following functions are optional.
+AC_CHECK_FUNCS([alarm])
+AC_CHECK_FUNCS([clock_gettime])
+AC_CHECK_FUNCS([sched_get_priority_min])
+AC_CHECK_FUNCS([sched_get_priority_max])
+AC_CHECK_FUNCS([inet_ntoa])
+AC_CHECK_FUNCS([pow])
+
+if test "$cross_compiling" = "no" ; then
+ AX_SIGNED_RIGHT_SHIFT
+fi
+
+dnl autoscan thinks we need this macro because we have a member function
+dnl called "error". Invoke the macro but don't run the check so autoscan
+dnl thinks we are in the clear. It's highly unlikely that we will ever
+dnl actually use the function that this checks for.
+if false ; then
+ AC_FUNC_ERROR_AT_LINE
+fi
+
+# --- Coverage hooks ---
+
+AC_ARG_ENABLE(coverage,
+ [ --enable-coverage turn on -fprofile-arcs -ftest-coverage],
+ [case "${enableval}" in
+ yes) ENABLE_COVERAGE=1 ;;
+ no) ENABLE_COVERAGE=0 ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-cov) ;;
+ esac],
+ [ENABLE_COVERAGE=2])
+
+if test "x[$]ENABLE_COVERAGE" = "x1"; then
+ AC_MSG_WARN(enable coverage)
+ GCOV_CFLAGS="`echo \"[$]CFLAGS\" | perl -pe 's/-O\d+//g;'` -fprofile-arcs -ftest-coverage"
+ GCOV_CXXFLAGS="`echo \"[$]CXXFLAGS\" | perl -pe 's/-O\d+//g;'` -fprofile-arcs -ftest-coverage"
+ GCOV_LDFLAGS="-XCClinker -fprofile-arcs -XCClinker -ftest-coverage"
+fi
+
+AC_SUBST(ENABLE_COVERAGE)
+AC_SUBST(GCOV_CFLAGS)
+AC_SUBST(GCOV_CXXFLAGS)
+AC_SUBST(GCOV_LDFLAGS)
+
+AC_ARG_ENABLE(boostthreads,
+ [ --enable-boostthreads use boost threads, instead of POSIX pthread (experimental) ],
+ [case "${enableval}" in
+ yes) ENABLE_BOOSTTHREADS=1 ;;
+ no) ENABLE_BOOSTTHREADS=0 ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-cov) ;;
+ esac],
+ [ENABLE_BOOSTTHREADS=2])
+
+
+if test "x[$]ENABLE_BOOSTTHREADS" = "x1"; then
+ AC_MSG_WARN(enable boostthreads)
+ AC_DEFINE([USE_BOOST_THREAD], [1], [experimental --enable-boostthreads that replaces POSIX pthread by boost::thread])
+ LIBS="-lboost_thread $LIBS"
+fi
+
+AM_CONDITIONAL([WITH_BOOSTTHREADS], [test "x[$]ENABLE_BOOSTTHREADS" = "x1"])
+
+AC_CONFIG_HEADERS(config.h:config.hin)
+AC_CONFIG_HEADERS(lib/cpp/src/thrift/config.h:config.hin)
+# gruard against pre defined config.h
+AH_TOP([
+#ifndef CONFIG_H
+#define CONFIG_H
+])
+AH_BOTTOM([
+#endif
+])
+
+
+AC_CONFIG_FILES([
+ Makefile
+ compiler/cpp/Makefile
+ compiler/cpp/version.h
+ compiler/cpp/src/windows/version.h
+ lib/Makefile
+ lib/cpp/Makefile
+ lib/cpp/test/Makefile
+ lib/cpp/thrift-nb.pc
+ lib/cpp/thrift-z.pc
+ lib/cpp/thrift-qt.pc
+ lib/cpp/thrift-qt5.pc
+ lib/cpp/thrift.pc
+ lib/c_glib/Makefile
+ lib/c_glib/thrift_c_glib.pc
+ lib/c_glib/test/Makefile
+ lib/csharp/Makefile
+ lib/csharp/test/ThriftTest/Makefile
+ lib/d/Makefile
+ lib/d/test/Makefile
+ lib/erl/Makefile
+ lib/go/Makefile
+ lib/go/test/Makefile
+ lib/haxe/test/Makefile
+ lib/hs/Makefile
+ lib/java/Makefile
+ lib/js/test/Makefile
+ lib/nodejs/Makefile
+ lib/perl/Makefile
+ lib/perl/test/Makefile
+ lib/php/Makefile
+ lib/php/test/Makefile
+ lib/py/Makefile
+ lib/rb/Makefile
+ lib/lua/Makefile
+ test/Makefile
+ test/c_glib/Makefile
+ test/cpp/Makefile
+ test/erl/Makefile
+ test/go/Makefile
+ test/haxe/Makefile
+ test/hs/Makefile
+ test/php/Makefile
+ test/perl/Makefile
+ test/py/Makefile
+ test/py.twisted/Makefile
+ test/py.tornado/Makefile
+ test/rb/Makefile
+ tutorial/Makefile
+ tutorial/c_glib/Makefile
+ tutorial/cpp/Makefile
+ tutorial/go/Makefile
+ tutorial/haxe/Makefile
+ tutorial/hs/Makefile
+ tutorial/java/Makefile
+ tutorial/js/Makefile
+ tutorial/nodejs/Makefile
+ tutorial/py/Makefile
+ tutorial/py.twisted/Makefile
+ tutorial/py.tornado/Makefile
+ tutorial/rb/Makefile
+])
+
+if test "$have_cpp" = "yes" ; then MAYBE_CPP="cpp" ; else MAYBE_CPP="" ; fi
+AC_SUBST([MAYBE_CPP])
+if test "$have_c_glib" = "yes" ; then MAYBE_C_GLIB="c_glib" ; else MAYBE_C_GLIB="" ; fi
+AC_SUBST([MAYBE_C_GLIB])
+if test "$have_java" = "yes" ; then MAYBE_JAVA="java" ; else MAYBE_JAVA="" ; fi
+AC_SUBST([MAYBE_JAVA])
+if test "$have_csharp" = "yes" ; then MAYBE_CSHARP="csharp" ; else MAYBE_CSHARP="" ; fi
+AC_SUBST([MAYBE_CSHARP])
+if test "$have_python" = "yes" ; then MAYBE_PYTHON="python" ; else MAYBE_PYTHON="" ; fi
+AC_SUBST([MAYBE_PYTHON])
+if test "$have_ruby" = "yes" ; then MAYBE_RUBY="rb" ; else MAYBE_RUBY="" ; fi
+AC_SUBST([MAYBE_RUBY])
+if test "$have_haskell" = "yes" ; then MAYBE_HASKELL="haskell" ; else MAYBE_HASKELL="" ; fi
+AC_SUBST([MAYBE_HASKELL])
+if test "$have_perl" = "yes" ; then MAYBE_PERL="perl" ; else MAYBE_PERL="" ; fi
+AC_SUBST([MAYBE_PERL])
+if test "$have_php" = "yes" ; then MAYBE_PHP="php" ; else MAYBE_PHP="" ; fi
+AC_SUBST([MAYBE_PHP])
+if test "$have_go" = "yes" ; then MAYBE_GO="go" ; else MAYBE_GO="" ; fi
+AC_SUBST([MAYBE_GO])
+if test "$have_nodejs" = "yes" ; then MAYBE_NODEJS="nodejs" ; else MAYBE_NODEJS="" ; fi
+AC_SUBST([MAYBE_NODEJS])
+
+AC_OUTPUT
+
+
+echo
+echo "$PACKAGE $VERSION"
+echo
+echo "Building C++ Library ......... : $have_cpp"
+echo "Building C (GLib) Library .... : $have_c_glib"
+echo "Building Java Library ........ : $have_java"
+echo "Building C# Library .......... : $have_csharp"
+echo "Building Python Library ...... : $have_python"
+echo "Building Ruby Library ........ : $have_ruby"
+echo "Building Haxe Library ........ : $have_haxe"
+echo "Building Haskell Library ..... : $have_haskell"
+echo "Building Perl Library ........ : $have_perl"
+echo "Building PHP Library ......... : $have_php"
+echo "Building Erlang Library ...... : $have_erlang"
+echo "Building Go Library .......... : $have_go"
+echo "Building D Library ........... : $have_d"
+echo "Building NodeJS Library ...... : $have_nodejs"
+echo "Building Lua Library ......... : $have_lua"
+
+if test "$have_cpp" = "yes" ; then
+ echo
+ echo "C++ Library:"
+ echo " Build TZlibTransport ...... : $have_zlib"
+ echo " Build TNonblockingServer .. : $have_libevent"
+ echo " Build TQTcpServer (Qt4) .... : $have_qt"
+ echo " Build TQTcpServer (Qt5) .... : $have_qt5"
+fi
+if test "$have_java" = "yes" ; then
+ echo
+ echo "Java Library:"
+ echo " Using javac ............... : $JAVAC"
+ echo " Using java ................ : $JAVA"
+ echo " Using ant ................. : $ANT"
+fi
+if test "$have_csharp" = "yes" ; then
+ echo
+ echo "C# Library:"
+ echo " Using .NET 3.5 ............ : $net_3_5"
+fi
+if test "$have_python" = "yes" ; then
+ echo
+ echo "Python Library:"
+ echo " Using Python .............. : $PYTHON"
+ echo " Using Trial ............... : $TRIAL"
+fi
+if test "$have_php" = "yes" ; then
+ echo
+ echo "PHP Library:"
+ echo " Using php-config .......... : $PHP_CONFIG"
+fi
+if test "$have_ruby" = "yes" ; then
+ echo
+ echo "Ruby Library:"
+ echo " Using Ruby ................ : $RUBY"
+fi
+if test "$have_haskell" = "yes" ; then
+ echo
+ echo "Haskell Library:"
+ echo " Using Haskell ............. : $RUNHASKELL"
+ echo " Using Cabal ............... : $CABAL"
+fi
+if test "$have_haxe" = "yes" ; then
+ echo
+ echo "Haxe Library:"
+ echo " Using Haxe ................ : $HAXE"
+ echo " Using Haxe version ........ : $HAXE_VERSION"
+fi
+if test "$have_perl" = "yes" ; then
+ echo
+ echo "Perl Library:"
+ echo " Using Perl ................ : $PERL"
+fi
+if test "$have_erlang" = "yes" ; then
+ echo
+ echo "Erlang Library:"
+ echo " Using erlc ................ : $ERLC"
+fi
+if test "$have_go" = "yes" ; then
+ echo
+ echo "Go Library:"
+ echo " Using Go................... : $GO"
+ echo " Using Go version........... : $($GO version)"
+fi
+if test "$have_d" = "yes" ; then
+ echo
+ echo "D Library:"
+ echo " Using D Compiler .......... : $DMD"
+ echo " Building D libevent tests . : $with_d_event_tests"
+ echo " Building D SSL tests ...... : $with_d_ssl_tests"
+fi
+if test "$have_nodejs" = "yes" ; then
+ echo
+ echo "NodeJS Library:"
+ echo " Using NodeJS .............. : $NODEJS"
+ echo " Using NodeJS version....... : $($NODEJS --version)"
+fi
+if test "$have_lua" = "yes" ; then
+ echo
+ echo "Lua Library:"
+ echo " Using Lua .............. : $LUA"
+fi
+echo
+echo "If something is missing that you think should be present,"
+echo "please skim the output of configure to find the missing"
+echo "component. Details are present in config.log."
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/contrib/Rebus/App.config
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/contrib/Rebus/App.config b/depends/thirdparty/thrift/contrib/Rebus/App.config
new file mode 100644
index 0000000..4208af6
--- /dev/null
+++ b/depends/thirdparty/thrift/contrib/Rebus/App.config
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<configuration>
+
+ <configSections>
+ <section name="rebus" type="Rebus.Configuration.RebusConfigurationSection, Rebus"/>
+ </configSections>
+
+ <rebus inputQueue="MyResponses" errorQueue="MyErrors" workers="1">
+ <endpoints>
+ <add messages="RebusSample.MathRequestCall, RebusSample" endpoint="MathRequests"/>
+ <add messages="RebusSample.MathResponseCall, RebusSample" endpoint="MathResponses"/>
+ </endpoints>
+ </rebus>
+
+ <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/contrib/Rebus/Program.cs
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/contrib/Rebus/Program.cs b/depends/thirdparty/thrift/contrib/Rebus/Program.cs
new file mode 100644
index 0000000..563c62a
--- /dev/null
+++ b/depends/thirdparty/thrift/contrib/Rebus/Program.cs
@@ -0,0 +1,81 @@
+\ufeff/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+using Rebus.Configuration;
+using Rebus.RabbitMQ;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RebusSample.Client;
+using RebusSample.Server;
+
+namespace RebusSample
+{
+ class Program
+ {
+ static BuiltinContainerAdapter StartRequestServer(string server)
+ {
+ // client Rebus configuration
+ var adapter = new BuiltinContainerAdapter();
+ Configure.With(adapter)
+ .Transport(t => t.UseRabbitMq("amqp://" + server, "MathRequests", "MathRequestErrors"))
+ .MessageOwnership(o => o.FromRebusConfigurationSection())
+ .CreateBus().Start();
+
+ // register all relevant message handlers
+ adapter.Register(typeof(MathRequestCallHandler));
+ return adapter;
+ }
+
+
+ static BuiltinContainerAdapter StartResponseServer(string server)
+ {
+ // client Rebus configuration
+ var adapter = new BuiltinContainerAdapter();
+ Configure.With(adapter)
+ .Transport(t => t.UseRabbitMq("amqp://" + server, "MathResponses", "MathResponseErrors"))
+ .MessageOwnership(o => o.FromRebusConfigurationSection())
+ .CreateBus().Start();
+
+ // register all relevant message handlers
+ adapter.Register(typeof(MathResponseCallHandler));
+ return adapter;
+ }
+
+ static void Main(string[] args)
+ {
+ string server = "localhost";
+
+ // start all servers
+ var req = StartRequestServer(server);
+ var rsp = StartResponseServer(server);
+
+ // send the first message
+ var random = new Random();
+ var client = new MathRequestClient(server);
+ client.DoTheMath(random.Next(), random.Next());
+
+ // now what?
+ Console.Write("Hit <ENTER> to stop ... ");
+ Console.ReadLine();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/contrib/Rebus/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/contrib/Rebus/Properties/AssemblyInfo.cs b/depends/thirdparty/thrift/contrib/Rebus/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..5de6a14
--- /dev/null
+++ b/depends/thirdparty/thrift/contrib/Rebus/Properties/AssemblyInfo.cs
@@ -0,0 +1,38 @@
+\ufeff/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("RebusSample")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("RebusSample")]
+[assembly: AssemblyCopyright("Copyright � 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+
+[assembly: Guid("0af10984-40d3-453d-b1e5-421529e8c7e2")]
+
+[assembly: AssemblyVersion("0.9.3.0")]
+[assembly: AssemblyFileVersion("0.9.3.0")]
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/contrib/Rebus/README.md
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/contrib/Rebus/README.md b/depends/thirdparty/thrift/contrib/Rebus/README.md
new file mode 100644
index 0000000..bbb9c49
--- /dev/null
+++ b/depends/thirdparty/thrift/contrib/Rebus/README.md
@@ -0,0 +1,21 @@
+Sample code for the combination of Thrift with Rebus.
+
+Rebus is a .NET service bus, similar to NServiceBus, but more lightweight.
+It ihas been mainly written by Mogens Heller Grabe and is currently hosted
+on GitHub (https://github.com/rebus-org/Rebus)
+
+As with all ServiceBus or MQ scenarios, due to the highly asynchronous
+operations it is recommended to do all calls as "oneway void" calls.
+
+The configuration can be done via App.Config, via code or even mixed from
+both locations. Refer to the Rebus documentation for further details. For
+this example, since we are effectively implementing two queue listeners in
+only one single process, we do configuration of incoming and error queues
+in the code.
+
+If you want to communicate with non-NET languages, you may need a customized
+serializer as well, in order to override Rebus' default wire format. Please
+refer to the Rebus docs on how to do that (it's not that hard, really).
+
+Additional requirements:
+- RabbitMQ .NET client (see nuget)
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/contrib/Rebus/RebusSample.csproj
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/contrib/Rebus/RebusSample.csproj b/depends/thirdparty/thrift/contrib/Rebus/RebusSample.csproj
new file mode 100644
index 0000000..4058a6d
--- /dev/null
+++ b/depends/thirdparty/thrift/contrib/Rebus/RebusSample.csproj
@@ -0,0 +1,102 @@
+\ufeff<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{264E2126-EDE0-4B47-89C1-B397B25BB13D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>RebusSample</RootNamespace>
+ <AssemblyName>RebusSample</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="RabbitMQ.Client">
+ <HintPath>..\..\..\..\..\Toolbox\ServiceBus\3rdparty\rabbitmq-dotnet-client-3.2.1-dotnet-3.0\bin\RabbitMQ.Client.dll</HintPath>
+ </Reference>
+ <Reference Include="Rebus">
+ <HintPath>..\..\..\..\..\Toolbox\ServiceBus\3rdparty\Rebus-master\deploy\NET40\Rebus.dll</HintPath>
+ </Reference>
+ <Reference Include="Rebus.RabbitMQ">
+ <HintPath>..\..\..\..\..\Toolbox\ServiceBus\3rdparty\Rebus-master\deploy\NET40\Rebus.RabbitMQ.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="gen-csharp\BasicMathClient.cs" />
+ <Compile Include="gen-csharp\BasicMathServer.cs" />
+ <Compile Include="ServiceImpl\Both.cs" />
+ <Compile Include="ServiceImpl\Client.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="ServiceImpl\Server.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <ItemGroup />
+ <ItemGroup>
+ <ProjectReference Include="..\..\lib\csharp\src\Thrift.csproj">
+ <Project>{499eb63c-d74c-47e8-ae48-a2fc94538e9d}</Project>
+ <Name>Thrift</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PreBuildEvent>cd $(ProjectDir)
+if not exist gen-csharp\*.cs thrift -gen csharp sample.thrift
+</PreBuildEvent>
+ </PropertyGroup>
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/contrib/Rebus/RebusSample.sln
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/contrib/Rebus/RebusSample.sln b/depends/thirdparty/thrift/contrib/Rebus/RebusSample.sln
new file mode 100644
index 0000000..284ef36
--- /dev/null
+++ b/depends/thirdparty/thrift/contrib/Rebus/RebusSample.sln
@@ -0,0 +1,28 @@
+\ufeff
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30110.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RebusSample", "RebusSample.csproj", "{264E2126-EDE0-4B47-89C1-B397B25BB13D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thrift", "..\..\lib\csharp\src\Thrift.csproj", "{499EB63C-D74C-47E8-AE48-A2FC94538E9D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {264E2126-EDE0-4B47-89C1-B397B25BB13D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {264E2126-EDE0-4B47-89C1-B397B25BB13D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {264E2126-EDE0-4B47-89C1-B397B25BB13D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {264E2126-EDE0-4B47-89C1-B397B25BB13D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/d709f67d/depends/thirdparty/thrift/contrib/Rebus/ServiceImpl/Both.cs
----------------------------------------------------------------------
diff --git a/depends/thirdparty/thrift/contrib/Rebus/ServiceImpl/Both.cs b/depends/thirdparty/thrift/contrib/Rebus/ServiceImpl/Both.cs
new file mode 100644
index 0000000..fba67ec
--- /dev/null
+++ b/depends/thirdparty/thrift/contrib/Rebus/ServiceImpl/Both.cs
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+using System;
+
+
+namespace RebusSample
+{
+ // generic data container for serialized Thrift calls
+ public class GenericThriftServiceCall
+ {
+ public byte[] rawBytes;
+ }
+
+ // specific containers (one per Thrift service) to leverage Rebus' handler routing
+ public class MathRequestCall : GenericThriftServiceCall { }
+ public class MathResponseCall : GenericThriftServiceCall { }
+
+}
\ No newline at end of file