# Licensed 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_VERSION = 0.9.1
THRIFT_DISTNAME = thrift-$(THRIFT_VERSION)
THRIFT_URL = https://archive.apache.org/dist/thrift/$(THRIFT_VERSION)/$(THRIFT_DISTNAME).tar.gz
THRIFT_SHA256 = ac175080c8cac567b0331e394f23ac306472c071628396db2850cb00c41b0017

# This patch is documented here: https://issues.apache.org/jira/browse/THRIFT-2386
THRIFT_PATCH_URL = https://issues.apache.org/jira/secure/attachment/12632477/yylex.patch
THRIFT_PATCH_SHA256 = 70f20b4e5b2e004b8a0d075b80a52750bce5be02ed83efdc60adbc45ec386a6c

THRIFT = ./$(THRIFT_DISTNAME)/compiler/cpp/thrift
THRIFT_CONFIGURE_FLAGS = \
  --disable-dependency-tracking \
  --disable-shared \
  --without-c_glib \
  --without-cpp \
  --without-csharp \
  --without-d \
  --without-erlang \
  --without-go \
  --without-java \
  --without-haskell \
  --without-perl \
  --without-php \
  --without-php_extension \
  --without-pic \
  --without-python \
  --without-qt4 \
  --without-ruby \
  --without-tests

all: $(THRIFT)

define calculate_sha256
	openssl dgst -sha256 | cut -d' ' -f2
endef

$(THRIFT):
	sha256=$$(curl -s --show-error $(THRIFT_URL) | tee $(THRIFT_DISTNAME).tar.gz | $(calculate_sha256)) && \
	[ "$${sha256}" = "$(THRIFT_SHA256)" ] && \
	tar zxvf $(THRIFT_DISTNAME).tar.gz && \
	cd $(THRIFT_DISTNAME) && \
	sha256=$$(curl -s --show-error $(THRIFT_PATCH_URL) | tee thrift.patch | $(calculate_sha256)) && \
	[ "$${sha256}" = "$(THRIFT_PATCH_SHA256)" ] && \
	patch -p1 < thrift.patch && \
	./configure $(THRIFT_CONFIGURE_FLAGS) && \
	make -j4

clean:
	rm -fr $(THRIFT_DISTNAME)*
