#
# 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 = ../../compiler/cpp/thrift
THRIFT_OMIT_FILE = test/Thrift_omit_without.thrift
THRIFT_FILES = $(wildcard test/*.thrift) \
		  $(THRIFT_OMIT_FILE) \
		  ../../test/ConstantsDemo.thrift \
		  ../../test/NameConflictTest.thrift \
		  ../../test/ThriftTest.thrift

if ERLANG_OTP16
ERL_FLAG = erl:otp16
ERL_FLAG_LEGACY = erl:otp16,legacynames
# otp16 + maps does not make sense. We need to generate it anyway to avoid include error.
ERL_FLAG_MAPS = erl:otp16
else
ERL_FLAG = erl
ERL_FLAG_LEGACY = erl:legacynames
ERL_FLAG_MAPS = erl:maps
endif

$(THRIFT_OMIT_FILE): test/Thrift_omit_with.thrift
	grep -v omit $< >$@

.generated: $(THRIFT) $(THRIFT_FILES)
	for f in $(THRIFT_FILES) ; do \
		$(THRIFT) --gen $(ERL_FLAG) -o test $$f ; \
	done
	$(THRIFT) --gen $(ERL_FLAG_LEGACY) -o test test/flags/LegacyNames.thrift
	$(THRIFT) --gen $(ERL_FLAG_MAPS) -o test test/flags/Thrift3214.thrift
	touch .generated

all: .generated
	$(REBAR) get-deps
	$(REBAR) compile

check: .generated
	$(REBAR) -C rebar.test.config get-deps
	$(REBAR) -C rebar.test.config compile
	$(REBAR) -C rebar.test.config skip_deps=true eunit

install: all
	mkdir -p $(DESTDIR)$(ERLANG_INSTALL_LIB_DIR_thrift) ; \
	mkdir -p $(DESTDIR)$(ERLANG_INSTALL_LIB_DIR_thrift)/ebin ; \
	mkdir -p $(DESTDIR)$(ERLANG_INSTALL_LIB_DIR_thrift)/include ; \
	mkdir -p $(DESTDIR)$(ERLANG_INSTALL_LIB_DIR_thrift)/src ; \
	for p in ebin/*.app* ebin/*.beam include/*.hrl src/*.erl ; \
		do $(INSTALL) $$p $(DESTDIR)$(ERLANG_INSTALL_LIB_DIR_thrift)/$$p ; \
	done

uninstall:
	rm -rf $(DESTDIR)$(ERLANG_INSTALL_LIB_DIR_thrift)

clean:
	rm -f .generated
	rm -rf test/gen-erl/
	rm -f $(THRIFT_OMIT_FILE)
	$(REBAR) clean

maintainer-clean-local:
	rm -rf ebin

EXTRA_DIST = \
	include \
	src \
	coding_standards.md \
	rebar.config \
	rebar.test.config \
	test \
	README.md

MAINTAINERCLEANFILES = Makefile.in
