#
# 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 = $(top_srcdir)/compiler/cpp/thrift
THRIFTCMD = $(THRIFT) --gen haxe -r
THRIFTTEST = $(top_srcdir)/test/ThriftTest.thrift

BIN_CPP = bin/Main-debug

gen-haxe/ThriftTest/ThriftTest.hx: $(THRIFTTEST)
	$(THRIFTCMD) $(THRIFTTEST)
	
all-local: $(BIN_CPP)
	
$(BIN_CPP):	gen-haxe/ThriftTest/ThriftTest.hx
	$(HAXE) --cwd .  cpp.hxml

	
#TODO: other haxe targets
#	$(HAXE)  --cwd .  csharp
#	$(HAXE)  --cwd .  flash
#	$(HAXE)  --cwd .  java
#	$(HAXE)  --cwd .  javascript
#	$(HAXE)  --cwd .  neko
#	$(HAXE)  --cwd .  php
#	$(HAXE)  --cwd .  python  # needs Haxe 3.1.4


clean-local:
	$(RM) -r gen-haxe bin

check: $(BIN_CPP)
	timeout 120 $(BIN_CPP) server &
	sleep 1
	$(BIN_CPP) client

